#include "iostream.h"
#include "conio.h"
class A
{
private:
int a;
public:
A(int k){a=k;};
virtual int B(){return a;};
};
class B
{
private:
int a;
public:
B(int k){a=k;};
virtual int C(){return a;};
virtual void play(){cout<<"a="<<a<<endl;};
};
class C
{
private:
int a;
public:
C(int m){a=m;};
void play(){cout<<"a="<<a<<endl;};
};
int main(int argc, char* argv[])
{
cout<<"Size of a int is:"<<sizeof(int)<<endl;
cout<<"Size of a void* is:"<<sizeof(void*)<<endl;
cout<<"Size of a A class is:"<<sizeof(A)<<endl;
cout<<"Size of a B class is:"<<sizeof(B)<<endl;
cout<<"Size of a C class is:"<<sizeof(C)<<endl;
//如有虚函数自动增加一个VPTR指针;
getch();
return 0;
}
这个列子可以告诉你virtual函数 跟其他函数有什么不同
to hanfeichunan(亚历山大)
为什么
class B : public A
{};
B一定要有多态的性质,否则就是滥用继承
能说的明白点么?
面向对象编程的真正威力不仅仅是继承,它具有把派生类的对象当作基类对象的能力。支持这一点的机制就是多态性和动态绑定。
多态性允许派生类对象传递给接受指向基类的引用或指针的函数,接受这种对象的函数就是多态函数。