一、功能描述
二、代码实现
三、学习后记
一、功能描述
功能描述:
1.电脑主要组成:CPU,显卡,内存条;
2.将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件;
3.创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口;
4.测试时组织三台不同的电脑进行工作。
二、代码实现
//2021/7/18 21:20
//抽象不同零件类
class CPU
{
public:
//抽象的计算函数
virtual void calaculate() = 0;
};
class GPU
{
public:
//抽象的显示函数
virtual void display() = 0;
};
class Memory
{
public:
//抽象的存储函数
virtual void storage() = 0;
};
//电脑类
class Computer
{
public:
Computer(CPU *cpu, GPU *gpu, Memory * mem)
{
m_cpu = cpu;
m_gpu = gpu;
m_mem = mem;
}
//提供工作的函数
void work()
{
m_cpu->calaculate();
m_gpu->display();
m_mem->storage();
}
//提供析构函数,释放三个电脑零件
~Computer()
{
//释放CPU
if (m_cpu != NULL)
{
delete m_cpu;
m_cpu = NULL;
}
//释放GPU
if (m_cpu != NULL)
{
delete m_gpu;
m_gpu = NULL;
}
//释放Memory
if (m_mem != NULL)
{
delete m_mem;
m_mem = NULL;
}
}
private:
CPU *m_cpu; //CPU零件指针
GPU *m_gpu; //GPU零件指针
Memory *m_mem; //内存卡零件指针
};
//具体厂商
//1.Intel厂商
class IntelCPU :public CPU
{
public:
virtual void calaculate()
{
cout << "Intel的CPU开始计算了!" << endl;
}
};
class IntelGPU :public GPU
{
public:
virtual void display()
{
cout << "Intel的GPU开始显示了!" << endl;
}
};
class IntelMemory :public Memory
{
public:
virtual void storage()
{
cout << "Intel的内存卡开始存储了!" << endl;
}
};
//Lenovo厂商
class LenovoCPU :public CPU
{
public:
virtual void calaculate()
{
cout << "Lenovo的CPU开始计算了!" << endl;
}
};
class LenovoGPU :public GPU
{
public:
virtual void display()
{
cout << "Lenovo的GPU开始显示了!" << endl;
}
};
class LenovoMemory :public Memory
{
public:
virtual void storage()
{
cout << "Lenovo的内存卡开始存储了!" << endl;
}
};
void test1()
{
//第一台电脑零件
CPU *intelCpu = new IntelCPU;
GPU * intelGpu = new IntelGPU;
Memory * intelMem = new IntelMemory;
//创建第一台电脑
Computer *computer1 = new Computer(intelCpu, intelGpu, intelMem);
computer1->work();
delete computer1;
cout << "-----------------------------------------" << endl;
//第二台电脑组装
Computer *computer2 = new Computer(new LenovoCPU, new LenovoGPU, new LenovoMemory);
computer2->work();
delete computer2;
cout << "-----------------------------------------" << endl;
//第三台电脑组装
Computer *computer3 = new Computer(new IntelCPU, new LenovoGPU, new LenovoMemory);
computer3->work();
delete computer3;
}
int main()
{
test1();
//test2();
system("pause");
return 0;
}
三、学习后记
一些知识点总结:
1.虚析构或者纯虚析构就是用来解决通过父类指针释放子类对象;
2.如果子类中没有堆区数据,可以不写为虚析构或纯虚析构;
3.拥有纯虚析构函数的类也属于抽象类。
4.纯虚函数:只要有一个纯虚函数,这个类称为抽象类;
5.抽象类特点:
(1.无法实例化对象;
(2.抽象类的子类,必须要重写父类中的纯虚函数,否则也属于抽象类。
多态很重要也很使用,一定要好好掌握呀!