C++基础18-抽象类-电脑组装练习

01电脑组装me.cpp

需要实现所有的虚函数,不台灵活。架构函数无法写,设计不够成熟

#if 1
#include<iostream>
using namespace std;
class Computer {
public:
	virtual void caculate() = 0;
	virtual void display() = 0;
	virtual void storage() = 0;
};

class Inter :public Computer {
public:
	virtual void caculate() {
		cout << "英特尔cpu" << endl;
	}
	virtual void display() {
		cout << "英特尔card" << endl;
	}
	virtual void storage() {
		cout << "英特尔内存条" << endl;
	}
};
class NVIDA :public Computer {
public:
	virtual void caculate() {
		cout << "NVIDAcpu" << endl;
	}
	virtual void display() {
		cout << "NVIDAcard" << endl;
	}
	virtual void storage() {
	cout << "NVIDA内存条" << endl;
	}
};
class Kingston :public Computer {
public:
	virtual void caculate() {
	cout << "Kingstoncpu" << endl;
	}
	virtual void display() {
		cout << "Kingstoncard" << endl;
	}
	virtual void storage() {
	cout << "Kingston内存条" << endl;
	}
};

//架构函数不会写
//void OperatorComputer(Computer *cpu, Computer *card, Computer *storage) {
//	cpu->caculate();
//	card->display();
//	storage->storage();
//}

int main() {
	Computer *inter = new Inter;
	Computer *nvida= new NVIDA;
	Computer *kingston = new Kingston;

	//第一台电脑
	inter->caculate();
	inter->display();
	inter->storage();

	//第二台电脑
	inter->caculate();
	kingston->storage();
	nvida->display();

}
/*
英特尔cpu
英特尔card
英特尔内存条
英特尔cpu
Kingston内存条
NVIDAcard
*/
#endif

02电脑组装ok.cpp

#if 1
#include<iostream>
using namespace std;

//-----抽象层---------
class CPU {
public:
	virtual void caculate() = 0;
	virtual ~CPU() {}
};
class Card {
public:
	virtual void display() = 0;
	virtual ~Card() {}
};
class Memory {
public:
	virtual void storage() = 0;
	virtual ~Memory() {}
};
//要去重写所有的虚函数。多台电脑多次执行。 设计不合理
//class Computer :public CPU, public Card, public Memory {
//
//};

//架构类
class Computer {
public:
	Computer(CPU *cpu, Card *card, Memory *memory) {
		this->card = card;
		this->cpu = cpu;
		this->memory = memory;
	}
	void work() {
		this->card->display();
		this->cpu->caculate();
		this->memory->storage();
	}
	~Computer() {
		cout << "~Computer" << endl;
		if (this->cpu != NULL) {
			delete this->cpu;
			this->cpu = NULL;
		}
		if (this->card != NULL) {
			delete this->card;
			this->card = NULL;
		}
		if (this->memory != NULL) {
			delete this->memory;
			this->memory = NULL;
		}
	}
private:
	CPU *cpu;
	Card *card;
	Memory *memory;
};

//-----------实现层-----------

class InterCPU :public CPU {
public:
	virtual void caculate() {
		cout << "InterCPU" << endl;
	}
	~InterCPU() {
		cout << "~InterCPU()" << endl;
	}
};
class InterCard :public Card {
public:
	virtual void display() {
		cout << "InterCard" << endl;
	}
	~InterCard() {
		cout << "~InterCard()" << endl;
	}
};
class InterMem :public Memory {
public:
	virtual void storage() {
		cout << "Intermemory" << endl;
	}
	~InterMem() {
		cout << "~InterMem()" << endl;
	}
};

class NVIDACard :public Card {
public:
	virtual void display() {
		cout << "NVIDACard" << endl;
	}
	~NVIDACard() {
		cout << "~NVIDACard()" << endl;
	}
};
class KingtonMem :public Memory {
public:
	virtual void storage() {
		cout << "Kingtonmemory" << endl;
	}
	~KingtonMem() {
		cout << "~KingtonMem()" << endl;
	}
};


//-------------业务层-----------
void test01() {
	//1 组装第一台inter系列电脑
	CPU *interCpu = new InterCPU;
	Card *interCard = new InterCard;
	Memory *interMem = new InterMem;
	Computer c1(interCpu, interCard, interMem);  
	c1.work();
	//delete interCpu;     //在Computer中已经完成对interCpu的析构,
					       //所以再次delete程序崩溃
	//delete c1;           //c1不是在堆上,所以不能用delete
	//cout << endl;
	2 组装第二台电脑
	//Card *nvidaCard = new NVIDACard;
	//Memory *kingtonMem = new KingtonMem;
	//Computer c2(interCpu, nvidaCard, kingtonMem);
	//c2.work();

	/*delete interCpu;
	delete interCard;
	delete interMem;*/
}
/*
InterCard
InterCPU
Intermemory
~Computer
~InterCPU()
~InterCard()
~InterMem()
*/
void test02() {  //传递匿名
	//1 组装第一台inter系列电脑
	Computer *c1=new Computer(new InterCPU, new InterCard, new InterMem);
	c1->work();
	delete c1;   //调用析构函数
}
/*
InterCard
InterCPU
Intermemory
~Computer
~InterCPU()
~InterCard()
~InterMem()
*/
int main() {
	//test01();
	test02();
	return 0;
}
#endif

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chde2Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值