適合具備 C 語言基礎(chǔ)的 C 教程(六)
前言
在上一則教程中,著重講述了派生類繼承于父類之后的一些訪問控制,在本次教程中,將介紹如下幾個(gè)點(diǎn):派生類擴(kuò)展父類功能,派生類的空間分布,以及多重繼承的相關(guān)概念。
派生類擴(kuò)展父類的功能
在前文所述的 Father
類我們通常也稱之為父類或者說稱之為基類,而 Son
類我們則稱之為子類或者是派生類,我們知道通過public
繼承的方式Son
類可以繼承到父類的 it_skill
,那么我們可不可以將這個(gè)繼承得到的 it_skill
發(fā)揚(yáng)光大呢?實(shí)際上是可以的,用更加專業(yè)的話來講就是覆寫,也就是 override
,代碼如下所示:
class Son : public Father
注意上述的
{
private:
int toy;
public:
void paly_game(void)
{
cout << "son play game" << endl;
}
void it_skill(void)
{
cout << "son's it skill" << endl;
}
};it_skill
和Father
類的 it_skill
是相同的一個(gè)函數(shù),只是在 Son
類里對(duì)這個(gè)函數(shù)進(jìn)行了覆寫,這個(gè)時(shí)候,如果向如下方式調(diào)用 it_skill
,那么就會(huì)調(diào)用的是 Son
類里面定義的 it_skill
。
int main(int argc, char **argv)
{
Son s;
s.it_skill();
return 0;
}
派生類的空間分布(內(nèi)存分布)
在講述派生類的空間分布的時(shí)候,我們采用 Person
類和 Student
類進(jìn)行闡述,首先 Person
類具有如下的屬性:
class Person
然后,
{
private:
char *name;
int age;
public:
int address;
void setName(char *name)
{/*省略*/}
void setAge(int age)
{/*省略*/}
Person(char *name, int age)
{/*省略*/}
~Person()
{/*省略*/}
};Student
類以 public
的方式從 Person
類中繼承而來,代碼如下所示:
class Student : public Person
上述就是
{
private:
int grade;
public:
void setGrade(int grade)
{
this->grade = grade;
}
int getGrade(void)
{
return this->grade;
}
/*override*/
void printInfo(void)
{
cout << "Student";
person::printfInfo();
}
};Student
類以 public
方式繼承自 Person
類的一個(gè)例子,因?yàn)?nbsp;Student
類中也存在其自身的私有數(shù)據(jù)成員,所以,總的來說,Person
類和Student
類之間的關(guān)系如下所示:
image-20210210215953484通過上述的示意圖可以清楚地知曉Student
類和 Person
類之間的關(guān)系,那么假設(shè)現(xiàn)在有如下所示的一句代碼:
Student s;
Person