#include"iostream.h"
class xx
{
private:
int i;
public:
xx()
{
i=0;
}
virtual int get(){return i;}
virtual ~xx(){cout<<"~XX"<<endl;
}
};
class yy: public xx
{
private:
int j;
public:
yy():j(1){};
int get(){return j;}
~yy(){};
};
void main()
{
yy y;
xx x=y;
cout<<x.get();
}
程序运行后显示为0,说明虚函数并没有发生作用.... 解释:
当一个base class object被直接初始化为(或是被指定为)一个derived class object时,
derived object就会被切割,以塞入较小的base type 内存中,derived type 将没有留下任何的
蛛丝马迹.多态于是不再呈现,而一个严格的编译器可以再编译时期解析一个"通过该object而触发
的virtual function 调用操作",因而回避virtual机制,如果virtual function 被定义为inline ,
则更有效率上的收获...
当然该为 yy y; xx *x=&y,cout<<x->get(); 则显示1;一个 point或一个reference 之所以支持多态,是因为它们并不引发内存中任何"与类型有关的
委托操作" ..会受到改变的只是它们所指向的内存的"大小和内容的解释方式"而已..所以可以用
指针和引用来实现多态.