日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++继承中析构函数 构造函数的调用顺序以及虚析构函数

發布時間:2025/7/14 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++继承中析构函数 构造函数的调用顺序以及虚析构函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先說說構造函數。大家都知道構造函數里就能夠調用成員變量,而繼承中子類是把基類的成員變成自己的成員,那么也就是說子類在構造函數里就能夠調用基類的成員了,這就說明創建子類的時候必須先調用基類的構造函數,僅僅有這樣子類才干在構造函數里使用基類的成員,所以是創建子類時先調用基類的構造函數然后再調用自己的構造函數。通俗點說,你要用某些物品。但這些物品你沒辦法自己生產,自然就要等別人生產出來,你才干拿來用。

接著就是析構函數了,上面說到子類是將基類的成員變成自己的成員,那么基類就會僅僅存在子類中直到子類調用析構函數后。做個如果:假如在基類的析構函數調用比子類的先。這樣會發生什么事呢?類成員終止了,而類本身卻還在,可是在類存在的情況下。類成員就應該還存在的,這不就產生矛盾了嗎?所以子類是調用自身的析構函數再調用基類的析構函數。基類的析構函數必須設置為虛的,而作為終于子類則能夠是虛的也能夠不是虛的,由于沒有其它類繼承于它不會影響終于功能。但又不是全部類的析構函數都設置為虛的比較好。由于存在虛函數的類實例化時會額外加入一個虛表指針。浪費內存性能。

如今到了虛函數了。virtual主要作用是在多態方面,而C++的多態最基本的是類的動態綁定,動態綁定則是指將子類的指針或引用轉換成基類,基類對象就能夠動態推斷調用哪個子類成員函數。

這就說明在沒有子類指針或引用轉換為基類對象的話。virtual沒有存在意義(純虛函數除外)。也就是有沒有virtual都是調用其自身的成員函數。通過這些分析,對于virtual就有了眉目了。

當子類指針或引用轉換為基類時,若基類中實用virtual定義的函數,被子類重寫后。此基類對象就會依據子類調用子類中的重寫后的函數,而不是基類中的函數;反之,若是基類中沒實用virtual定義,則無論基類被賦值的是哪個子類的值,調用的都是基類的成員函數(當然指的值子類重載的基類函數,不然就算要調用子類特有的成員函數也會編譯只是)。

存在虛析構函數為什么不會存在虛構造函數呢?

構造函數不能是虛函數,由于構造子類時本身也是調用的子類構造函數,然后子類構造函數會調用基類構造函數。所以虛構造函數的存在是沒有意義的。

僅僅有在構造完畢后,對象才干成為一個類的名符事實上的實例。

另外,靜態成員函數和內聯函數也不能是虛函數。

虛函數是針對對象的,不是針對類的.

這一點能夠從類成員函數(即靜態成員函數)不能是虛函數看出來.倘若類不被實例化為對象,虛函數的存在本身也沒意義.


上面的如果我感覺并不認可,派生類中的構造,析構能夠調用到基類的構造析構是由編譯器編譯中實現的.即:在子類構造函數開頭自己主動加入默認的基類構造函數或初始化列表中指定的基類構造函數調用;在子類析構函數末尾自己主動加入其基類析構函數調用.

至于為什么會先調用基類構造函數再調用子類構造函數,先調用子類析構函數再調用基類析構函數.我覺得:由于僅僅可能出現子類中成員依賴基類成員的存在而存在,而不會出現基類中成員依賴子類成員存在.比如:子類中有一個成員是基類中一個指針成員所指向對象的引用.則這樣的情況下倘若沒有先調用基類構造函數對其指針成員初始化創建對象.那子類引用初始化時便不知會指向何處.相同析構時倘若先調用基類將當中的對象釋放后,此時子類中引用變量在做一下善后處理時也便沒有不論什么意義,因而其指向對象已經釋放掉了. 派生類對象中基類成員先于子類成員存在,后于子類對象消失.

轉載于:https://www.cnblogs.com/gavanwanggw/p/6916131.html

總結

以上是生活随笔為你收集整理的C++继承中析构函数 构造函数的调用顺序以及虚析构函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。