32 建構函式和析構函式

2021-09-26 01:49:58 字數 2139 閱讀 1069

建構函式主要作用在於建立物件時為物件的成員屬性賦值,建構函式由編譯器自動呼叫,無須手動呼叫。

析構函式主要用於物件銷毀前系統自動呼叫,執行一些清理工作。

建構函式語法:

建構函式函式名和類名相同,沒有返回值,不能有void,但可以有引數。

classname(){}

析構函式語法:

析構函式函式名是在類名前面加」~」組成,沒有返回值,不能有void,不能有引數,不能過載。

~classname(){}

無參構造寫法和呼叫:

person p1 ; 注意不能寫 person p1() ,因為編譯器認為這個是函式宣告
有參構造寫法和呼叫:

person p2(10)  或者 person p2 = person(10)

person(10) 匿名物件 ,執行當前行後就會釋放這個物件

拷貝建構函式

person( const person & p )

perons p1( p2) 或者 person p1 = person(p2)

不能用拷貝建構函式初始化匿名物件

如果寫成 person (p1) 這種寫法等價於 person p1

寫到右值可以做拷貝建構函式

main.cpp

#define _crt_secure_no_warnings

#includeusing namespace std;

class person

person(int a)

//析構函式寫法

// 與類名相同 類名前面加乙個符號 「~」 ,也沒有返回值 ,不寫void, 不可以有引數(不能發生過載)

//自動呼叫,只會呼叫一次

~person() };

void test01()

int main()

main.cpp

// 34建構函式和析構函式.cpp : 定義控制台應用程式的入口點。

//#define _crt_secure_no_warnings

#includeusing namespace std;

//分類

//按照引數進行分類 無參建構函式(預設建構函式) 有參建構函式

//按照型別進行分類 普通建構函式 拷貝建構函式

class person

person(int a)

//拷貝建構函式

person(const person& p)

~person()

int m_age;

};void test01()

int main()

拷貝構造函式呼叫規則:

如果提供了有參的構造,那麼系統就不會提供預設的構造了,但是會提供拷貝構造

如果提供了拷貝建構函式,那麼系統就不會提供其他的建構函式了

#define _crt_secure_no_warnings

#includeusing namespace std;

class myclass

myclass(int a)

//myclass(const myclass& m)

// int m_a;

};//系統預設給乙個類提供 3個函式 預設構造 、 拷貝構造 、 析構函式

//1 當我們提供了有參建構函式,那麼系統就不會在給我們提供預設建構函式了

//但是 系統還會提供預設拷貝建構函式 , 進行簡單的值拷貝

void test01()

//2 當我們提供了 拷貝構造,那麼系統就不會提供其他構造了

class myclass2

//myclass2(int a)

// myclass2(const myclass& m)

int m_a;

};void test02()

int main()

建構函式和析構函式

建構函式沒有返回值,不能被顯示的呼叫。它是在定義物件時由系統自動執行的,而且只執行一次。如果沒有定義建構函式,系統會自動生成乙個建構函式,只是這個建構函式的函式體是空,沒有引數,也不執行任何初始化的操作。帶引數的建構函式 有一種簡練,方便的寫法 建構函式的引數初始化表 box int h,int w...

析構函式和建構函式

每個物件生成的時候都要完成物件的初始化,如設定屬性的初始值。c 中規定每個類都有乙個初始值,如果沒有,系統會產生乙個預設的建構函式。這個建構函式沒有任何引數,不做任何額外的工作。但往往我們會自己寫乙個建構函式,用來進行特殊的初始化工作。這樣的話,編譯器就不會再為其生成預設的建構函式。class 類名...

建構函式和析構函式

stock hot 因為資料部分的訪問狀態是私有的,程式不能訪問資料成員。建立stock的建構函式,由於需要為stock提供3個值,因此應為建構函式提供3個引數值,程式設計師可能指向設定company成員,而其他的設定為0 使用預設引數完成 宣告如下 stock const char co,int ...