C++知识点9:virtual虚拟函数

虚函数:

基类中加入关键字virtual的函数
作用:在基类的派生类中可以通过重写虚函数实现对基类虚函数的覆盖。
基类指针指向派生类对象时,指针调用的函数实际上是调用了派生类的函数

基类函数中有virtual关键字
输出结果:derived//调用派生类函数

#include <iostream>
using namespace std;

class base
{
public:
    base(){}
    virtual void print(){cout<<"base"<<endl;}
    //void print(){cout<<"base"<<endl;}
};

class derived:public base
{
public:
    derived(){}
    void print(){cout<<"derived"<<endl;}
};
int main()
{
    base *point=new derived();
    point->print();
    return 0;
}

基类函数中没有virtual关键字
输出结果:base//调用基类函数

#include <iostream>
using namespace std;

class base
{
public:
    base(){}
    //virtual void print(){cout<<"base"<<endl;}
    void print(){cout<<"base"<<endl;}
};

class derived:public base
{
public:
    derived(){}
    void print(){cout<<"derived"<<endl;}
};
int main()
{
    base *point=new derived();
    point->print();
    return 0;
}

虚拟的析构函数:

基类的析构函数添加virtual关键字
作用:基类的析构函数不加virtual关键字时,撤销基类指针,不会调用派生类的析构函数而直接调用基类的析构函数,从而不会释放派生类对象构造时占用的内存,造成内存泄漏。(未调用继承类析构函数而导致内存泄露)

猜你喜欢

转载自blog.csdn.net/htt789/article/details/81067536
今日推荐