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;
}
``
posted @   蓝色的海嗷  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示