一. 虚函数和析构函数的关系
class base {
public :
base() {}
virtual ~base() {
cout << "virtual base cout success" << endl;
}
virtual void dosomething() {
cout << "dosomething base cout success" << endl;
}
};
class son : public base {
public:
son() {}
~son() {
cout << "son cout success" << endl;
}
void dosomething() {
cout << "dosomething son cout success" << endl;
}
};
int main() {
base* son1 = new son();
son1->dosomething();
delete son1;
return 0;
}
如果删除~base前virtual
如果删除void dosomething前virtual
二. 虚函数的内存实现图解
三. override和final的使用
1. override
- 使用override编译器可以在编译时验证派生类中的函数是否真正覆盖了基类中的虚函数
2. final
- 修饰函数
指示类中的虚函数不能被派生类覆盖或继续继承
- 修饰类
基类不能被其他类继承
三. 纯虚函数及抽象类的定义
virtual void fun1()=0
- 纯虚函数:
基类中没有定义,但要求任何派生类有自己的实现方法
存在纯虚函数的类不能够实例化。 - 抽象类
因此存在纯虚函数的类为抽象类