[C++] 構造函數的用法


因為C++的三大特性之一是數據隱藏,成員變量都是私有的,所以類不能像結構那樣直接初始化,而需要構造函數,將需要初始化的數據在對象中實現初始化。構造函數與其他函數不同,沒有返回值,也不能被對象調用(只是用於對象的初始化)。實質是類的隱式初始化,在對象初始化的時候,自動被調用。

構造函數可以分為一般的構造函數(分有參和無參)和用於對象復制的復制構造函數(又稱拷貝構造函數)。

使用new來創建對象的時候,對象實際上沒有名稱,得到一個指向對象地址的指針,可以通過該指針管理對象。

#include <iostream>  
using namespace std; class Test { public: Test() //無參構造函數,也叫默認構造函數,如果形參列表不為空且每個形參都有默認值,則也稱為默認構造函數 
 {   cout<<"struct1 of Test!"<<endl; } Test(const Test &another)  //拷貝構造函數 
 { m_a=another.m_a; cout<<"struct2 of Test!"<<endl; } Test(int a) :m_a(a)       //有參構造函數,非默認構造函數,如果參數列表中所有的形參都有默認值,則是默認構造函數 
 { m_a = a; cout<<"struct3 of Test!"<<endl; } void print() { cout << " m_a = " << m_a << endl; } private: int m_a; }; 

void main()  
{  
    Test t1(10);         //括號法  //c++編譯器自動調用這個類的有參構造函數  
    t1.print();  
    Test t2 = 20;        //等號法  //c++編譯器自動調用這個類的有參構造函數  
    t2.print();  
    Test t3=Test(30);    //手工法 //程序員手工的調用構造函數 進行對象初始化
    t3.print();
}  

 當且僅當沒有任何構造函數時,編譯器才會提供默認構造函數,一旦用戶定義了非默認構造函數而不提供默認的構造函數,試圖使用默認構造形式初始化對象時,會導致錯誤(編譯器不再提供默認構造函數)。

C++11中的列表初始化

C++11標准支持的列表初始化,需要提供與某個構造函數的參數列表匹配的內容,並將其括起來即可。

 

Test test = {"test construct", 0, 0.0}; //匹配Test::Test(const tring &str, int a, double b)
Test test = {"test const"}; //匹配Test::Test(const string &str, int a, double b)
Tets test = {};    //匹配Test::test()

const成員函數

類方法結尾加上const修飾符后成為const成員函數,在C++的規則中,當方法不修改調用對象時,最好將其聲明為const型的。試圖用一個const型的對象調用一個非const型的成員函數會被編譯器報告錯誤,因為編譯器不能保證該方法不會改變調用對象。

 

 

this指針

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM