虚函数
//C++的多态性通过虚函数来体现,体现为类与类直接的继承关系--》子类完成对基类的重写。
//定义基类(具有一定包容性)部分成员函数写为虚函数。
//定义子类、集成基类、并且重写 虚函数。(对比基类的包容性、子类有具体性)
//一个demo
class BaseA
{
private:
/* data */
public:
BaseA(/* args */){}
~ BaseA(){}
//虚函数标准virtual
//只能是成员函数定义为虚函数、构造不可以、析构可以,而且析构一般默认声明为虚函数,后文会解释
virtual void foo(){
printf("Base A foo")
}
};
class B:public BaseA
{
private:
/* data */
public:
void foo(){
printf("B foo");
}
};
总结
1、虚函数实现、如果子类不提供foo的实现,将缺省调用A类foo的实现。
2、虚函数基类需要提供基本实现。
3、子类重新实现的过程定为重写(override)--引申重载是同名函数不同参数的实现。
纯虚函数
引入纯虚函数--》 改变基类 virtual void foo() = 0; 子类实现方式不变化。
1、纯虚函数 = 0 基类不提供实现。子类需要提供实现,无缺省。
目的: 代码模块化、便于扩展和集成、耦合度较低
析构虚函数
声明基类的时候的,在析构函数前+ virtual
析构函数目的:内存释放、防止泄露、
析构虚函数:使得删除指向子类的对象的指针时候,调用子类析构,达到释放子类堆内存的目的,防止调用基类析构,导致内存泄露。