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

本文深入分析了指向继承类的基类指针解引用后的多态性特性,并通过实例展示了如何正确使用这种特性。同时,讨论了将基类对象赋值给对象指针后多态性消失的情况。

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

#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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值