2.8 组装计算机案例分析
3月20号任务,对比示例代码,找到不足和错误,
更要注意思路问题!
#include<iostream> using namespace std; //案例描述 //电脑主要组成部件为CPU,显卡,内存条 //将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商提供cpu、nVidia厂商提供显卡、Samsung提供内存条 //创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口 //测试时组装三台不同的电脑进行工作 //1、先抽象出每个零件的类 class CPU { virtual void calculate() = 0; //抽象计算函数 }; class VideoCard { virtual void display() = 0; //抽象显示函数 纯虚函数 }; class Memory { virtual void storage() = 0; //抽象存储函数 }; //2、具体零件的厂商 //1.Intel厂商 生产cpu class IntelCpu : public CPU { public: IntelCpu() { cout << "采用的是Intel的CPU" << endl; } virtual void calculate() { cout << "Intel的CPU开始计算了" << endl; } //纯虚析构函数 virtual ~IntelCpu() = 0; }; IntelCpu::~IntelCpu() { cout << "IntelCpu 的纯虚析构函数调用!" << endl; } //2.Nvidia厂商,生产显卡 class Nvidia : public VideoCard { public: Nvidia() { cout << "采用的是Nvidia的显卡" << endl; } virtual void display() { cout << "Nvidia的GPU开始计算图形了" << endl; } virtual ~Nvidia() = 0; }; Nvidia::~Nvidia() { cout << "Nvidia 的纯虚析构函数调用!" << endl; } //3.Samsung厂商 生产内存条 class Samsung : public Memory { public: Samsung() { cout << "采用的是Sumsung的内存条" << endl; } virtual void storage() { cout << "Samsung的内存条开始存储数据了" << endl; } virtual ~Samsung() = 0; }; Samsung::~Samsung() { cout << "Samsung 的纯虚析构函数调用!" << endl; } //3、电脑类 用来组装电脑 继承于三大零件厂商 class Computer :public IntelCpu, public Nvidia, public Samsung { public: //构造函数 传入三个零件的 指针 Computer(string cpu, string gpu, string memory) { //在堆区创建一个属性,用一个指针来维护 m_cpu = new string(cpu); m_GPU = new string(gpu); m_memory = new string(memory); } //提供工作的函数 组装一台电脑 void assemble() { //调用每个零件工作的接口 calculate(); display(); storage(); } //析构函数 ~Computer() { //if (m_cpu != NULL && m_GPU != NULL && m_memory != NULL) if(m_cpu != NULL) { cout << "这是computer的析构函数调用" << endl; delete m_cpu; m_cpu = NULL; } if (m_GPU != NULL) { cout << "这是computer的析构函数调用" << endl; delete m_GPU; m_GPU = NULL; } if (m_memory != NULL) { cout << "这是computer的析构函数调用" << endl; delete m_memory; m_memory = NULL; } } public: string* m_cpu; //指针类型属性 string* m_GPU; string* m_memory; }; //测试函数 void test() { Computer* computer = new Computer("Intel", "Nvidia", "Sumsung"); cout << "电脑的名称叫computer" << endl; computer->assemble(); delete computer; } int main() { test(); return 0; }
1、抽象不同零件类,
抽象cpu类,显卡类,内存条类
都是纯虚函数
2、电脑类
1.设置三个私有的零件属性,
2.在构造函数中,用3个指针去接收3个零件对象,
3.提供一个工作的函数,让零件工作起来,调用接口
4.设置析构函数,释放堆区3个零件对象
3、具体厂商类
子类要重写父类中的纯虚函数
4、测试函数
新建3个零件对象,
新建1个电脑对象
组装电脑
释放电脑对象
更改后的代码:
#include<iostream> using namespace std; //1、先抽象出每个零件的类 class CPU { public: virtual void calculate() = 0; //抽象计算函数 }; class VideoCard { public: virtual void display() = 0; //抽象显示函数 纯虚函数 }; class Memory { public: virtual void storage() = 0; //抽象存储函数 }; //2、具体零件的厂商 //1.Intel厂商 生产cpu class IntelCpu : public CPU { public: virtual void calculate() { cout << "Intel的CPU开始计算了" << endl; } }; //2.Nvidia厂商,生产显卡 class Nvidia : public VideoCard { public: virtual void display() { cout << "Nvidia的GPU开始计算图形了" << endl; } }; //3.Samsung厂商 生产内存条 class Samsung : public Memory { public: virtual void storage() { cout << "Samsung的内存条开始存储数据了" << endl; } }; //3、电脑类 用来组装电脑 继承于三大零件厂商 class Computer { public: //构造函数 传入三个零件的 指针 Computer(CPU * cpu, VideoCard * gpu, Memory * memory) { //在堆区创建一个属性,用一个指针来维护 m_Cpu = cpu; m_Gpu = gpu; m_Memory = memory; } //提供工作的函数 组装一台电脑 void assemble() { //调用每个零件工作的接口 m_Cpu->calculate(); m_Gpu->display(); m_Memory->storage(); } //析构函数 ~Computer() { //if (m_cpu != NULL && m_GPU != NULL && m_memory != NULL) if (m_Cpu != NULL) { cout << "这是computer的析构函数调用" << endl; delete m_Cpu; m_Cpu = NULL; } if (m_Gpu != NULL) { cout << "这是computer的析构函数调用" << endl; delete m_Gpu; m_Gpu = NULL; } if (m_Memory != NULL) { cout << "这是computer的析构函数调用" << endl; delete m_Memory; m_Memory = NULL; } } private: //创建的是类型对象: CPU* m_Cpu; VideoCard* m_Gpu; Memory* m_Memory; }; //测试函数 void test() { CPU* intel = new IntelCpu; VideoCard* nvidia = new Nvidia; Memory* samsung = new Samsung; cout << "电脑开始组装" << endl; Computer* computer = new Computer(intel, nvidia, samsung); cout << "电脑的名称叫computer" << endl; computer->assemble(); delete computer; } int main() { test(); return 0; } ``
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下