簡(jiǎn)單的派生類的構(gòu)造函數(shù)
#include<iostream>
#include<string>
usingnamespacestd;
classStudent//聲明基類
{
protected:
intnum;
stringname;
charsex;
public:
Student(intn,stringnam,chars)//定義基類(含參)構(gòu)造函數(shù)
{
num=n;
name=nam;
sex=s;
}
};
classStudent1:publicStudent//聲明公用派生類Student1
{
private:
intage;
stringaddr;
public:
Student1(intn,stringnam,chars,inta,stringad):Student(n,nam,s)
//定義派生類構(gòu)造函數(shù)
{
age=a;
addr=ad;
}
voidshow()
{
cout<<"num:"<
cout<<"name:"<
cout<<"sex:"<
cout<<"age:"<
cout<<"address"<
}
~Student1 (){}
};
?派生類構(gòu)造函數(shù)首行的寫法
Student1(intn,stringnam,chars,inta,stringad):Student(n,nam,s)
派生類構(gòu)造函數(shù)一般形式為
派生類構(gòu)造函數(shù)名(總參數(shù)表):基類構(gòu)造函數(shù)名(參數(shù)表)
? ? ? ? {派生類中新增數(shù)據(jù)成員初始化語句}
冒號(hào)“:”前面部分是派生類構(gòu)造函數(shù)的主干,他和以前介紹過的構(gòu)造函數(shù)的形式相同,但它的總參數(shù)表中包括基類構(gòu)造函數(shù)所需的參數(shù)和對(duì)派生類新增的數(shù)據(jù)成員初始化所需的參數(shù)试躏。冒號(hào)“:”后面部分是要調(diào)用的基類構(gòu)造函數(shù)及其參數(shù)。
? ? ? ?從上面列出的派生類Student1構(gòu)造函數(shù)首行中可以看到趴捅,派生類構(gòu)造函數(shù)名(Student1)后面括號(hào)內(nèi)的參數(shù)表中包括參數(shù)的類型和參數(shù)名(如int n) 紊搪,而基類構(gòu)造函數(shù)名后面括號(hào)內(nèi)的參數(shù)表列只有參數(shù)名而不包括參數(shù)類型(如n,num,s)贪嫂,因?yàn)樵谶@里不是定義基類構(gòu)造函數(shù)耐版,而是調(diào)用基類構(gòu)造函數(shù)祠够,因此這些參數(shù)是實(shí)參而不是形參。它們可以是常量粪牲、全局變量和派生類構(gòu)造參數(shù)總參數(shù)表中的參數(shù)古瓤。
? ? ? ?從上面列出的派生類Student1構(gòu)造函數(shù)中可以看到:調(diào)用基類構(gòu)造函數(shù)Student時(shí)給出3個(gè)參數(shù)(n,nam,s),這是和定義基類構(gòu)造函數(shù)時(shí)指定的參數(shù)相匹配的。派生類構(gòu)造函數(shù)Student1有5個(gè)參數(shù)腺阳,其中前3個(gè)是用來傳遞給基類構(gòu)造函數(shù)落君,后面兩個(gè)(a和ad)是用來對(duì)派生類所增加的數(shù)據(jù)成員初始化的。
2.派生類的析構(gòu)函數(shù)
析構(gòu)函數(shù)的作用是在對(duì)象撤銷之前亭引,進(jìn)行必要的清理工作绎速。
在派生時(shí),派生類是不能繼承基類的析構(gòu)函數(shù)的痛侍,也需要通過派生類的析構(gòu)函數(shù)去調(diào)用基類的析構(gòu)函數(shù)。在派生類中可以根據(jù)需要定義自己的析構(gòu)函數(shù)魔市,用來地派生類中所增加的成員進(jìn)行清理工作主届。基類的清理工作任然由基類的析構(gòu)函數(shù)負(fù)責(zé)待德。
調(diào)用的順序與構(gòu)造函數(shù)正好相反:先執(zhí)行派生類自己的析構(gòu)函數(shù)君丁,對(duì)派生類新增加的成員進(jìn)行清理,然后調(diào)用子對(duì)象的析構(gòu)函數(shù)将宪,對(duì)子對(duì)象進(jìn)行清理绘闷,最后調(diào)用基類的析構(gòu)函數(shù)橡庞,對(duì)基類進(jìn)行清理。