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++多态属性的好处,如果市场加入新的品牌只需要继承到单独的组件类中即可。

相关文章
|
11天前
|
存储 安全 C++
C++中的引用和指针:区别与应用
引用和指针在C++中都有其独特的优势和应用场景。引用更适合简洁、安全的代码,而指针提供了更大的灵活性和动态内存管理的能力。在实际编程中,根据需求选择适当的类型,能够编写出高效、可维护的代码。理解并正确使用这两种类型,是掌握C++编程的关键一步。
19 1
|
1天前
|
关系型数据库 MySQL 测试技术
技术分享:深入C++时间操作函数的应用与实践
技术分享:深入C++时间操作函数的应用与实践
7 1
|
2天前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
16 2
|
16天前
|
算法 C++
C++中的结构应用:Josephus问题
C++中的结构应用:Josephus问题
11 1
|
6天前
|
C++
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
|
10天前
|
JSON Android开发 C++
Android c++ core guideline checker 应用
Android c++ core guideline checker 应用
|
3天前
|
C++
C++一分钟之-类与对象初步
【6月更文挑战第20天】C++的类是对象的蓝图,封装数据和操作。对象是类的实例。关注访问权限、构造析构函数的使用,以及内存管理(深拷贝VS浅拷贝)。示例展示了如何创建和使用`Point`类对象。通过实践和理解原理,掌握面向对象编程基础。
30 2
C++一分钟之-类与对象初步
|
4天前
|
存储 编译器 C++
|
4天前
|
C++
C++类和类模板——入门
C++类和类模板——入门
10 1