EasyC++,默認(rèn)構(gòu)造函數(shù)
大家好,我是梁唐。
默認(rèn)構(gòu)造函數(shù)
上一篇文章當(dāng)中介紹的是顯式構(gòu)造函數(shù),也就是說我們需要傳入值來對類的成員變量進(jìn)行初始化。
但也有一些情況,我們可能并不需要傳入值進(jìn)行初始化,或者有一些其他的邏輯。針對這種情況,C++提供了默認(rèn)構(gòu)造函數(shù)的功能。所謂默認(rèn)構(gòu)造函數(shù),也就是在沒有提供顯式的初始值時(shí),用來創(chuàng)建對象的構(gòu)造函數(shù)。
默認(rèn)構(gòu)造函數(shù)非常簡單,還是以之前的Stock類為例:
- Stock::Stock() {
- ...
- }
如果默認(rèn)構(gòu)造函數(shù)里沒有任何邏輯,我們也可以把它寫在類聲明里:
- class Stock {
- ...
- Stock() {}
- };
- #endif
C++當(dāng)中有一個(gè)很奇怪的設(shè)定,當(dāng)一個(gè)類我們沒有提供任何構(gòu)造函數(shù)時(shí),C++會(huì)默認(rèn)賦予它一個(gè)默認(rèn)構(gòu)造函數(shù)。但當(dāng)我們一旦實(shí)現(xiàn)了構(gòu)造函數(shù)之后,C++則不會(huì)進(jìn)行如此操作。意味著對于定義了構(gòu)造函數(shù)的類來說,想要使用默認(rèn)構(gòu)造函數(shù),必須由程序員手動(dòng)定義。
有了默認(rèn)構(gòu)造函數(shù)之后,我們才可以直接聲明類的實(shí)例:
- Stock stock1;
如果Stock類沒有默認(rèn)構(gòu)造函數(shù),那么上述的語句會(huì)報(bào)錯(cuò)。
實(shí)現(xiàn)默認(rèn)構(gòu)造函數(shù),除了上述那樣手動(dòng)創(chuàng)建一個(gè)沒有任何參數(shù)的構(gòu)造函數(shù)之外,還可以將已有的構(gòu)造函數(shù)的所有參數(shù)都設(shè)置默認(rèn)值。
- Stock(const string &co = "Error", int n = 0, double pr = 0.0);
由于只能有一個(gè)默認(rèn)構(gòu)造函數(shù),所以不要同時(shí)采用這兩種方式。