C++構(gòu)造函數(shù)詳解
文章轉(zhuǎn)自公眾號(hào):Coder梁(ID:Coder_LT)
上一篇文章我們介紹了定義了類,在使用之前,往往還需要對(duì)類進(jìn)行初始化。這篇介紹的就是對(duì)類進(jìn)行初始化的方法。
像是結(jié)構(gòu)體,我們可以使用列表初始化的方法進(jìn)行初始化:
struct Thing {
? ? char *pn;
? ? int m;
};
Thing th = {"hello", 23};但類不行,因?yàn)榻Y(jié)構(gòu)體當(dāng)中的成員變量都是public的,而類往往是私有的。這意味著我們不能直接用程序訪問數(shù)據(jù)成員,需要設(shè)計(jì)成函數(shù)。
在C++當(dāng)中,這種用來構(gòu)造類的函數(shù),被稱為類構(gòu)造函數(shù)。構(gòu)造函數(shù)的原型和函數(shù)頭有一個(gè)比較明顯的特征——它雖然沒有返回值,但沒有被聲明稱void類型,實(shí)際上構(gòu)造函數(shù)沒有聲明類型。
比如我們還是之前的類:
class Stock {
? ? private:
? ? ?std::string company;
? ? ?long shares;
? ? ?double share_val;
? ? ?double total_val;
? ? ?void set_tot() {total_val = shares * share_val;}
? ? public:
? ? ?void accquire(const std::string &co, long n, double pr);
? ? ?void buy(long num, double price);
? ? ?void sell(long num, double price);
? ? ?void update(double price);
? ? ?void show();
};
#endif現(xiàn)在我們要加入構(gòu)造函數(shù),首先是在類中加上聲明:
class Stock {
? ? ...
? ? Stock(const string &co, long n=0, double pr=0.0);
}注意看,我們實(shí)現(xiàn)定義的時(shí)候,函數(shù)是沒有返回類型的:
Stock::Stock(const string &co, long n, double pr) {
? ? company = co;
? ? if (n < 0) {
? ? ? ? std::cerr << "Number of shares can't be negative;"
? ? ? ? ? ? ? ?<< company << " shares set to 0.\n";
? ? ? ? shares = 0;
? ? }else {
? ? ? ? shares = n;
? ? ? ? share_val = pr;
? ? ? ? set_tot();
? ? }
}注意,構(gòu)造函數(shù)中的參數(shù)名不能和類成員名一致,否則會(huì)引起錯(cuò)誤:
Stock::Stock(const string &company, long shares, double share_val) {}
如果一致的話,就會(huì)出現(xiàn)這樣的代碼:
shares = shares;
為了避免這種混亂,一般會(huì)在代碼風(fēng)格層面加以區(qū)分。比如在谷歌代碼規(guī)范當(dāng)中,類中的private成員變量中需要使用后綴_。
最后,我們來看下構(gòu)造函數(shù)的使用。C++當(dāng)中支持兩種方式,
我們先來看第一種,顯式地調(diào)用:
Stock food = Stock("word", 250, 2.5);
另外一種方式是隱式地調(diào)用:
Stock garment("furry", 50, 2.5);
這種方式更加緊湊,我們每次使用new動(dòng)態(tài)分配內(nèi)存時(shí),也會(huì)使用類構(gòu)造函數(shù)。
Stock *pstock = new Stock("ele", 18, 19.0);
構(gòu)造函數(shù)的使用不同于一般的類方法,我們無法使用對(duì)象來調(diào)用構(gòu)造函數(shù)。
到此這篇關(guān)于C++構(gòu)造函數(shù)詳解的文章就介紹到這了,更多相關(guān)C++構(gòu)造函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言程序中結(jié)構(gòu)體的內(nèi)存對(duì)齊詳解
這篇文章主要為大家詳細(xì)介紹了C語言程序中結(jié)構(gòu)體的內(nèi)存對(duì)齊的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下2022-11-11
如何在程序中判斷VS的版本(實(shí)現(xiàn)方法詳解)
下面小編就為大家?guī)硪黄绾卧诔绦蛑信袛郪S的版本(實(shí)現(xiàn)方法詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
C++的get()函數(shù)與getline()函數(shù)使用詳解
這篇文章主要介紹了C++的get()函數(shù)與getline()函數(shù)使用詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
C語言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解中篇練習(xí)
使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么2022-04-04
matlab模擬退火算法單約束車間流水線調(diào)度解決實(shí)現(xiàn)及示例
這篇文章主要為大家介紹了matlab模擬退火算法求解單約束車間流水線調(diào)度的實(shí)現(xiàn)及示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02

