c++拷貝構(gòu)造函數(shù) c 什么時(shí)候必須定義構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)?
c 什么時(shí)候必須定義構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)?當(dāng)一個(gè)類含有一些數(shù)據(jù)成員,你需要在實(shí)例化類的時(shí)候就初始化這些成員,你就需要自己定義構(gòu)造函數(shù)。例如Person類含有m_strName成員,你在聲
c 什么時(shí)候必須定義構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)?
當(dāng)一個(gè)類含有一些數(shù)據(jù)成員,你需要在實(shí)例化類的時(shí)候就初始化這些成員,你就需要自己定義構(gòu)造函數(shù)。例如Person類含有m_strName成員,你在聲明該類是就將其賦值 Person myPerson("張三")
對于拷貝構(gòu)造函數(shù),為了防止淺拷貝造成的兩個(gè)對象指向同一內(nèi)存,當(dāng)刪除其中一個(gè)對象后導(dǎo)致另一對象指向內(nèi)容為空的時(shí)候,我們就需要定義自己的拷貝構(gòu)造函數(shù)來進(jìn)行深拷貝。
當(dāng)你的類數(shù)據(jù)成員中使用了動態(tài)分配的內(nèi)存,你就需要定義自己的析構(gòu)函數(shù)來釋放這部分內(nèi)存,防止內(nèi)存泄露。
系統(tǒng)定義的默認(rèn)構(gòu)造函數(shù)和析構(gòu)函數(shù)函數(shù)名和類名相同,如Person類:
Person()構(gòu)造函數(shù)
~Person()析構(gòu)函數(shù)
c ,求三個(gè)長方體的體積,用構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)?
代碼示例:
先定義一個(gè)長方體類T,定義三個(gè)對象求體積。
#include<iostream>
using namespace std
class T //定義一個(gè)體積類
{
private:
int L //長
int W //寬
int H //高
public:
void set()
void volume()
}
void T::set()
{
cout<<"長:"
cin>>L
cout<<"寬:"
cin>>W
cout<<"高:"
cin>>H
}
void T::volume()
{
cout<<"體積:"<<(L*W*H)<<endl
}
int main()
{
T t1,t2,t3
t1.set()
t1.volume()
t2.set()
t2.volume()
t3.set()
t3.volume()
}
何時(shí)調(diào)用構(gòu)造函數(shù),復(fù)制構(gòu)造函數(shù),析構(gòu)函數(shù)?
構(gòu)造函數(shù) 在對象生成時(shí)調(diào)用.可能是在定義的時(shí)候, 或者new分配的時(shí)候. 調(diào)用哪個(gè)構(gòu)造函數(shù) 由構(gòu)造參數(shù)決定. 如果構(gòu)造參數(shù)是另一個(gè)同類對象,那就是復(fù)制構(gòu)造函數(shù). 如果無參 那就是無參構(gòu)造或者默認(rèn)構(gòu)造. 而析構(gòu)函數(shù)是在對象生命周期結(jié)束, 即釋放時(shí)調(diào)用. new出來的對象會在delete時(shí)調(diào)用 局部變量 在退出作用域時(shí)調(diào)用. 全局變量和靜態(tài)局部變量在程序退出時(shí)調(diào)用.