多态应用实例

发布时间:2024年01月24日

在这里插入图片描述

多态优点

多态的优点:

  • 代码组织结构清晰;
  • 可读性强;
  • 利于前期和后期的扩展以及维护。

如果想扩展新的功能,不需要修改源码,遵循开发中开闭原则,只需在补充所需对象,直接调用即可。
开闭原则:对扩展进行开放,对修改进行关闭。

总结:C++开发提倡利用多态设计程序架构,因为多态优点很多

1.模拟冲泡饮品过程

案例描述:

制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料
利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶。

#include<iostream>
using namespace std;

//父类:抽象制作饮品过程
class AbstractDrinking {
public:
	//烧水
	virtual void Boil() = 0;//纯虚函数
	//冲泡
	virtual void Brew() = 0;
	//倒入杯中
	virtual void PourInCup() = 0;
	//加入辅料
	virtual void PutSomething() = 0;

	//规定流程
	void MakeDrink() {
		Boil();
		Brew();
		PourInCup();
		PutSomething();
	}
};

//子类一:制作咖啡
class Coffee : public AbstractDrinking {
public:
//重写纯虚函数
	//烧水
	virtual void Boil() {
		cout << "煮农夫山泉!" << endl;
	}
	//冲泡
	virtual void Brew() {
		cout << "冲泡咖啡!" << endl;
	}
	//倒入杯中
	virtual void PourInCup() {
		cout << "将咖啡倒入杯中!" << endl;
	}
	//加入辅料
	virtual void PutSomething() {
		cout << "加入牛奶!" << endl;
	}
};

//子类二:制作茶水
class Tea : public AbstractDrinking {
public:
//重写纯虚函数
	//烧水
	virtual void Boil() {
		cout << "煮自来水!" << endl;
	}
	//冲泡
	virtual void Brew() {
		cout << "冲泡茶叶!" << endl;
	}
	//倒入杯中
	virtual void PourInCup() {
		cout << "将茶水倒入杯中!" << endl;
	}
	//加入辅料
	virtual void PutSomething() {
		cout << "加入枸杞!" << endl;
	}
};

//业务函数
//父类指针指向子类对象
void DoWork(AbstractDrinking* drink) {
	drink->MakeDrink();
	delete drink;
}

void test01() {
	DoWork(new Coffee);
	cout << "--------------" << endl;
	DoWork(new Tea);
}

int main() {

	test01();
	system("pause");
	return 0;
}

在这里插入图片描述

2.电脑组装

案例描述:

电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储);

将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商…
创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口;
测试组装三台不同的电脑进行工作.

总代码:

#include<iostream>
using namespace std;

//抽象零件类
class CPU
{
public:
	//抽象CPU计算函数
	virtual void calculate() = 0;//纯虚函数
};

class Graphics_card//显卡
{
public:
	//抽象显卡显示函数
	virtual void display() = 0;//纯虚函数
};

class Memory
{
public:
	//抽象内存存储函数
	virtual void storage() = 0;//纯虚函数
};

 
//生产厂商
//Intel厂商生产零件类
class IntelCpu:public CPU
{
public:
	void calculate()
	{
		cout << "Intel的CPU提供计算!" << endl;
	}

};

 class IntelCard :public Graphics_card
 {
 public:
	 void display()
	 {
		 cout << "Intel的显卡提供显示!" << endl;
	 }
 };

 class IntelMem : public Memory
 {
 public:
	  void storage()
	 {
		 cout << "Intel的内存条提供存储!" << endl;
	 }
 };


 //Lenovo厂商生产零件类
 class LenovoCpu :public CPU
 {
 public:
	 void calculate()
	 {
		 cout << "Lenovo的CPU提供计算!" << endl;
	 }

 };

 class LenovoCard :public Graphics_card
 {
 public:
	 void display()
	 {
		 cout << "Lenovo的显卡提供显示!" << endl;
	 }
 };

 class LenovoMem : public Memory
 {
 public:
	 void storage()
	 {
		 cout << "Lenovo的内存条提供存储!" << endl;
	 }
 };


class Computer
{
public:
	//初始化:选择零件厂商
	Computer(CPU* cpu,Graphics_card* card,Memory* mem)
	{
		m_cpu=cpu;
		m_card=card;
	    m_mem=mem;
	}

	//执行工作
	void func()
	{
		//零件工作,调用接口
		m_cpu->calculate();
		m_card->display();
		m_mem->storage();
	}

	//释放三个零件所开辟的空间
	~Computer()
	{
		//释放CPU零件
		if (m_cpu != NULL)
		{
			delete m_cpu;
			m_cpu = NULL;
		}
		//释放显卡零件
		if (m_card != NULL)
		{
			delete m_card;
			m_card = NULL;
		}

		//释放内存条零件
		if (m_mem != NULL)
		{
			delete m_mem;
			m_mem = NULL;
		}
	}

private:
	//各零件指针
	CPU* m_cpu;
	Graphics_card* m_card;
	Memory* m_mem;
};

void test01()
{
//第一台电脑零件——全部Intel零件
	CPU* intelCpu = new IntelCpu;
	Graphics_card* intelCard = new IntelCard;
	Memory * intelMem= new IntelMem;
	cout << "第一台电脑开始工作:" << endl;
	//创建第一台电脑
	Computer* computer1 = new Computer(intelCpu,intelCard,intelMem);
	computer1->func();
	delete computer1;

	cout << "-----------------------" << endl;
//第二台电脑零件——全部Lenovo零件
	CPU* lenovoCpu = new LenovoCpu;
	Graphics_card* lenovoCard = new LenovoCard;
	Memory* lenovoMem = new LenovoMem;
	cout << "第二台电脑开始工作:" << endl;
	//创建第一台电脑
	Computer* computer2 = new Computer(lenovoCpu, lenovoCard, lenovoMem);
	computer2->func();
	delete computer2;

	cout << "-----------------------" << endl;
//第三台电脑零件——混合Intel和Lenovo零件
	cout << "第三台电脑开始工作:" << endl;
	//创建第一台电脑
	Computer* computer3 = new Computer(new LenovoCpu, new IntelCard, new LenovoMem);
	computer3->func();
	delete computer3;
}

int main()
{
	test01();

	system("pause");
	return 0;
}
文章来源:https://blog.csdn.net/weixin_63685622/article/details/135825954
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。