1 虚函数
https://blog.csdn.net/weixin_45138932/article/details/125667041
定义:
- 实现动态联编,在函数运行阶段动态的选择合适的成员函数。
- 在定义了虚函数后,可实现在派生类中对虚函数进行重写,从而实现统一的接口和不同的执行过程。
难点:
- 如果要不通过继承关系也实现出运行时多态的效果,则需要将两个不同类的同名函数都加上virtual关键字;同时,需要将定义的指针指向其他对象时,要进行强制类型转换。(因为两个类已经没有继承关系了,不能通过赋值兼容规则进行自动转换,所以要强制转化。)
- 带有多态性质的基类均应该声明一个virtual析构函数。同时如果任一class带有任何virtual函数,它就应该拥有一个virtual析构函数。
例:
class A{
public:
A(){};
~A(){};
virtual void show(void){
cout<<"I am A!"<<endl;
}
- 当class的设计目的如果不是作为base class使用,或不是为了具备多态性,则就不该声明virtual析构函数。(因为如果class中含有virutal函数会使得该class的体积增加,因为添加一个vptr(virtual table pointer)会增加其class大小达50%-100%)
- 程序运行时先看父类再看子类
- 虚函数要多态的时候不内联,不多态的时候(也就是非指针、引用,也就是传值)可以内联。