建構函式主要作用在於建立物件時為物件的成員屬性賦值,建構函式由編譯器自動呼叫,無須手動呼叫。
析構函式主要用於物件銷毀前系統自動呼叫,執行一些清理工作。
建構函式語法:
建構函式函式名和類名相同,沒有返回值,不能有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 ...