簡(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ù)成員初始化語(yǔ)句}
冒號(hào)“:”前面部分是派生類構(gòu)造函數(shù)的主干,他和以前介紹過(guò)的構(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è)是用來(lái)傳遞給基類構(gòu)造函數(shù),后面兩個(gè)(a和ad)是用來(lái)對(duì)派生類所增加的數(shù)據(jù)成員初始化的。
2.派生類的析構(gòu)函數(shù)
析構(gòu)函數(shù)的作用是在對(duì)象撤銷之前,進(jìn)行必要的清理工作。
在派生時(shí),派生類是不能繼承基類的析構(gòu)函數(shù)的,也需要通過(guò)派生類的析構(gòu)函數(shù)去調(diào)用基類的析構(gòu)函數(shù)。在派生類中可以根據(jù)需要定義自己的析構(gòu)函數(shù),用來(lái)地派生類中所增加的成員進(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)行清理。