C++继承

一.继承

普通实现
image

继承实现
image
总结
继承好处可以减少重复的代码
语法class A:public B;
A类也称为子类或派生类
B类也称为父类或基类

派生类中的成员,包含两大部分:

  • 一类是从基类继承过来的,一类是自己增加的成员
  • 从基类继承过来的表现其共性,而新增的成员体现其个性

二.继承方式

语法class 子类:继承方式 父类

继承方式

  • 公共继承
  • 保护继承
  • 私有继承

image

三.继承中的对象模型

父类中继承下来的非静态成员属性都属于子类,父类中的私有属性也会继承下去,只是被编译器阴藏了
可以用开发人员命令工具查看

四.继承中构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数
先构造父类,再构造子类,析构顺序相反

五.继承同名成员处理方式

  • 访问子类同名成员 直接访问即可
  • 访问父类成员,需要加作用域
  • 如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏父类中所有同名成员函数
  • 如果想访问父类中隐藏的同名成员函数,需要加父类的作用域
    image

六.继承同名静态成员处理方法

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

  • 访问子类同名成员 直接访问即可
  • 访问父类成员,需要加作用域
    同名对象:
    image
    同名函数;
    image

总结:同名静态成员处理方式和非静态处理方式一样,只不过两种访问的方式(通过对象和类名作用域)

七.多继承语法

C++一个类继承多个类
语法:class 子类:继承方式 父类1 ,继承方式 父类2...
image

多继承可能会引发父类中有同名成员出现,需要加作用域区分
C++实际开发中不建议用多继承

八.菱形继承
概念:两个派生类继承同一个基类
又有某个类同时继承着两个派生类
这种继承为菱形继承,或者钻石继承

问题:

  1. 羊继承了动物的数据,驼同样继承了动物的数据,当草泥马使用数据时,就会产生二义性
  2. 草泥马继承自动物的数据继承了两份,其实我们应该清楚,这份数据我们只需要一份就可以

利用虚继承解决菱形问题
继承之前加上关键字virtual
最大类称虚基类
image

总结

  • 菱形继承带来的问题是子类继承两份相同的数据,导致资源浪费以及毫无意义
  • 利用虚继承可以解决菱形继承问题
posted @   Eric`  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示