抽象类

纯虚函数,只有函数声明没有实现,形式如: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;
}

 

posted @ 2018-12-06 22:40  zarjen  阅读(157)  评论(0编辑  收藏  举报