案例描述:
电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)
将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商
创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
测试时组装三台不同的电脑进行工作
案例分析:
代码实现:
#include<iostream>
#include<string>
using namespace std;
/********************抽象出基类************************/
class CPU
{
public:
virtual void cpu() = 0;
};
class Video//显卡
{
public:
virtual void video() = 0;
};
class Rom//内存
{
public:
virtual void rom() = 0;
};
/*****************Intel的设备****************************/
class Intelcpu :public CPU
{
public:
virtual void cpu()
{
cout << "Intel 的CPU ";
}
};
class Intelvideo :public Video
{
public:
virtual void video()
{
cout << "Intel 的Video ";
}
};
class Intelrom :public Rom
{
public:
virtual void rom()
{
cout << "Intel 的Rom ";
}
};
/*****************DELL的设备****************************/
class DELLcpu :public CPU
{
public:
virtual void cpu()
{
cout << "DELL 的CPU ";
}
};
class DELLvideo :public Video
{
public:
virtual void video()
{
cout << "DELL 的Video ";
}
};
class DELLrom :public Rom
{
public:
virtual void rom()
{
cout << "DELL 的Rom ";
}
};
/**********************电脑类***********************/
class computer
{
public:
computer(CPU* cpu, Video* video, Rom* rom)//构造函数把三个指针传进来
{
m_cpu = cpu;
m_video = video;
m_rom = rom;
}
void work()
{
m_cpu->cpu(); cout << "开始工作了" << endl;
m_video->video(); cout << "开始工作了" << endl;
m_rom->rom(); cout << "开始工作了" << endl;
}
~computer()
{
if (m_cpu != NULL)
{
delete m_cpu;
}
if (m_video != NULL)
{
delete m_video;
}
if (m_rom != NULL)
{
delete m_rom;
}
cout << "电脑的析构函数" << endl;
}
private:
CPU* m_cpu;
Video* m_video;
Rom* m_rom;
};
void main()
{
cout << "--------------------创建Intel电脑------------------------" << endl;
//创建出Intel的零件
CPU* c = new Intelcpu;
Video* v = new Intelvideo;
Rom* r = new Intelrom;
//computer PC(c,v,r);//组装Intel的电脑
//PC.work(); //实例化的方式会在程序结束后自动执行析构函数,删除对象
computer* pc1 = new computer(c, v, r);//new的方式是程序员控制删除对象的时机的
pc1->work();
delete pc1;
cout << "--------------------创建DELL电脑---------------------" << endl;
//创建出DELL的零件
c = new DELLcpu;
v = new DELLvideo;
r = new DELLrom;
computer* pc2 = new computer(c, v, r);
pc2->work();
delete pc2;
cout << "---------------------创建杂牌电脑----------------------" << endl;
//攒出一台电脑,使用不同厂家的零件
//new一个对象
computer* pc3 = new computer(new Intelcpu, new DELLvideo, new Intelrom);//这种写法不用再去另创建指针了
pc3->work();
delete pc3;
}