c++多态案例---组装电脑

编译软件是VStudio 2022

多态满足条件:

1.有继承关系

2.子类重写父类中的虚函数

多态使用的条件:

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

本案例利用CPU、显卡、内存条三个抽象类以及电脑类构造,通过Intel类和Lenovo类继承,利用全局函数完成整个电脑组装过程。

这是代码结构图:

#include
#include
using namespace std;
//抽象CPU类

//抽象显卡类

//抽象内存条类

//电脑类

//厂商Intel类

//厂商Lenovo类

//实现函数定义

int main() {
	//实现函数调用
	return 0;
}

这是三个抽象类的代码,利用了纯虚函数,强制继承的两个厂商类必须实现

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

//抽象显卡类
class VideoCard {
public:
	//抽象的显示函数
	virtual void display() = 0;
};

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

这是电脑类,用于后续的实例化对象

//电脑类
class Computer {
public:            //构造函数中传入三个抽象类的指针形参
	Computer(CPU* cpu, VideoCard* vc, Memory* mem) {
		mcpu = cpu;
		mvc = vc;
		mmem = mem;
	}
	//工作函数
	void work() {  //指针调用抽象类中的函数
		
		mcpu->calculate();
		mvc->display();
		mmem->storage();
	}
	//提供析构函数释放3个电脑零件
	~Computer() {       //因为在堆区开辟了空间,所以最好手动提供析构函数释放
		if (mcpu != NULL)
		{
			delete mcpu;
			mcpu = NULL;
		}
		if (mvc != NULL)
		{
			delete mcpu;
			mvc = NULL;
		}
		if (mmem != NULL)
		{
			delete mcpu;
			mmem = NULL;
		}
	}
private:
	CPU* mcpu;//cpu零件指针
	VideoCard* mvc;//显卡零件指针
	Memory* mmem;//内存条零件指针
};

这里是厂商类的代码:

//具体厂商

//Intel
class IntelCPU :public CPU {
public:
	void calculate() {          //重写父类中的纯虚函数,否则该类也是抽象类
		cout << "Intel的CPU开始计算" << endl;
	}
};

class IntelVideoCard :public VideoCard {
public:
	void display() {
		cout << "Intel的显卡开始显示" << endl;
	}
};

class IntelMemory:public Memory {
public:
	void storage() {
		cout << "Intel的内存条开始存储" << endl;
	}
};
//以上是Intel的三个零件类的具体化

//Lenovo
class LenovoCPU :public CPU {
public:
	void calculate() {
		cout << "Lenovo的CPU开始计算" << endl;
	}
};

class LenovoVideoCard :public VideoCard {
public:
	void display() {
		cout << "Lenovo的显卡开始显示" << endl;
	}
};

class LenovoMemory :public Memory {
public:
	void storage() {
		cout << "Lenovo的内存条开始存储" << endl;
	}
};
//以上是Lenovo的三个零件类的具体化

最后是实现函数的定义代码:

void test01() {
	cout << "第一台电脑开始工作" << endl;

	//第一台电脑零件,此处通过父类指针创建子类对象
	CPU* intelCpu = new IntelCPU;
	VideoCard* intelCard = new IntelVideoCard;
	Memory* intelMem = new IntelMemory;

	//第一台电脑组装
	Computer* computer1 = new Computer(intelCpu, intelCard, intelMem);
                                                   //向构造函数中传参数
	computer1->work();                             //利用对象调用work函数
	delete computer1;                              //删除对象

	cout << "----------------------" << endl;
	cout << "第二台电脑开始工作" << endl;

	//第二台电脑组装
	Computer* computer2 = new Computer(new LenovoCPU,new LenovoVideoCard,new LenovoMemory);                       //直接在传参的过程中创建对象
	computer2->work();
	delete computer2;

	cout << "----------------------" << endl;
	cout << "第三台电脑开始工作" << endl;

	//第三台电脑组装
	Computer* computer3 = new Computer(new IntelCPU, new LenovoVideoCard, new LenovoMemory);
	computer3->work();
	delete computer3;
}

运行结果:

c++多态案例---组装电脑_第1张图片

 文章创作内容灵感来源于B站 黑马程序员 C++教程,如有侵权请联系删除。

你可能感兴趣的:(c++,电脑,开发语言)