多态——电脑组装实例

 在构造函数中初始化对象属性,在创建对象时更加符合习惯;

 

#include<iostream>
#include<string>
using namespace std;

//1、抽象出电脑零件的基类;
//
class CPU
{
public:
	//纯虚函数提供抽象函数;
	virtual void Calculate() = 0;
};

//显卡
class VideoCard
{
public:
	virtual void Display() = 0;
};

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

//2、具体零件生产厂商
//Huawei类
class HuaweiCPU:public CPU
{
public:
	//纯虚函数提供抽象函数;
	virtual void Calculate()
	{
		cout << "Huawei CPU calculate..." << endl;
	}
};
//显卡
class HuaweiVideoCard:public VideoCard
{
public:
	virtual void Display()
	{
		cout << "Huawei VideoCard display..." << endl;
	}
};
//内存
class HuaweiMemory:public Memory
{
public:
	//纯虚函数提供抽象函数;
	virtual void Storage()
	{
		cout << "Huawei Memory Storage..." << endl;
	}
};

//Apple类
class AppleCPU :public CPU
{
public:
	//纯虚函数提供抽象函数;
	virtual void Calculate()
	{
		cout << "Apple CPU calculate..." << endl;
	}
};
//显卡
class AppleVideoCard :public VideoCard
{
public:
	virtual void Display()
	{
		cout << "Apple VideoCard display..." << endl;
	}
};
//内存
class AppleMemory :public Memory
{
public:
	//纯虚函数提供抽象函数;
	virtual void Storage()
	{
		cout << "Apple Memory Storage..." << endl;
	}
};


//3、抽象电脑基类,提供工作函数;
class Computer
{
private:
	CPU* m_CPU;
	VideoCard* m_VideoCard;
	Memory* m_Memory;
public:
	Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
	{
		m_CPU = CPU;
		m_VideoCard = VideoCard;
		m_Memory = Memory;
	}
	//电脑工作函数;
	void Runing()
	{
		m_CPU->Calculate();
		m_VideoCard->Display();
		m_Memory->Storage();
	}
    //释放堆区空间;
	~Computer()
	{
		if (m_CPU)
		{
			delete m_CPU;
			m_CPU = NULL;
		}
		if (m_VideoCard)
		{
			delete m_VideoCard;
			m_VideoCard = NULL;
		}
		if (m_Memory)
		{
			delete m_Memory;
			m_Memory = NULL;
		}
	}
};

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

	cout << "第二台电脑开始工作;" << endl;
	//创建零件;应该这里就发生了多态;
	CPU* applecpu = new AppleCPU;
	VideoCard* applevd = new AppleVideoCard;
	Memory* appleme = new AppleMemory;
	//创建电脑; 
	Computer c2(applecpu, applevd, appleme);
	c2.Runing();

	system("pause"); 
	return 0;
}

构造电脑时实现多态,这种接口更加方便,合理,符合习惯,

这或许就是构造函数的作用之一

//3、抽象电脑基类,提供工作函数;
class Computer
{
private:
	CPU* m_CPU;
	VideoCard* m_VideoCard;
	Memory* m_Memory;
public:
	Computer(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
	{
		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;
}

一开始自己写的在运行时实现多态

//3、抽象电脑基类,提供工作函数;
class Computer
{
public:
	CPU* m_CPU;
	VideoCard* m_VideoCard;
	Memory* m_Memory;
	//电脑工作函数;
	void Runing(CPU* CPU, VideoCard* VideoCard, Memory* Memory)
	{
		//这里为啥需要转换一下?
		m_CPU = CPU;
		m_VideoCard = VideoCard;
		m_Memory = Memory;
		m_CPU->Calculate();
		m_VideoCard->Display();
		m_Memory->Storage();
	}
};

int main() 
{
	//创建第一个电脑;
	Computer c1;
	//电脑运行;
	//调用方式1.在函数中,通过父类指针指向子类:
	c1.Runing(new HuaweiCPU,new HuaweiVideoCard,new HuaweiMemory);
	system("pause"); 
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值