構造函數的魔力

【摘要】C++作爲C語言的繼承,具有C語言的一些特性,C++主要是面向對象,因此離不開類的使用,而類的使用和C語言裏面的結構體很像,不過,它比結構體更加靈活。今天我就把使用類時碰到的關於構造函數的知識整理起來,因爲構造函數實在是太多變了,我覺得很有必要寫出來,希望可以幫助到你們。
類爲什麼不能進行初始化?
因爲類就像結構體一樣只是進行了聲明,並沒有實際的開闢空間,所以無法對數據成員進行初始化,這時候要想初始化只能藉助構造函數
什麼是構造函數?
1.構造函數是一種特殊的成員函數,與其他的成員函數不同,不需要用戶調用它,而是在建立對象時自動執行。
2.構造函數的名字必須和類名同名,而不能任意命名,以便編譯系統可以識別。
3.構造函數不具有任何類型,不返回任何值
4.構造函數其實不光可以執行初始化,還可以進行其他操作,但是爲了讓程序保持清晰的思路,一般不建議這麼做。
5.千萬不要自己去調用構造函數,這是極其錯誤的行爲
要想使用好構造函數,這上面的幾點一定要牢記,接下來我就分析一下構造函數具有哪些形式。
ps:由於我之前的筆風都是偏嚴肅,但是實際上我的性格比較活潑,所以不喜歡太生硬的陳述,這次我決定小小改變一下,讓文章可以看着活潑一點,不那麼死板

對象的初始化
在C++裏面,聲明一個類時,並不能直接進行初始化,這時候,你要還是想初始化該怎麼辦呢?這就要用到構造函數了。
構造函數進行對象的初始化可謂是得心應手,但是構造函數的形式實在是太多了,所以我決定分幾種類型進行說明
1.在構造函數內部直接進行初始化
雖然C++的語法就是不允許類直接進行初始化,但是它又增加了一個構造函數來間接初始化,關鍵是這個構造函數是相當的好用啊。我剛上手幾天就感覺到了,哈哈哈,初學者的福音。廢話不多說,先將代碼放在下面,稍後解釋
無參構造函數,最簡單的一種

  class Student
{
public:
    Student(); //不做任何操作,默認初始值爲0
private:
    int score[3];
    char name[20];
}  

上面這種事最簡單的,你可以把它這樣認爲,構造函數是會自動生成的,但是這一步你並不能看到,而你顯式地把它寫出來,是爲了方便理解,因爲C++編譯器會做很多我們看不到的內部操作,這樣做事爲了新手更好的理解。

 class Box
{
public:
     //聲明一個無參的構造函數
    Box(int h=10,int w=20,int len=10);
    //Box(int h,int w,int len):height(h),width(w),length(len){}
      //定義一個有參的構造函數,用參數的初始化表對數據成員初始化

上面應該很好理解吧,畢竟我也是個初學者,但是還是很容易看懂呢。
抓住一個點,自動調用,所以這種類型的構造函數就是在定義一個類之後,將類裏面的對象直接賦初值
再來接着看下面這種

   Box::Box(int h,int w,int len)//類外定義無參構造函數Box
{
    height=h;
    width=w;
    length=len;
} 

這是在類外定義的無參構造函數,這點和在類外定義成員函數是類似的,都需要在類體中先進行聲明。類外定義的無參構造函數,它的運作機制大概是下面這樣的
1.在定義對象時,就已經將實參給出
2.在建立對象時,編譯器要做的就是把實參的值傳遞給構造函數相應的形參然後把他們直接作爲數據成員的初值
記住,這裏的初始化相當於是主函數中完成的,只是將實參傳了過去。

構造函數的參數列表
如上所述,構造函數可以通過實參傳遞給構造函數的形參,從而完成初始化,其實,他還可以將初始化變成多種形式

Box box1;
    cout<<"The volume of box1 is"<<box1.volume()<<endl;
    Box box2(15);
    cout<<"The volume of box2 is"<<box2.volume()<<endl;
    Box box3(15,25);
    cout<<"The volume of box2 is"<<box2.volume()<<endl;
    Box box4(15,25,30);
    cout<<"The volume of box2 is"<<box2.volume()<<endl;

上面的代碼,就是利用了構造函數參數列表進行的初始化。box1傳遞了一個實參,因此,其餘的兩個參數都需要直接依靠構造函數給出的形參進行初始化,而其餘的也分別給出了兩個和三個。
但是你要知道的是,傳遞給構造函數的參數必須類型是準確的,否則它會因爲無法識別類型而報錯。
總結:構造函數的形式真的可以說是千變萬化的,但是我們只要熟悉了這幾種常見的類型,那就可以觸類旁通,掌握這個知識點。
注:如果有什麼問題,歡迎給我留言或者私信啊,我很熱心的,希望可以在這裏交到很好的朋友,感謝啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章