多态案例三-电脑组装
案例描述:
电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)
将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商
创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口
测试时组装三台不同的电脑进行工作
示例:
#include<iostream>
usingnamespacestd;
//抽象CPU类
classCPU
{
public:
//抽象的计算函数
virtualvoidcalculate() =0;
};
//抽象显卡类
classVideoCard
{
public:
//抽象的显示函数
virtualvoiddisplay() =0;
};
//抽象内存条类
classMemory
{
public:
//抽象的存储函数
virtualvoidstorage() =0;
};
//电脑类
classComputer
{
public:
Computer(CPU*cpu, VideoCard*vc, Memory*mem)
{
m_cpu=cpu;
m_vc=vc;
m_mem=mem;
}
//提供工作的函数
voidwork()
{
//让零件工作起来,调用接口
m_cpu->calculate();
m_vc->display();
m_mem->storage();
}
//提供析构函数 释放3个电脑零件
~Computer()
{
//释放CPU零件
if (m_cpu!=NULL)
{
deletem_cpu;
m_cpu=NULL;
}
//释放显卡零件
if (m_vc!=NULL)
{
deletem_vc;
m_vc=NULL;
}
//释放内存条零件
if (m_mem!=NULL)
{
deletem_mem;
m_mem=NULL;
}
}
private:
CPU*m_cpu; //CPU的零件指针
VideoCard*m_vc; //显卡零件指针
Memory*m_mem; //内存条零件指针
};
//具体厂商
//Intel厂商
classIntelCPU :publicCPU
{
public:
virtualvoidcalculate()
{
cout<<"Intel的CPU开始计算了!"<<endl;
}
};
classIntelVideoCard :publicVideoCard
{
public:
virtualvoiddisplay()
{
cout<<"Intel的显卡开始显示了!"<<endl;
}
};
classIntelMemory :publicMemory
{
public:
virtualvoidstorage()
{
cout<<"Intel的内存条开始存储了!"<<endl;
}
};
//Lenovo厂商
classLenovoCPU :publicCPU
{
public:
virtualvoidcalculate()
{
cout<<"Lenovo的CPU开始计算了!"<<endl;
}
};
classLenovoVideoCard :publicVideoCard
{
public:
virtualvoiddisplay()
{
cout<<"Lenovo的显卡开始显示了!"<<endl;
}
};
classLenovoMemory :publicMemory
{
public:
virtualvoidstorage()
{
cout<<"Lenovo的内存条开始存储了!"<<endl;
}
};
voidtest01()
{
//第一台电脑零件
CPU*intelCpu=newIntelCPU;
VideoCard*intelCard=newIntelVideoCard;
Memory*intelMem=newIntelMemory;
cout<<"第一台电脑开始工作:"<<endl;
//创建第一台电脑
Computer*computer1=newComputer(intelCpu, intelCard, intelMem);
computer1->work();
deletecomputer1;
cout<<"-----------------------"<<endl;
cout<<"第二台电脑开始工作:"<<endl;
//第二台电脑组装
Computer*computer2=newComputer(newLenovoCPU, newLenovoVideoCard, newLenovoMemory);;//new出来的指针直接传到参数里。
computer2->work();
deletecomputer2;
cout<<"-----------------------"<<endl;
cout<<"第三台电脑开始工作:"<<endl;
//第三台电脑组装
Computer*computer3=newComputer(newLenovoCPU, newIntelVideoCard, newLenovoMemory);;
computer3->work();
deletecomputer3;
}