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