c++的继承与虚继承

继承与虚继承

在c++中继承是一重要特征,是面向对象复用的重要手段,通过继承建立一个类,共享公有的东西,再实现各自不同的属性。继承是类之间的关系模型。

1、实现一个简单的继承关系:


2、成员访问限定符&继承关系:

     三种成员访问限定符:(1)public 共有,(2)protected  保护,(3)private 私有

     三种继承关系:(1)public 共有继承,(2)protected  保护继承,(3)private 私有继承

3、三种继承关系基类成员在派生类中的访问关系变化:


4、赋值兼容规则(public继承)

     (1)子类对象可以赋值给父类对象(切片原则)。

     (2)父类对象不可以赋值给子类对象。

     (3)父类的指针或引用可以指向子类对象。

     (4)子类的指针或引用不可以指向父类对象(可以通过强制类型转换完成,但有可能访问非法空间)。

5、派生类默认合成的六个成员函数:

如果派生类没有显示定义一下成员函数,编译系统则会默认合成这六个默认成员函数。

        (1)构造函数,(2)拷贝构造函数,(3)析构函数

(4)赋值操作符重载,(5)取地址操作符重载,(6)const 修饰的取地址操作符重载

6、单继承和多继承:

单继承:一个子类只有一个直接父类的继承关系称为单继承。

多继承:一个子类有两个或两个以上直接父类的继承关系称为多继承。


7、菱形继承:


菱形继承示例源代码:

class Person
{
  public :
    string _name ; // 姓名
};
class Student : public Person
{
  protected :
    int _num ; //学号
};
class Teacher : public Person
{
  protected :
    int _id ; // 职⼯编号
};
class Assistant : public Student, public Teacher
{
   protected :
     string _majorCourse ; // 主修课程
};
void Test ()
{
  // 显⽰指定访问哪个⽗类的成员
  Assistant a ;
  a.Student ::_name = "xxx";
  a.Teacher ::_name = "yyy";
}
菱形继承对象模型:


菱形继承的对象模型中存了两份Person。

菱形继承存在的问题:二义性和数据冗余。

解决方法:

(1)、显示指定访问哪个父类的成员。

(2)、虚继承。

8、虚继承

虚继承的作用:解决菱形继承的二义性问题。

菱形虚继承的对象模型:


图中的虚继承在VS编译器的环境下使用的是偏移量,在上图中直接使用指针指向虚基类是为了更直观的理解。

虚继承如何使用:只需在菱形继承中继承基类的子类继承方式前加virtual。

图解:




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值