//多态的案例------电脑组装
//电脑主要组成部件:CPU、显卡、内存条
#include<iostream>
using namespace std;
//抽象CPU类
class CPU {
public:
//抽象CPU计算
virtual void calculate() = 0;
};
class VideoCard {
public:
//抽象显示函数
virtual void display() = 0;
};
class Memory {
public:
//抽象存储函数
virtual void storage() = 0;
};
class computer {
public:
computer(CPU *cpu,VideoCard* card,Memory *mem) {
m_cpu = cpu;
m_card = card;
m_mem = mem;
}
//提供工作的函数,调用接口
void work() {
m_cpu->calculate();
m_card->display();
m_mem->storage();
}
~computer() {
if (m_cpu != NULL) {
delete m_cpu;
m_cpu = NULL;
}
if (m_card != NULL) {
delete m_card;
m_card = NULL;
}
if (m_mem != NULL) {
delete m_mem;
m_mem = NULL;
}
}
private:
CPU* m_cpu;//CPU零件指针
VideoCard* m_card;//显卡零件指针
Memory* m_mem;//内存条零件指针
};
//具体厂商
//Inter
class InterCpu :public CPU {
virtual void calculate() {
cout << "Inter CPU 开始计算了" << endl;
}
};
class InterVideoCard :public VideoCard {
virtual void display() {
cout << "Inter VideoCard 开始显示了" << endl;
}
};
class InterMemory :public Memory {
virtual void storage() {
cout << "Inter Memory 开始存储了" << endl;
}
};
//lenovo
class LenovoCpu :public CPU {
virtual void calculate() {
cout << "Lenovo CPU 开始计算了" << endl;
}
};
class LenovoVideoCard :public VideoCard {
virtual void display() {
cout << "Lenovo VideoCard 开始显示了" << endl;
}
};
class LenovoMemory :public Memory {
virtual void storage() {
cout << "Lenovo Memory 开始存储了" << endl;
}
};
void test01()
{
CPU* intercpu = new InterCpu;
VideoCard* intercard = new InterVideoCard;
Memory* intermem = new InterMemory;
computer* com1 = new computer(intercpu, intercard, intermem);
com1->work();
delete com1;
cout << "-------------------------------------------------" << endl;
CPU* lenovocpu = new LenovoCpu;
VideoCard* lenovocard = new LenovoVideoCard;
Memory* lenovomem = new LenovoMemory;
computer *com2 = new computer(lenovocpu, lenovocard, lenovomem);
com2->work();
}
int main()
{
test01();
return 0;
}