1. 程式人生 > >C++深度解析 物件的構造(中)物件定義和宣告,建構函式的過載(17)

C++深度解析 物件的構造(中)物件定義和宣告,建構函式的過載(17)

C++深度解析 物件的構造(中)物件定義和宣告,建構函式的過載(17)

 

 

 

物件的構造由建構函式完成

函式名與類名相同,並且不能有任何返回值。

 

 

 

帶有引數的建構函式

意義:可以使得每個物件有不同的初始化狀態。

一個類中可以存在多個過載的建構函式

建構函式的過載遵循C++過載的規則。

 

 

 

物件定義和物件宣告不同

物件定義申請物件的空間呼叫建構函式

物件宣告:告訴編譯器存在這樣一個物件

Test t; //定義物件並呼叫建構函式

int main()
{
	//告訴編譯器存在名為t的Test物件
	extern Test t;
	
	return 0;
}

分析:通過連結時找到物件定義的地方。編譯過程:預處理,編譯器出廠(對原始碼進行語法檢查,生成目標檔案),連結器出廠。

 

 

 

定義物件時,建構函式的自動呼叫。建構函式可以過載

例項程式:(帶引數的建構函式)

#include <stdio.h>

class Test
{
public:
    Test() 
    {
        printf("Test() \n");
    }
    Test(int v) 
    {
        printf("Test(int v), v = %d\n", v);
    }
};

int main()
{
    Test t;      //呼叫 Test()
    Test t1(1);  //呼叫 Test(int v)
    Test t2 = 2; //呼叫 Test(int v),使用2初始化t2
    
    //int i;//初始化,i的初始值是隨機的
    //i = 1;//賦值,不是初始化
    
    //初始化和賦值不同,初始化是會呼叫建構函式,賦值則不會
    //t = t2;//賦值操作
    
    //初始化和賦值是不同的
    int i(100);
    
    printf("i = %d\n", i);
    
    return 0;
}

結果如下:

分析:Test t2 2;用2初始化t2。