C++虚函数深入测试

来源:互联网 发布:windows多线程互斥 编辑:程序博客网 时间:2024/06/04 19:39

前一段时间写的c++虚函数的测试小程序

#include<iostream>using namespace std;class Base{    public:        Base()        {            cout << "Base " << endl;        }        ~Base()        {            cout << "~Base" << endl;        }        virtual void func1()        {            cout << "Base virtual func1" << endl;        }        void func3()        {            cout << "Base func3" << endl;        }};class Derived : public Base{    public:    Derived() : Base()    {        cout << "Derived" << endl;    }    ~Derived()    {        cout << "~Derived" << endl;    }    virtual void func1()    {        cout << "Derived func1" << endl;    }    void func2()    {        func1();    }    void func3()    {        cout << "Derived func3" << endl;    }};class Derived2 : public Derived{    public:        Derived2() : Derived()        {            cout << "Derived2" << endl;        }        ~Derived2()        {            cout << "~Derived2" << endl;        }        virtual void func1()        {            cout << "Derived2 func1" << endl;        }        void func3()        {            cout << "Derived2 func3" << endl;        }};int main(){    Derived *pobj = new Derived2();    pobj->func2();             //Derived2 func1    cout << "=======================" << endl;    Derived2 obj;    obj.func2();                    //Derived2 func1    cout << "HHHHHHHHHHHHHHHHHHHHHHHHH" << endl;    Derived objtemp;    objtemp.func2();           //Derived func1    cout << "======================" << endl;    Base *pbase = NULL;    pbase = new Derived();    pbase->func3();           //Base func3    delete pbase;    cout << "=====================" << endl;    pbase = new Derived2();    pbase->func3();         //Base func3    delete pbase;    cout << "EEEEEEEEEEEEEEEEEEEEEEEEEEE" << endl;    return 0;}
测试程序2

#include<iostream>using namespace std;class A{    //protected    private:        int num;    public:        A(int i=0)        {            num = i;        }        int getNum()        {            cout << "A----getNum!" << endl;            return get();        }        virtual int get()        {            cout << "A-----get()!" << endl;            return num;        }};class B : public A{    private:        int num;    public:        B(int i=1)        {            num =i;        }        int get()        {            cout << "B-----get()" << endl;            return num;        }};class C : public B{    private:        int num;    public:        C(int i=2)        {            num = i;        }};int main(){    C c(10);    cout << "--------------------------------" << endl;    cout << "c.getNum()\t" << c.getNum() << endl;          //1    cout << "--------------------------------" << endl;    cout << "c.get()\t" << c.get() << endl;                 //1    cout << "--------------------------------" << endl;    cout << "c.A::get()\t" << c.A::get() << endl;            //0    cout << "--------------------------------" << endl;    cout << "c.B::get()\t" << c.B::get() << endl;            //1    cout << "--------------------------------" << endl;    cout << "c.C::get()\t" << c.C::get() << endl;            //1    cout << "--------------------------------" << endl;    cout << "c.A::getNum()\t" << c.A::getNum() << endl;       //1    cout << "--------------------------------" << endl;    cout << "c.B::getNum()\t" << c.B::getNum() << endl;        //1    cout << "--------------------------------" << endl;    cout << "c.B::getNum()\t" << c.C::getNum() << endl;       //1    cout << "--------------------------------" << endl;    return 0;}
结果自己分析,我这里就不贴出来了


0 0