C++(Ⅳ_继承)

继承方式
  • 公有继承
class A : public B
  1. 父类当中被public关键字修饰的成员变量或者方法都可以被继承在子类的public关键字下;
  2. 父类中被protected关键字修饰的成员变量或者方法,都可以被继承在子类的protected关键字下;
  3. 父类中被private关键字修饰的成员变量或者方法,被继承在子类不可见区域,而不是子类的private关键字下。意味着父类的私有成员函数不能被子类继承并使用。
    在这里插入图片描述
  • 保护继承
class A:protected B

在这里插入图片描述

  • 私有继承
class A: private B

在这里插入图片描述

继承中的特殊关系
隐藏

父子关系、成员同名、隐藏
参数不同无法形成重载,只能进行隐藏:这就意味着在子类对象调用一个方法时,只会调用到子类的该方法,而不能调用到父类的同名的方法。

int main(void)
{
  Soldier soldier;
  soldier.play(); //调用的子类的play()方法
  soldier.Person::play(); //调用的父类Person类的play()方法
  return 0;
}
is-A

继承是is-A的关系,组合是has-A的关系,例如隐形眼镜是一个眼镜,沙发的组成中包含沙发垫。

  • 虚析构函数
    当存在继承关系时,使用父类的指针去指向堆中的子类的对象,并且想使用父类的指针去释放内存,这个时候需要虚析构函数。
//了解一个关键字virtual
virtual ~Person();
//这个关键字会被继承下去的
C++多继承和多重继承
多重继承

举个简单例子就是人类-士兵-步兵

class Person{};
class Soldier:public Person{};
class Infantryman:public Soldier{};
多继承

有一个类不仅继承了这个类的同时,也继承了另一个类,就是一个类同时继承了多个类。一个子类同时有两个或者以上的父类。

class Worker{};
class Farmer{};
class MigrantWorker:public Worker, public Farmer{};
虚继承
  • 多继承&多重继承带来的问题:
    在这里插入图片描述实例化D对象的时候,D中将会拥有两份完全一样的A的数据。菱形继承关系用什么可以解决数据冗余的问题呢,就会用到虚继承。
  • 关键字:virtual来完成虚继承
class Worker:virtual public Person{};
class Farmer:virtual public Person{};
//使用时,MigrantWorker类如下
class MigrantWorker:public Worker,public Farmer{};
重定义问题

通过宏定义来解决重定义问题;
在菱形定义问题中,这个问题是一定会出现的。

#ifndef PERSON_H
#define PERSON_H
...//代码
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值