C++Note 多态 案例 电脑组装

案例描述:

电脑组成部件为:CPU  显卡  内存条

将每个零件封装出抽象基类,并且提供不同的厂商生产不同零件,例如 Intel厂商和Lenovo厂商

创建电脑类提供让电脑工作的函数,并且调用每个零件工作的接口

测试时组装三台不同的电脑进行工作

复制代码
  1 #include <iostream>
  2 using namespace std;
  3 //电脑组装 需求分析
  4 class CPU
  5 {
  6 public:
  7     virtual void calculate() = 0;
  8 };
  9 class VideoCard
 10 {
 11 public:
 12     virtual void display() = 0;
 13 };
 14 class Memory
 15 {
 16 public:
 17     virtual void storage() = 0;
 18 };
 19 class Computer
 20 {
 21 public:
 22     Computer(CPU* cpu,VideoCard* vc,Memory* mem)
 23     {
 24         m_Cpu = cpu;
 25         m_Vc = vc;
 26         m_Mem = mem;
 27     }
 28     //提供工作函数
 29     void work()
 30     {
 31         m_Cpu->calculate();
 32         m_Vc->display();
 33         m_Mem->storage();
 34     }
 35     //提供析构函数 释放3个电脑零件
 36     ~Computer()
 37     {
 38         if (m_Cpu != NULL)
 39         {
 40             delete m_Cpu;
 41             m_Cpu = NULL;
 42         }
 43         if (m_Vc != NULL)
 44         {
 45             delete m_Vc;
 46             m_Vc = NULL;
 47         }
 48         if (m_Mem != NULL)
 49         {
 50             delete m_Mem;
 51             m_Mem = NULL;
 52         }
 53     }
 54 private:
 55     CPU* m_Cpu;//cpu零件指针
 56     VideoCard* m_Vc;//显卡指针
 57     Memory* m_Mem;//内存指针
 58 };
 59 //Intel厂商
 60 class IntelCPU :public CPU
 61 {
 62 public:
 63     virtual void calculate()
 64     {
 65         cout << "Intel的CPU计算了" << endl;
 66     }
 67 };
 68 class IntelVideoCard :public VideoCard
 69 {
 70 public:
 71     virtual void display()
 72     {
 73         cout << "Intel的显卡" << endl;
 74     }
 75 };
 76 class IntelMemory :public Memory
 77 {
 78 public:
 79     virtual void storage()
 80     {
 81         cout << "Intel的存储器" << endl;
 82     }
 83 };
 84 //Lenovo
 85 class LenovoCPU :public CPU
 86 {
 87 public:
 88     virtual void calculate()
 89     {
 90         cout << "Lenovo的CPU计算了" << endl;
 91     }
 92 };
 93 class LenovoVideoCard :public VideoCard
 94 {
 95 public:
 96     virtual void display()
 97     {
 98         cout << "Lenovo的显卡" << endl;
 99     }
100 };
101 class LenovoMemory :public Memory
102 {
103 public:
104     virtual void storage()
105     {
106         cout << "Lenovo的存储器" << endl;
107     }
108 };
109 void test() 
110 {
111     //第一台电脑零件
112     CPU* intelCpu = new IntelCPU;
113     VideoCard* intelCard = new IntelVideoCard;
114     Memory* intelMem = new IntelMemory;
115     //创建第一台电脑
116     Computer* computer1 = new Computer(intelCpu, intelCard, intelMem);
117     computer1->work();
118     delete computer1;
119     //堆区开辟的数据,要记得释放 可以在此位置对每个数据进行delete释放
120     //也可以在Computer的析构函数中进行释放****
121     cout << "------------------" << endl;
122     //创建第二台电脑
123     Computer* computer2 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);
124     computer2->work();
125     delete computer2;
126 }
127 int main()
128 {
129     test();
130     system("pause");
131     return 0;
132 }
复制代码

使用多态开发更加灵活,但是要记得堆区数据的开辟和释放

posted on   廿陆  阅读(10)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示