c++【复习篇】: 继承

继承基础概念:

人有名字和年龄,同时也能吃饭,工人也有,工人还能工作。

其中Worker是派生类,CommonPerson是基类。

继承方式:

  • 公有继承:class A:public B
  • 保护继承:class A:protected B
  • 私有继承:class A:private B

        公有继承:

基类成员访问属性 继承方式 派生类成员访问属性
private成员 public  无法访问
protected成员 public  protected
public成员 public  public

      保护继承:

基类成员访问属性 继承方式 派生类成员访问属性
private成员 protected 无法访问
protected成员 protected protected
public成员 protected protected

     私有继承:

基类成员访问属性 继承方式 派生类成员访问属性
private成员 private 无法访问
protected成员 private private
public成员 private private

B类从A类派生,那么B类是A类的子类,A类是B类的超类。

B类从A类派生,那么B类中包含有A类的所有数据成员。

B类从A类的公共诞生,只能调用到A的公共及保护限定符下的成员函数。

B类从A类的公共诞生,可以在B类中直接使用A的公共及保护限定符下的数据成员。

B类从A类公共派生,那么A类的私有成员函数不能被B类继承使用。

B类从A类公共诞生,那么A类的公共成员函数成为B类的公共成员函数。

B类从A类公共诞生,那么A类的保护成员函数成为B类的保护成员函数。

B类从A类公共诞生,那么A类的私有成员函数不能被B类继承并使用。

B类从A类私有派生,那么A类的公共成员函数成为B类的私有成员函数。

B类从A类保护派生,那么A类的公共成员函数成为B类的保护成员函数。

B类从A类保护派生,那么A类的保护成员函数成为B类的保护成员函数。

隐藏:【覆盖和隐藏易混淆】

此时子类的ABC函数隐藏A类的ABC函数。当实例化B对象,使用该对象只能够直接的访问到子类B当中的成员函数ABC而无法访问到A类中的成员函数ABC,因此父类的ABC似乎就被隐藏起来了。【同名的数据成员也有隐藏特性】

需要满足的前提:父子关系、成员同名、隐藏

多继承、多重继承:

多重继承:

多继承:(java是单继承)

多继承是指一个子类继承多个父类。

B继承A、C继承A,并不是多继承。即当一个父类有多个子类时,此时不是多继承。

多继承对父类的个数没有限制,继承方式可以是公有继承、保护继承、私有继承。

多重继承和多继承不同, 当B类从A类派生,C类从B类派生,此时可以成为多继承。

题外话:

Flutter中常常会遇到这种多继承结构,需要顶层下发数据而绕过不必要的层级,因为中间层有些是不需要传递数据的,因此有了状态管理的概念。

虚继承:

在菱形继承中,

既有多继承又有多重继承,当我们要实例化D的时候发现D中会含有2个完全一样的A的数据。

冗余数据不能容忍。

虚继承是继承的一种方式。

关键字virtual

class B: virtual public A

class C: virtual public A

clas C: public B, public C        

发布了288 篇原创文章 · 获赞 40 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/qq_39969226/article/details/104085078