返回本首页
返回目录页
返回知识库

序言:

在面向对象编程中,存在三大特征分别是:封装,继承,多态!

8.1-封装:

在面向对象中,所谓的封装其实就是将属性和行为以及具体的实现细节封装到内部聚合在一起形成一个类,对外通过具体的对象以及对外暴露的接口以及访问控制权限来使用内部的数据和方法!

8.2-继承:

当我们的多个类中包含共有部分的时候或者我们需要拥有一些类的东西的时候,我们不需要每个类中都去写一份我们想要拥有的东西,我们只需要按照一种语法规则就可以拥有这些东西,这就是继承,继承解决的问题就是代码冗余的问题!

语法规则

  • 单继承

class Child1 : public Parent1

  • 多继承

class Child1 : public Parent1,public Parent2

  • 虚继承

class Parent1 : virtual public Parent

继承权限

继承时,不同的访问控制修饰符将决定父类的成员访问控制权限的变化!

成员权限/继承权限 public【保持不变】 private【全部私有】 protected【仅变公有】
public public private protected
private private private private
protected protected private protected

内存结构

技巧:通过配置vs命令行,来输出类的继承关系以及内存结构!
工程右键—》属性—》C/C++—》命令行:/d1 reportAllClassLayout
编译/重新编译—》输出窗口把信息拷贝至文本工具里面进行分析!

  • 单继承

image.png

  • 多继承

image.png

  • 菱形继承

image.png

  • 菱形虚继承

image.png

8.3-多态:

如果说继承是抽取公共部分,解决代码冗余的问题,那么多态就是解决差异化的问题,具体的对象通过同一个接口就可以实现各自形态的体现,你是什么就是什么,本质是通过虚函数表来实现

实现多态:

  • 父类声明虚函数
  • 子类重写虚函数
  • 父类指针指向子类对象
  • 父类调用函数-》子类重写函数

    多态机理:

    静态多态

    函数重载,在编译时期就进行绑定确定!

    动态多态

    多继承重写:
    image.png
    虚继承重写:
    image.png