C++多态案例(三)-电脑组装

简介: 例描述:**电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储)将每个零件封装出抽象基类,并且提供不同的厂商生产不同的零件,例如Intel厂商和Lenovo厂商创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口测试时组装三台不同的电脑进行工作


多态案例三-电脑组装

案例描述:

电脑主要组成部件为 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;

}


目录
相关文章
|
7天前
|
JavaScript 前端开发 测试技术
一个google Test文件C++语言案例
这篇文章我们来介绍一下真正的C++语言如何用GTest来实现单元测试。
9 0
|
1月前
|
存储 编译器 C++
|
2月前
|
存储 编译器 C++
【C++】深度解剖多态(下)
【C++】深度解剖多态(下)
42 1
【C++】深度解剖多态(下)
|
2月前
|
存储 编译器 C++
|
1月前
|
存储 编译器 C++
C++多态实现的原理:深入探索与实战应用
【8月更文挑战第21天】在C++的浩瀚宇宙中,多态性(Polymorphism)无疑是一颗璀璨的星辰,它赋予了程序高度的灵活性和可扩展性。多态允许我们通过基类指针或引用来调用派生类的成员函数,而具体调用哪个函数则取决于指针或引用所指向的对象的实际类型。本文将深入探讨C++多态实现的原理,并结合工作学习中的实际案例,分享其技术干货。
38 0
|
2月前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
2月前
|
Java 编译器 C++
【C++】深度解剖多态(上)
【C++】深度解剖多态(上)
41 2
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
C++多态崩溃问题之在PyTorch中,如何定义一个简单的线性回归模型
C++多态崩溃问题之在PyTorch中,如何定义一个简单的线性回归模型
|
2月前
|
程序员 C++
【C++】揭开C++多态的神秘面纱
【C++】揭开C++多态的神秘面纱
|
3月前
|
C++ 容器
C++之评委打分案例(vector与deque容器练习)
C++之评委打分案例(vector与deque容器练习)