抽象类
纯虚函数,只有函数声明没有实现,形式如:virtual double get_area() = 0,这里的0是纯语法概念,属于关键字;
一个类中包含一个纯虚函数,这个类就是抽象类;
如果一个普通类继承抽象类,必须重写父类中所有纯虚函数,如果不重写那么该类也变成类抽象类;
抽象类不能实例化,因为其方法(函数)没有实现;
抽象类、继承、多态完整实例代码:
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include<cstdlib> using namespace std; //---------抽象层--------- //CPU类 class CPU{ public: virtual void calculate() = 0; }; //Card类 class Card { public: virtual void display() = 0; }; //Memory类 class Memory { public: virtual void storage() = 0; }; class Computer { public: Computer(CPU *cpu, Card *card, Memory *memory) { this->cpu = cpu; this->card = card; this->memory = memory; } void work() { this->cpu->calculate(); this->card->display(); this->memory->storage(); } ~Computer() { 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; }; //---------实现层--------- //Intel系列 class IntelCPU :public CPU { public: virtual void calculate() { cout << "IntelCPU开始计算..." << endl; } }; class IntelCard :public Card { public: virtual void display() { cout << "IntelCard开始显示..." << endl; } }; class IntelMemory :public Memory { public: virtual void storage() { cout << "IntelMemory开始存储..." << endl; } }; class NvidiaCard :public Card { public: virtual void display() { cout << "NvidiaCard开始显示..." << endl; } }; class KingstonMemory :public Memory { public: virtual void storage() { cout << "KingstonMemory开始存储..." << endl; } }; //---------业务层--------- int main(void) { #if 0 //组装第一台Intel电脑 CPU *intel_cpu = new IntelCPU; Card *intel_card = new IntelCard; Memory *intel_memory = new IntelMemory; Computer *com1 = new Computer(intel_cpu, intel_card, intel_memory); com1->work(); Card *n_card = new NvidiaCard(); Memory *k_mem = new KingstonMemory(); #endif Computer *com2 = new Computer(new IntelCPU, new NvidiaCard, new KingstonMemory); com2->work(); delete com2; system("pause"); return 0; }