思考:指向继承类的基类指针解引用后,是否还具备多态性?
#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;
}
测试结果显示仍然具备多态性。
但是,如果将这个指针指向的对象赋给基类对象,基类对象并不会变成多态语意。