适合具备 C 语言基础的 C 教程(六)
扫描二维码
随时随地手机看文章
前言
在上一则教程中,着重讲述了派生类继承于父类之后的一些访问控制,在本次教程中,将介绍如下几个点:派生类扩展父类功能,派生类的空间分布,以及多重继承的相关概念。
派生类扩展父类的功能
在前文所述的 Father
类我们通常也称之为父类或者说称之为基类,而 Son
类我们则称之为子类或者是派生类,我们知道通过public
继承的方式Son
类可以继承到父类的 it_skill
,那么我们可不可以将这个继承得到的 it_skill
发扬光大呢?实际上是可以的,用更加专业的话来讲就是覆写,也就是 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
是相同的一个函数,只是在 Son
类里对这个函数进行了覆写,这个时候,如果向如下方式调用 it_skill
,那么就会调用的是 Son
类里面定义的 it_skill
。
int main(int argc, char **argv)
{
Son s;
s.it_skill();
return 0;
}
派生类的空间分布(内存分布)
在讲述派生类的空间分布的时候,我们采用 Person
类和 Student
类进行阐述,首先 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
类的一个例子,因为 Student
类中也存在其自身的私有数据成员,所以,总的来说,Person
类和Student
类之间的关系如下所示:
image-20210210215953484通过上述的示意图可以清楚地知晓Student
类和 Person
类之间的关系,那么假设现在有如下所示的一句代码:
Student s;
Person