淺談c++構(gòu)造函數(shù)問題,初始化和賦值問題
默認(rèn)構(gòu)造函數(shù)(就是沒有參數(shù)的構(gòu)造函數(shù))
The Default Constructor
The default constructor is the constructor used to create an object when you don't provide explicit initialization values. That is, it's the constructor used for declarations like this:
Stock stock1; // uses the default constructor
1、由編譯器自動(dòng)生成
2、由我們自己定義的
這里又有兩種情況
上面說了啊,default constructor有兩種(……your own default constructor. This is a constructor that takes no arguments):
1)One is to provide default values for all the arguments to the existing constructor:
Stock(const char * co = "Error", int n = 0, double pr = 0.0);
2)The second is to use function overloading to define a second constructor, one that has no arguments:
Stock();
有一點(diǎn)注意的時(shí)候兩者不能同時(shí)使用:
You can have only one default constructor, so be sure that you don't do both. (With early versions of C++, you could use only the second method for creating a default constructor.)
This is a constructor that takes no arguments:這個(gè)指的是調(diào)用的時(shí)候不帶參數(shù)。
編譯器自動(dòng)添加默認(rèn)構(gòu)造函數(shù)的條件:編譯器實(shí)現(xiàn)的構(gòu)造函數(shù)其實(shí)就是什么都不做
1.沒有任何自己定義的構(gòu)造函數(shù)(即便是復(fù)制構(gòu)造函數(shù)也不行,如果自己定義復(fù)制構(gòu)造函數(shù),則必須自己定義構(gòu)造函數(shù))
2、數(shù)據(jù)成員中沒有const和reference。--因?yàn)橐跏蓟?/p>
拷貝構(gòu)造函數(shù)的參數(shù)必須是引用的原因:拷貝構(gòu)造函數(shù)的參數(shù)使用引用類型不是為了減少一次內(nèi)存拷貝, 而是避免拷貝構(gòu)造函數(shù)無限制的遞歸下去。
如果是值的話,那在傳值的時(shí)候還要再調(diào)一次拷貝構(gòu)造函數(shù)
然后又要傳值,又要再調(diào)一次....
然后你就內(nèi)存不夠,當(dāng)了
關(guān)于賦值==函數(shù)和拷貝構(gòu)造函數(shù)的區(qū)別:
#include<iostream> using namespace std; class A { public: int i; A( const A& a) { i=a.i; cout<<"copy is build"<<endl; } explicit A(int y) { i=y; } }; A fun(A i) { A a1(i); A a2=a1;//其實(shí)就調(diào)用拷貝構(gòu)造函數(shù) return a2; } int main() { A a(1); fun(a); }
拷貝構(gòu)造函數(shù)一共調(diào)用四次拷貝構(gòu)造函數(shù)。。fun參數(shù)傳值一次,a1(i)一次,a2(a1)一次,return的時(shí)候構(gòu)造臨時(shí)對象一次
如果函數(shù)返回對象,而不是指針,那么在執(zhí)行return的時(shí)候,會(huì)使用被return的對象“復(fù)制構(gòu)造”臨時(shí)對象,然后,return語句執(zhí)行完畢(遇到分號;了)函數(shù)內(nèi)部創(chuàng)建的全部變量析構(gòu)、出棧。而被“賦值構(gòu)造”的臨時(shí)對象則在調(diào)用該函數(shù)的語句執(zhí)行完畢(遇到分號;或者右邊的大括號})后,析構(gòu)。
總結(jié)一句:
臨時(shí)變量的生存范圍是語句級——分號;結(jié)束或者右邊的大括號}結(jié)束。語句結(jié)束之后,臨時(shí)變量就被析構(gòu)了~
以上就是小編為大家?guī)淼臏\談c++構(gòu)造函數(shù)問題,初始化和賦值問題全部內(nèi)容了,希望大家多多支持我們~
上一篇:利用反射獲得類的public static/const成員的值實(shí)例
欄 目:C語言
本文標(biāo)題:淺談c++構(gòu)造函數(shù)問題,初始化和賦值問題
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1862.html
您可能感興趣的文章
- 04-02c語言沒有round函數(shù) round c語言
- 01-10深入理解C++中常見的關(guān)鍵字含義
- 01-10使用C++實(shí)現(xiàn)全排列算法的方法詳解
- 01-10c++中inline的用法分析
- 01-10用C++實(shí)現(xiàn)DBSCAN聚類算法
- 01-10全排列算法的非遞歸實(shí)現(xiàn)與遞歸實(shí)現(xiàn)的方法(C++)
- 01-10C++大數(shù)模板(推薦)
- 01-10淺談C/C++中的static與extern關(guān)鍵字的使用詳解
- 01-10深入C/C++浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式詳解
- 01-10深入理解C/C++混合編程


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?