C++基础18-抽象类-电脑组装练习
生活随笔
收集整理的這篇文章主要介紹了
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 */ #endif02電腦組裝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?
總結
以上是生活随笔為你收集整理的C++基础18-抽象类-电脑组装练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UDP之sendto错误解决
- 下一篇: C++混淆点-static关键字理解