序言:
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
编译/重新编译—》输出窗口把信息拷贝至文本工具里面进行分析!
- 单继承
- 多继承
- 菱形继承
- 菱形虚继承
8.3-多态:
如果说继承是抽取公共部分,解决代码冗余的问题,那么多态就是解决差异化的问题,具体的对象通过同一个接口就可以实现各自形态的体现,你是什么就是什么,本质是通过虚函数表来实现!