类对象和类指针

https://www.jianshu.com/p/a75b267325c2

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


#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;
}

测试结果显示仍然具备多态性。
但是,如果将这个指针指向的对象赋给基类对象,基类对象并不会变成多态语意。

posted @ 2020-10-20 22:19  hunter-w  阅读(231)  评论(0编辑  收藏  举报