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 }
使用多态开发更加灵活,但是要记得堆区数据的开辟和释放
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)