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;

}


目录
相关文章
|
2天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
22 2
|
2天前
|
C++
C++命名空间学习应用案例
C++中的命名空间示例:通过`my_namespace`防止命名冲突,包含`print_message()`函数,在`main()`中调用时需加上命名空间前缀`my_namespace::`。
16 3
|
2天前
|
编译器 C++
C++语言预处理器学习应用案例
【4月更文挑战第8天】C++预处理器包括条件编译、宏定义和文件包含等功能。例如,条件编译用于根据平台选择不同代码实现,宏定义可简化常量和变量名,文件包含则用于整合多个源文件。示例中展示了如何使用`#ifdef`等指令进行条件编译,当`DEBUG`宏定义时,`PRINT_LOG`会打印调试信息,否则不执行。
16 1
|
2天前
|
C++
C++多态实现计算器
C++多态实现计算器
|
2天前
|
C++
【C++】从零开始认识多态(二)
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。 封装就是对将一些属性装载到一个类对象中,不受外界的影响,比如:洗衣机就是对洗衣服功能,甩干功能,漂洗功能等的封装,其功能不会受到外界的微波炉影响。 继承就是可以将类对象进行继承,派生类会继承基类的功能与属性,类似父与子的关系。比如水果和苹果,苹果就有水果的特性。
24 1
|
2天前
|
C++
【C++】从零开始认识多态(一)
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。 封装就是对将一些属性装载到一个类对象中,不受外界的影响,比如:洗衣机就是对洗衣服功能,甩干功能,漂洗功能等的封装,其功能不会受到外界的微波炉影响。 继承就是可以将类对象进行继承,派生类会继承基类的功能与属性,类似父与子的关系。比如水果和苹果,苹果就有水果的特性。
23 4
|
2天前
|
编译器 C++
c++的学习之路:22、多态(1)
c++的学习之路:22、多态(1)
21 0
c++的学习之路:22、多态(1)
|
2天前
|
C++ 编译器 存储
|
2天前
|
存储 C++
C++中的多态
C++中的多态
8 0
|
2天前
|
存储 编译器 C++
[C++基础]-多态
[C++基础]-多态