【c++基础】笔记(七)

来源:互联网 发布:apache bench 编辑:程序博客网 时间:2024/05/30 05:12

1 静态联编和动态的联编

1.1 分类  静态多态  动态多态

1.2 静态多态

1.2.1 运算符重载  函数重载

1.2.2 地址早绑定,编译阶段绑定的

1.3 动态多态

1.3.1 继承  虚函数

1.3.2 地址晚绑定  ,运行时候再去绑定地址

1.4 virtual void fun()  虚函数

2 多态的工作原理

2.1 当父类中有了虚函数中,内部维护一个虚函数表指针,指向自己的虚函数表

2.2 当子类中发生了重写,将自己的虚函数覆盖到虚函数表中

2.3 在运行阶段,发生多态情况下,就会晚绑定地址,找自己的函数地址

3 深入剖析内部的工作原理

3.1 __cdecl //C++默认调用方式

3.2 我们用的调用方式 __stdcall

3.3 typedef void(__stdcall *FUNCCAT)(int);

多态练习 计算器案例

4.1 利用原来的写法非常不利于维护和扩展

4.2 但是利用多态来写计算器,可以对扩展提供非常大的好处,利用维护,利用扩展,可读性比较强

4.3 多态就是父类的指针或者引用 指向子类的对象

4.4 开闭原则 – 对扩展进行开放,对修改进行关闭

5 纯虚函数和抽象类

5.1 virtual void func() = 0  纯虚函数的写法

5.2  也称为抽象类

5.3 抽象类 是不能实例化对象的

5.4 抽象类中的纯虚函数  子类在继承的时候必须要重写

6 虚析构和纯虚析构

6.1 虚析构纯虚析构 解决的问题

6.1.1 发送多态时候,让父类调用子类中的析构函数

6.2 区别

6.2.1 如果是写了纯虚析构 ,这个类就变为 抽象类,不可以实例化对象了

6.2.2 而虚析构依然是可以实例化对象的

重写 、重定义、重载

7.1 重载 指的是函数重载

7.1.1 同一个作用域   参数个数、类型、顺序不同

7.2 重定义

7.2.1 有继承关系 非虚函数,子类和父类有了同名的成员,子类会隐藏父类成员,重定义

7.3 重写

7.3.1 有继承关系,父类中的virtual函数,在子类中可以进行重写

7.3.2 重写 返回值函数名 参数个数、类型顺序都一致

8 向上和向下类型转换

8.1 基类转派生类

8.1.1 不安全

8.1.2 向下类型转换

8.2 派生类 基类

8.2.1 安全

8.2.2 向上类型转换

8.3 当发生了多态,类型转换 永远都是安全的