C++虚函数深入测试

前一段时间写的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;
}
结果自己分析,我这里就不贴出来了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值