案例描述:
电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)
将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商
创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
测试时组装三台不同的电脑进行工作
代码如下:
#include <iostream>
using namespace std;
#include <ctime>
#include <string>
//cpu抽象基类
class cpu
{
public:
virtual void jisuan()=0;
};
//显卡抽象基类
class xianka
{
public:
virtual void display()=0;
};
//内存条抽象基类
class memory
{
public:
virtual void store()=0;
};
class computer
{
public:
dowork(cpu *cpu1,xianka *xk,memory *m)
{
cpu1->jisuan();//test函数在调用该代码的时候是调用的子类的jisuan函数(多态:虚函数+重写)
xk->display();
m->store();
if(cpu1!=NULL)
{
delete cpu1;
cpu1=NULL;
}
if(xk!=NULL)
{
delete xk;
xk=NULL;
}
if(m!=NULL)
{
delete m;
m=NULL;
}
}
};
//具体厂商intel
class intelcpu:public cpu
{
public:
virtual void jisuan()//重写函数
{
cout<<"intel的cpu开始计算了"<<endl;
}
};
class intelxianka:public xianka
{
public:
virtual void display()
{
cout<<"intel的显卡开始显示了"<<endl;
}
};
class intelmemory:public memory
{
public:
virtual void store()
{
cout<<"intel的内存开始存储了"<<endl;
}
};
//具体厂商lenovo
class lenovocpu:public cpu
{
public:
virtual void jisuan()//重写函数
{
cout<<"lenovo的cpu开始计算了"<<endl;
}
};
class lenovoxianka:public xianka
{
public:
virtual void display()
{
cout<<"lenovo的显卡开始显示了"<<endl;
}
};
class lenovomemory:public memory
{
public:
virtual void store()
{
cout<<"lenovo的内存开始存储了"<<endl;
}
};
void test()
{
computer com;
cout<<"第一台电脑开始组装了"<<endl;
com.dowork(new intelcpu,new intelxianka,new intelmemory);
cout<<"----------------"<<endl;
cout<<"第二台电脑开始组装了"<<endl;
com.dowork(new lenovocpu,new intelxianka,new intelmemory);
cout<<"----------------"<<endl;
cout<<"第三台电脑开始组装了"<<endl;
com.dowork(new intelcpu,new lenovoxianka,new lenovomemory);
cout<<"----------------"<<endl;
}
int main() {
test();
system("pause");
return 0;
}
运行结果如下: