#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;
}
标签:厂商,组装,virtual,CPU,案例,2.8,抽象,零件,class
From: https://www.cnblogs.com/H43724334/p/18084013