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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

深度探索C++ 对象模型(3)-默认构造函数Default Constructor

發布時間:2025/3/21 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度探索C++ 对象模型(3)-默认构造函数Default Constructor 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Default Constructor只對base class subobjects和member class objects初始化,對data member不做操作

2. 編譯器構造Default Constructor 只在下面4種case:

  • 1.包含有帶默認構造函數的對象成員的類 .
  • 2.繼承自帶有默認構造函數的基類的類 .
  • 3.有虛函數的類(需要初始化每一個class object的vptr) .
  • 4.有一個虛基類的類

本文主要針對"包含有帶默認構造函數的對象成員的類"

class Foo {public:Foo() { cout << "Foo Constructor" << endl; } Foo(int) { }};void test_defaultConstructor(){cout << "begin" << endl;Bar bar;cout << "end" << endl;}

(1). 若無定義構造函數

class Bar { private: Foo foo; };

編譯器的對類Bar的Default Constructor為

Bar::Bar(){foo.Foo::Foo();//調用Foo的構造函數來初始化foo對象 }

運行測試代碼,輸出結果為:
begin
Foo Constructor
end

(2). 若有構造函數

Bar::Bar() {cout << "Bar default code" << endl; }

此時編譯器擴展已知構造函數:

Bar::Bar(){foo.Foo::Foo();//調用Foo的構造函數來初始化foo對象cout << "Bar default code" << endl; }

運行測試代碼,輸出結果為:
begin
Foo Constructor
Bar default code
end

(3). 若有多個class member objects都要求constructor初始化,將按照在classs中的聲明次序調用

class Dopey {public:Dopey() {cout << "Dopey Constructor" << endl;}};class Sneezy {public:Sneezy() {cout << "Sneezy Constructor" << endl;}};class Bashful {public:Bashful() {cout << "Bashful Constructor" << endl;}};class Snow_White { private:Dopey dopey;Sneezy sneezy;Bashful bashful;int mumble; };void test_defaultConstructor(){cout << "begin" << endl;Snow_White obj;cout << "end" << endl;}

運行測試代碼,輸出結果為:
begin
Dopey Constructor
Sneezy Constructor
Bashful Constructor
end

(4). 如果基類有默認構造函數,又有一個成員有默認構造函數,那么順序是誰先呢?

class SnowWhite : public Dopey{ private: Sneezy sneezy; };void test_defaultConstructor_ObjectOrder(){cout << "begin" << endl;SnowWhite obj;cout << "end" << endl;}

運行測試代碼,輸出結果為:
begin
Dopey Constructor
Sneezy Constructor
end


【引用】
[1]<<深度探索C++ 對象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 譯
[2] 代碼地址 https://github.com/thefistlei/cplusStudy.git

總結

以上是生活随笔為你收集整理的深度探索C++ 对象模型(3)-默认构造函数Default Constructor的全部內容,希望文章能夠幫你解決所遇到的問題。

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