C++ 核心 4.6 继承
  TEZNKK3IfmPf 2023年11月15日 18 0

4.6 继承

4.6.1 继承的基本语法

class 子类: 继承方式 父类e:

class JavaPage : public BasePage
{
   ... 
}

4.6.2 继承方式

继承方式有三种:public, protected, private

父类私有成员三种继承方式的子类都无法访问。

public继承的子类,不改变访问权限。 protected继承,都改变为protected权限 private基础,都改变为private权限。

4.6.3 继承中的对象模型

从父类继承过来的成员,哪些属于子类对象?

父类中所有非静态成员属性都会被子类继承。 父类私有成员属性也被继承,但是被隐藏了访问不到。

利用开发人员命令提示工具可以查看类属性: 在文件路径下(cd)cl /d1 reportSingleClassLayout类名 文件名(注意拼写,cl和d1,依次是字母l和数字1)

4.6.4 继承中构造和析构顺序

实例化子类时, 先调用父类的构造函数,再调用子类的构造函数。 析构顺序和构造相反。

Base构造
Son构造
Son析构
Base析构

4.6.5 继承同名成员

子类和父类成员名相同时, 访问子类成员,直接访问。 访问父类成员,需要加作用域(Base::)。 (名称空间)

4.6.6 继承同名静态成员

静态成员出现同名,和非静态成员处理方式一样。

4.6.7 多继承语法

一个类可以继承多个类。 语法:class 子类: 继承方式1 父类1, 继承方式2 父类2...

多继承可能会出现父类中同名成员,需要加作用域区分。

实际开发不建议使用多继承。

4.6.8 菱形继承

两个派生类继承同一个基类。 又有一个类同时继承这两个派生类。 这种继承叫菱形继承或钻石继承。

例如, 动物类。 羊类,驼类 都继承自动物类。 羊驼    继承自羊类和驼类。

这种继承会出现一个问题,二义性和重复。 例如动物类有age属性。 那么羊和驼都有age。 羊驼就会有2个age。 可以通过作用域解决二义性。

利用虚继承解决菱形继承的问题。 关键字virtual

class Animal{
public:
    int age;
}

class Sheep: virtual public Animal{};

class Tuo: virtual public Animal{};

classs SheepTuo: public Sheep, public Tuo{}

虚继承 原理 继承指针,指针指向同一个成员。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   19天前   26   0   0 C++
  TEZNKK3IfmPf   19天前   22   0   0 指针C++
  TEZNKK3IfmPf   2024年05月31日   23   0   0 算法C++
TEZNKK3IfmPf