c++通过组装电脑的例子展示纯虚抽象类(接口)的好处

#include<iostream>
using namespace std;
//抽象层,可以声明很多大的抽象类
//这些功能接口是通用的
class Cpu
{
public:
    virtual void compute() = 0;
};
class Disk
{
public:
    virtual void store() = 0;
};
class Gpu
{
public:
    virtual void display() = 0;
};

class Computer
{
public:
    Computer(Cpu *cpu,Gpu *gpu,Disk *disk)
    {
        cout<<"Computer(Cpu *cpu,Gpu *gpu,Disk *disk)"<<endl;
        this->cpu = cpu;
        this->gpu = gpu;
        this->disk = disk;
    }
    ~Computer()
    {
        cout<<"~Computer"<<endl;
    }
    void work()
    {
        this->cpu->compute();
        this->gpu->display();
        this->disk->store();
    }

private:
    Cpu *cpu;
    Gpu *gpu;
    Disk *disk;

};

//实现层
//可以理解为某些厂商具体了上面的那些通用接口
//比如生产GPU的有英伟达、高通,不管他们内部是怎么做的,只需要满足接口标准
class Nvidia:public Gpu
{
public:
    virtual void display()
    {
        cout<<"NVIDIA dispaly"<<endl;
    }
};
class Kingston:public Disk
{
public:
    virtual void store()
    {
        cout<<"KINGSTON store"<<endl;
    }
};
//Cpu的一种实现
class Intel:public Cpu
{
public:
    virtual void compute()
    {
        cout<<"Intel i7 compute"<<endl;
    }
};
//Cpu的另一种实现
class AMD:public Cpu
{
public:
    virtual void compute()
    {
        cout<<"AMD Ryzen 7 compute"<<endl;
    }
};

//业务层,可以理解为组装电脑
//或者让电脑去做某些事情
void computer_work(Computer &computer)
{
    computer.work();
}



int main(void)
{
//定义了一个因特尔的cpu
    Cpu *c1 = new Intel;
//定义了另一块cpu为AMD的
    Cpu *c2 = new AMD;
//显卡
    Gpu *g = new Nvidia;
//硬盘
    Disk *d = new Kingston;

//只要定义好了通用的硬件标准
//各个厂商按需要去实现
//随便传入任何不同厂商的硬件组合都能产生新的电脑
    Computer computer1(c1,g,d);
    Computer computer2(c2,g,d);

//而且符合通用接口标准的电脑也能随时就运行
//而无需管你具体用了哪些硬件
    computer_work(computer1);
    computer_work(computer2);
    return 0;
}



这种定义抽象类,然后不管具体实现,能降低编程的耦合度,有利于程序拓展。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值