指向继承类的基类指针解引用后,是否还具备多态性

来源:互联网 发布:dhcp服务器软件下载 编辑:程序博客网 时间:2024/05/19 21:17

指向继承类的基类指针解引用后,是否还具备多态性? 如下例:

#include <iostream>using namespace std;class Base{public:int a;virtual void fun() { cout << "Base" << endl; }}; class Extend : public Base{public:int b;virtual void fun() { cout << "Extend" << endl; }}; int main(){Base *pb;Extend ex;pb = &ex;pb -> fun(); //invoke Extend :: fun();(*pb).fun(); //invoke Extend :: fun();Base b = *pb;b.fun(); // invoke Base :: fun();cout << sizeof(Base) << " " << sizeof(*pb) << " " << sizeof(Extend) << endl;return 0;}

运行结果output为:


测试结果显示仍然具备多态性!

另外:

如果将这个指针指向的对象赋给基类对象,基类对象并不会变成多态语意:

Base b=(*pb);
b.fun();     //invoke Base::fun()

原创粉丝点击