虚函数与构造函数、析构函数

来源:互联网 发布:风险数据集市 编辑:程序博客网 时间:2024/05/22 04:55

虚函数是多态的基础 (PS多态是一个接口多个实现)
多态条件:1.继承 2. 虚函数 3. 父类指针指向子类

#include<iostream>using namespace std;class myclass{public:    virtual void go()    {        cout << "myclass" << endl;    }    virtual void go1()    {        cout << "myclass1" << endl;    }    virtual void go2()    {        cout << "myclass2" << endl;    }};class classX:public myclass{public:    void go()    {        cout << "classX" << endl;    }};class classY :public myclass{public:    void go()    {        cout << "classY" << endl;    }};int main(){    myclass *p;    p= new classX;    p->go();    p = new classY;    p->go();    cin.get();    return 0;}//其中sizeof(myclass) 为4,无论有多少虚函数

构造函数不能为虚函数,如果是虚函数,子类无法对父类进行初始化
析构函数能为虚函数,
如果使用多态,析构函数必须为虚函数,否则会造成内存泄露
虚构中:父类指针调用子类子类的析构,子类析构自动调用父类的析构
//使用多态、析构函数不是多态会造成严重的内存泄露,
因为只会完成父类的析构

#include<iostream>using namespace std;class myclass{public:    char *p;public:    myclass()    {        p = new char[1024 * 1024 * 100];    }    ~myclass()    {        delete[]p;    }    virtual void go()    {        cout << "myclass" << endl;    }    virtual void go1()    {        cout << "myclass1" << endl;    }    virtual void go2()    {        cout << "myclass2" << endl;    }};class classX:public myclass{public:    int *p;    classX()    {        p = new int[1024 * 1024 * 100];    }    ~classX()    {        delete[] p;    }    void go()    {        cout << "classX" << endl;    }};class classY :public myclass{public:    void go()    {        cout << "classY" << endl;    }};int main011(){    myclass *p;    p= new classX;    p->go();    p = new classY;    p->go();    cin.get();    return 0;}int main(){    myclass *p;    p = new classX;    p->go();    delete p;    cin.get();    return 0;}
原创粉丝点击