類 建構函式和析構函式

2021-09-08 20:51:30 字數 2050 閱讀 3465

一.類

類定義的變數就是物件

1.建構函式

(只有)建立物件的時候系統自動呼叫的函式(初始化物件)

(1)建構函式名與類名相同

(2)建構函式沒有返回值

(3)建構函式可以過載

注意:關於建構函式

(1)如果建構函式被呼叫了,則一定有乙個新物件被建立了

(2)如果有乙個新物件被建立,則一定有乙個建構函式被呼叫了

如果類中乙個建構函式都沒有(注意是乙個都沒有),系統會自動新增乙個無參建構函式,給函式什麼都不做。

對建構函式的賦值方式:

(1)使用括號進行賦值

test t1(10,20);
(2)等號法賦值

test t2 = test(3,4);
或者:

test t4 = 10;  // 等價於  test t4 = test(10);
該方式只能呼叫單個引數的建構函式

2.析構函式

類被釋放的時候,系統會呼叫物件的析構函式

(1)析構函式函式名: ~ 類名

(2)析構函式沒有返回值

(3)析構函式沒有引數(不能過載==>析構函式只能有乙個)

如果類中沒有析構函式,系統會自動新增乙個析構函式。

建構函式和析構函式的呼叫順序:先構造的物件後析構

3.拷貝構造

(1)書寫形式

型別 (const 類名 &變數名 )

test(const test &obj)// 拷貝建構函式  賦值建構函式
(2)呼叫方式

①函式引數是物件的時候,實參到形參的傳遞會呼叫拷貝構造 ==>建議使用引用

②物件作為返回值的時候,也會呼叫拷貝建構函式 ==>不同編譯器對函式的返回值處理方式可能不同

注意

淺拷貝:當類中沒有拷貝構造的時候,系統會自動新增乙個拷貝建構函式,進行「值」 的複製

深拷貝:複製的時候連同堆上的空間一起複製 ===>自己寫

當成員變數存在指標的時候,要進行深拷貝

4.物件初始化列表

在建構函式後面加 : 初始化成員 各個成員之間用逗號隔開

這種方式可以對 const常量進行賦值

test(int a, int b) :m_a(a) ,m_b(b)
(1)物件初始化列表的執行要優先於 建構函式

(2)物件初始化順序與物件在初始化列表中所在的位置無關,和在類中的變數順序有關

5.new 和 delete

new :建立會自動呼叫建構函式

delete :釋放物件的時候會自動呼叫析構函式

6.類中的static 用法

(1)類中的靜態成員變數,該屬性不屬於不屬於某個成員,是類的屬性,是所有成員所共有的

(2)靜態變數必須要在類的外部進行初始化

int test::m_sa = 10;
(3)靜態成員(變數,函式)使用方式:

①通過變數使用

test t;

cout << t.m_sa << endl;

test::m_sa = 20;

cout << t.m_sa << endl;

②通過類名使用

test::show();

(4)靜態成員函式:只能使用靜態的成員變數

類建構函式 析構函式

下面的例項有助於更好地理解建構函式的概念 include using namespace std class line 成員函式定義,包括建構函式 line line void void line setlength double len double line getlength void 程式的...

類建構函式,類析構函式

類建構函式 the class constructor 是乙個特殊的類成員函式,當我們建立這個類的新物件時,會被執行。乙個建構函式將被確定與類名相同的名字,沒有任何返回值,包括void。建構函式對於給某些類成員變數設定初始值非常有用。例子 include using namespace std cl...

類的建構函式和析構函式

1.把物件的初始化工作放在建構函式中,把清除工作放在析構函式中。當物件被建立時,建構函式被自動執行。當物件消亡時,析構函式被自動執行。這下就不用擔心忘了物件的初始化和清除工作。2.建構函式 析構函式與類同名,由於析構函式的目的與建構函式的相反,就加字首 以示區別。3.建構函式與析構函式都沒有返回值型...