虚函数
- 用
virtual
关键字说明的函数 - 虚函数是实现运行时多态性基础
- C++中的虚函数是动态绑定的函数
- 虚函数必须是非静态的成员函数,虚函数经过派生之后,就可以实现运行过程中的多态
什么函数可以是虚函数
- 一般成员函数可以是虚函数
- 构造函数不能是虚函数
- 析构函数可以是虚函数
一般虚函数成员
虚函数的声明
virtual 函数类型 函数名(形参表);
虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候
在派生类中可以对基类中的成员函数进行覆盖
虚函数一般不声明为内联函数,因为对虚函数的调用需要动态绑定,而对内联函数的处理是静态的
virtual 关键字
- 派生类可以不显式地用
virtual
声明虚函数,这时系统就会用以下规则来判断派生类的一个成员函数是不是虚函数:- 该函数是否与基类的虚函数有相同的名称、参数个数以及对应参数类型
- 该函数是否与基类的虚函数有相同的返回值或者满足类型兼容规则的指针、引用型的返回值
- 如果从名称、参数以及返回值三个方面检查后,派生类的函数满足了上述条件,就会自动确定为虚函数。这时派生类的虚函数就会覆盖基类的虚函数
- 派生类的虚函数还会隐藏基类中同名函数的所有其他重载形式
- 一般习惯在派生类的函数中也使用
virtual
关键字,以增加程序的可读性
虚析构函数
如果你打算允许其他人通过基类指针调用对象的析构函数(通过delete这样做是正常的),就需要让基类的析构函数成为虚函数,否则执行delete的结果是不确定的