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++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
21 5
|
5天前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
22 4
|
5天前
|
设计模式 IDE 编译器
【C++面向对象——类的多态性与虚函数】编写教学游戏:认识动物(头歌实践教学平台习题)【合集】
本项目旨在通过C++编程实现一个教学游戏,帮助小朋友认识动物。程序设计了一个动物园场景,包含Dog、Bird和Frog三种动物。每个动物都有move和shout行为,用于展示其特征。游戏随机挑选10个动物,前5个供学习,后5个用于测试。使用虚函数和多态实现不同动物的行为,确保代码灵活扩展。此外,通过typeid获取对象类型,并利用strstr辅助判断类型。相关头文件如&lt;string&gt;、&lt;cstdlib&gt;等确保程序正常运行。最终,根据小朋友的回答计算得分,提供互动学习体验。 - **任务描述**:编写教学游戏,随机挑选10个动物进行展示与测试。 - **类设计**:基类
18 3
|
1月前
|
算法 安全 编译器
C++优势
C++优势
95 29
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++】多态
多态是面向对象编程中的重要特性,允许通过基类引用调用派生类的具体方法,实现代码的灵活性和扩展性。其核心机制包括虚函数、动态绑定及继承。通过声明虚函数并让派生类重写这些函数,可以在运行时决定具体调用哪个版本的方法。此外,多态还涉及虚函数表(vtable)的使用,其中存储了虚函数的指针,确保调用正确的实现。为了防止资源泄露,基类的析构函数应声明为虚函数。多态的底层实现涉及对象内部的虚函数表指针,指向特定于类的虚函数表,支持动态方法解析。
34 1
|
3月前
|
存储 并行计算 安全
C++多线程应用
【10月更文挑战第29天】C++ 中的多线程应用广泛,常见场景包括并行计算、网络编程中的并发服务器和图形用户界面(GUI)应用。通过多线程可以显著提升计算速度和响应能力。示例代码展示了如何使用 `pthread` 库创建和管理线程。注意事项包括数据同步与互斥、线程间通信和线程安全的类设计,以确保程序的正确性和稳定性。
|
3月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
57 2
C++入门12——详解多态1
|
3月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
94 1
|
3月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
90 2
|
4月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
35 3