多态使用的四种方式

 多态使用:

父类的指针或引用指向子类对象;

调用方式1.在函数调用中,通过父类指针指向子类:

//3、抽象电脑基类,提供工作函数;
class Computer
{
private:
	CPU* m_CPU;
	VideoCard* m_VideoCard;
	Memory* m_Memory;
public:
	Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
//相当于  CPU* CPU=new HuaweiCPU,VideoCard* VideoCard= new HuaweiVideoCard, Memory* Memory=new HuaweiMemory
	{
		m_CPU = CPU;
		m_VideoCard = VideoCard;
		m_Memory = Memory;
	}
	//电脑工作函数;
	void Runing()
	{
		m_CPU->Calculate();
		m_VideoCard->Display();
		m_Memory->Storage();
	}
};

int main() 
{
	//创建第一个电脑;
	//调用方式1.在函数中,通过父类指针指向子类:
	Computer c1(new HuaweiCPU, new HuaweiVideoCard, new HuaweiMemory);
	//电脑运行;
	c1.Runing();

	system("pause"); 
	return 0;
}

调用方式2.在函数调用中,通过父类引用指向子类:

void DoSpeak(Animal& animal)
//相当于:Animal& animal=cat;;此时多态发生,vfptr指向cat;
{
	animal.Speak();
}
 
int main() 
{
	Animal animal;
	DoSpeak(animal);
 
	cat cat;
	DoSpeak(cat);
 
	system("pause"); 
	return 0;
}

————————————————
版权声明:本文为CSDN博主「Bruce-嵌入式软件」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46432495/article/details/121845728

调用方式 3.在函数中,通过父类指针指向子类:


int main() 
{
	DoDrink* c = new Coffee;//这里直接发生多态,将vfptr指向coffee的vftal
	c->DoWork();
	delete c;

	system("pause"); 
	return 0;
}

调用方式4.在函数中,通过父类引用指向子类:

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多态性是指一段程序能够具备处理多种类型对象的能力,即同一段代码或函数可以实现不同类型数据的相同或相似功能的实现。多态性有不同的形式,包括参数多态、包含多态、过载多态和强制多态。 举例来解释不同形式的多态性: 1. 参数多态:参数多态通过给出不同的类型参数,使得一个结构有多种类型。比如在C++语言中,函数模板和类模板就属于参数多态。通过在编译时确定调用的具体类型,参数多态具有执行速度快、异常少的特点。 2. 包含多态:包含多态是指一个类型是另外一个类型的子类型。在许多语言中,包含多态需要进行运行时的类型检查,常见的实现方式是通过虚函数。虚函数是基类和派生类之间成员函数的一种关系。通过包含多态,可以实现基类和派生类的相同或相似功能的实现。 3. 过载多态:过载多态是指同一个名字在不同的上下文中所代表的含义不同。典型的例子是运算符重载和函数重载。通过在不同的上下文中使用相同的名字,可以实现不同的功能。 4. 强制多态:强制多态是通过编译程序对操作对象的类型进行强制变换,以符合函数或操作符的要求。比如在进行不同类型的数据混合运算时,编译程序会进行强制多态的操作。强制多态可以是隐式的,也可以是显式的。 这些不同形式的多态性不仅增加了面向对象软件系统的灵活性,减少了信息冗余,还提高了软件的可重用性和可扩展性。 #### 引用[.reference_title] - *1* *3* [C++多态四种实现形式](https://blog.csdn.net/weixin_64647426/article/details/130172218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [多态四种不同形式](https://blog.csdn.net/u010104750/article/details/49611277)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值