大多數c++書籍都說在我們沒有自己定義建構函式的時候,編譯器會自動生成預設建構函式。其實這句話我一直也是
深信不疑。
但是最近看了一些資料讓我有了一點新的認識。
其實我覺得大多數c++書籍之所以這樣描述其實是玩了文字遊戲的。如果說編譯器
自動產生的預設建構函式對於我們
的類沒有任
何作用,也就是說在編譯器預設
生成的這個建構函式裡根本沒有任何實質性的**工作,那麼這種預設構
造其實是可有
可無的,所
以不妨說編譯器其實是為每個類生成了預設建構函式的。
在深度探索c++物件模型中講了四種關於編譯器自動生成預設建構函式的情況,在這四種情況下生成的預設構
造函式裡面是由
實質的隱含**操作的:
1.如果類a成員中含有某個類b的物件,恰好類b也顯示定義了建構函式,那麼在產生類a物件的時候編譯器會產
生乙個預設構造
函式,在這個預設建構函式中提供了呼叫類a建構函式的**。
2.如果類b繼承於類a,且類a顯示定義了建構函式,那麼在生成類b物件的過程中編譯器同樣會產生乙個預設構
造函式,在這個
建構函式中提供呼叫基類a建構函式的**。
3.如果某個類含有虛函式,那麼編譯器會自動產生乙個預設建構函式以提供虛表指標相關的初始化操作。
4.如果乙個類虛繼承於其他類,那麼同樣的編譯器會為該類產生預設的建構函式。
除以上四種情況,編譯器都不產生預設建構函式,因為就算編譯器產生了預設建構函式,然而在該預設建構函式中沒
有實質的內容,那
麼這個預設建構函式也就是沒存在的意義的,那麼我們說
編譯器不產生也無妨吧。
C 預設建構函式的一點說明
大多數c 書籍都說在我們沒有自己定義建構函式的時候,編譯器會自動生成預設建構函式。其實這句話我一直也是 深信不疑。但是最近看了一些資料讓我有了一點新的認識。其實我覺得大多數c 書籍之所以這樣描述其實是玩了文字遊戲的。如果說編譯器 自動產生的預設建構函式對於我們 的類沒有任 何作用,也就是說在編譯器預...
C 繼承與建構函式一點說明
include using namespace std int i 1 class mycls void echo private int m nfir int m nsec int m nthd int m nfor int main 結果為 11析 如果為繼承的話,此為classmycls bc...
c 建構函式的一點見解
讀書讀到 建構函式這一部分,想到了些有趣的東西,寫下來以給大家分享 建構函式是乙個類初始化時呼叫的無返回值的特殊同名方法,當乙個類從另乙個類繼承 派生類的初始化過程其實就是向上不斷呼叫基類的建構函式這也是 net類庫的乙個重要特性,通過初始化乙個派生類 來完成一整個類庫的初始化,書上提到派生類預設的...