C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用

简介: C++示例(电脑组装)展现C++多态的优势以及虚函数抽象类的应用

完整代码:

/*
 * @Author: Stylle
 * @Date: 2020-08-20 21:05:50
 * @LastEditors: Stylle
 * @LastEditTime: 2020-08-21 19:29:10
 * @FilePath: \C-_learningc:\Users\23999\Desktop\text01.cpp
 */
#include <iostream>
using namespace std;
//p 显卡的抽象类
class videoCard
{
public:
    virtual void videoWork() = 0;
};
//? amd显卡的继承 这里就体现了多态的好处如果市场加入新的品牌只需要继承到CPU类中即可
class AmdVideoCard : public videoCard
{
public:
    virtual void videoWork()
    {
        cout << "AMD的显卡开始工作了" << endl;
    }
};
//? intel显卡的继承
class IntelVideoCard : public videoCard
{
public:
    virtual void videoWork()
    {
        cout << "Intel的显卡开始工作了" << endl;
    }
};
//p cpu的抽象类
class cpu
{
public:
    virtual void cpuWork() = 0;
};
//? amd的cpu的继承 这里就体现了多态的好处如果市场加入新的品牌只需要继承到CPU类中即可
class AmdCpu : public cpu
{
public:
    virtual void cpuWork()
    {
        cout << "AMD的CPU开始工作了" << endl;
    }
};
//? intel的cpu的继承
class IntelCpu : public cpu
{
public:
    virtual void cpuWork()
    {
        cout << "Intel的CPU开始工作了" << endl;
    }
};
//p 内存条的抽象类
class memory
{
public:
    virtual void memoryWork() = 0;
};
//? amd的内存条的继承 这里就体现了多态的好处如果市场加入新的品牌只需要继承到CPU类中即可
class AmdMemory : public memory
{
public:
    virtual void memoryWork()
    {
        cout << "AMD的内存条开始工作了" << endl;
    }
};
//? intel的内存条的继承
class IntelMemory : public memory
{
public:
    virtual void memoryWork()
    {
        cout << "Intel的内存条开始工作了" << endl;
    }
};
class computer
{
public:
    //电脑组装
    computer(cpu *CPU, videoCard *VideoCard, memory *Memory)
    {
        this->myCpu = CPU;
        this->MyMemory = Memory;
        this->MyVideoCard = VideoCard;
    }
    //释放申请的机箱内存
    ~computer()
    {
        if (myCpu != NULL)
        {
            delete myCpu;
            myCpu = NULL; //防止野指针出现
        }
        if (MyMemory != NULL)
        {
            delete MyMemory;
            MyMemory = NULL;
        }
        if (MyVideoCard != NULL)
        {
            delete MyVideoCard;
            MyVideoCard = NULL;
        }
    }
    //电脑开机工作
    void work()
    {
        this->myCpu->cpuWork();
        this->MyMemory->memoryWork();
        this->MyVideoCard->videoWork();
        cout << endl;
    }
private:
    memory *MyMemory;
    videoCard *MyVideoCard;
    cpu *myCpu;
};
int main(int arcg, char **argv)
{
    cout << "组装电脑方式1" << endl;
    computer *MyComputer1 = new computer(new IntelCpu, new IntelVideoCard, new IntelMemory);
    MyComputer1->work();
    delete MyComputer1;
    cout << "组装电脑方式2" << endl;
    cpu *MyCpu = new IntelCpu;
    videoCard *MyVideo = new AmdVideoCard;
    memory *Mymemory = new IntelMemory;
    computer MyComputer2(MyCpu, MyVideo, Mymemory);
    MyComputer2.work();
    return 0;
}

电脑单件拆分(CPU):

//p cpu的抽象类基类
class cpu
{
public:
    virtual void cpuWork() = 0;
};
//? amd的cpu的继承 这里就体现了多态的好处如果市场加入新的品牌只需要继承到CPU类中即可
class AmdCpu : public cpu
{
public:
    virtual void cpuWork()
    {
        cout << "AMD的CPU开始工作了" << endl;
    }
};
//? intel的cpu的继承
class IntelCpu : public cpu
{
public:
    virtual void cpuWork()
    {
        cout << "Intel的CPU开始工作了" << endl;
    }
};

电脑单件拆分(显卡):

//p 显卡的抽象类基类
class videoCard
{
public:
    virtual void videoWork() = 0;
};
//? amd显卡的继承 这里就体现了多态的好处如果市场加入新的品牌只需要继承到CPU类中即可
class AmdVideoCard : public videoCard
{
public:
    virtual void videoWork()
    {
        cout << "AMD的显卡开始工作了" << endl;
    }
};
//? intel显卡的继承
class IntelVideoCard : public videoCard
{
public:
    virtual void videoWork()
    {
        cout << "Intel的显卡开始工作了" << endl;
    }
};

电脑单件拆分(内存条):

//p 内存条的抽象类基类
class memory
{
public:
    virtual void memoryWork() = 0;
};
//? amd的内存条的继承 这里就体现了多态的好处如果市场加入新的品牌只需要继承到CPU类中即可
class AmdMemory : public memory
{
public:
    virtual void memoryWork()
    {
        cout << "AMD的内存条开始工作了" << endl;
    }
};
//? intel的内存条的继承
class IntelMemory : public memory
{
public:
    virtual void memoryWork()
    {
        cout << "Intel的内存条开始工作了" << endl;
    }
};

总结:在电脑类中申请了三个组件的指针,所以在电脑类中析构函数中就需要释放指针内存并将其指向NULL防止野指针的出现,在这个程序中完美的体现了C++多态属性的好处,如果市场加入新的品牌只需要继承到单独的组件类中即可。

相关文章
|
5月前
|
C++
C++一分钟之-虚函数与抽象类
【6月更文挑战第21天】在C++中,虚函数与抽象类是多态的基础,增进类间耦合与灵活性。虚函数实现动态绑定,抽象类定义不可实例化的接口。关键点包括:记得使用`virtual`,避免滥用虚函数,确保派生类实现纯虚函数。抽象类不能直接实例化,派生类必须实现所有纯虚函数。通过实例代码学习和实践,能更好地掌握这些概念以优化代码设计。
50 2
|
24天前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
5月前
|
Ubuntu C++ Docker
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
Docker的基本指令和HTML/PYTHON/C++的简单创建示例
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
55 2
|
2月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
23 3
|
2月前
|
算法 机器人 中间件
C++的主要优势是什么?
C++的主要优势是什么?
65 1
|
3月前
|
存储 算法 C++
C++ STL应用宝典:高效处理数据的艺术与实战技巧大揭秘!
【8月更文挑战第22天】C++ STL(标准模板库)是一组高效的数据结构与算法集合,极大提升编程效率与代码可读性。它包括容器、迭代器、算法等组件。例如,统计文本中单词频率可用`std::map`和`std::ifstream`实现;对数据排序及找极值则可通过`std::vector`结合`std::sort`、`std::min/max_element`完成;而快速查找字符串则适合使用`std::set`配合其内置的`find`方法。这些示例展示了STL的强大功能,有助于编写简洁高效的代码。
50 2
|
3月前
|
编译器 C++ 索引
C++虚拟成员-虚函数
C++虚拟成员-虚函数
|
3月前
|
存储 搜索推荐 Serverless
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
【C++航海王:追寻罗杰的编程之路】哈希的应用——位图 | 布隆过滤器
37 1
|
4月前
|
程序员 编译器 C语言
云原生部署问题之C++中的nullptr相比C语言中的NULL优势如何解决
云原生部署问题之C++中的nullptr相比C语言中的NULL优势如何解决
55 10