当前位置:   article > 正文

c++学习记录 多态—案例2—电脑组装

c++学习记录 多态—案例2—电脑组装

  1. #include<iostream>
  2. using namespace std;
  3. //抽象不同的零件
  4. //抽象的cpu类
  5. class Cpu
  6. {
  7. public:
  8. //抽象的计算函数
  9. virtual void calculate() = 0;
  10. };
  11. //抽象的显卡类
  12. class VideoCard
  13. {
  14. public:
  15. //抽象的显示函数
  16. virtual void display() = 0;
  17. };
  18. //抽象的内存条类
  19. class Memory
  20. {
  21. public:
  22. //抽象的存储函数
  23. virtual void storage() = 0;
  24. };
  25. //电脑类
  26. class Computer
  27. {
  28. public:
  29. Computer(Cpu* cpu, VideoCard* vc, Memory* mem)
  30. {
  31. m_cpu = cpu;
  32. m_vc = vc;
  33. m_mem = mem;
  34. }
  35. //提供工作的函数
  36. void work()
  37. {
  38. //让零件工作起来,调用具体的接口
  39. m_cpu->calculate();
  40. m_vc->display();
  41. m_mem->storage();
  42. }
  43. //提供析构函数 释放3个电脑零件
  44. ~Computer()
  45. {
  46. //释放CPU零件
  47. if (m_cpu != NULL)
  48. {
  49. delete m_cpu;
  50. m_cpu = NULL;
  51. }
  52. //释放显卡零件
  53. if (m_vc != NULL)
  54. {
  55. delete m_vc;
  56. m_vc = NULL;
  57. }
  58. //释放内存条零件
  59. if (m_mem != NULL)
  60. {
  61. delete m_mem;
  62. m_mem = NULL;
  63. }
  64. }
  65. private:
  66. Cpu* m_cpu;//Cpu的零件指针
  67. VideoCard* m_vc;//显卡零件指针
  68. Memory* m_mem;//内存条零件指针
  69. };
  70. //具体厂商
  71. //Intel厂商
  72. class IntelCpu :public Cpu
  73. {
  74. public:
  75. virtual void calculate()
  76. {
  77. cout << "Intel的CPU开始计算了!" << endl;
  78. }
  79. };
  80. class IntelVideoCard :public VideoCard
  81. {
  82. public:
  83. virtual void display()
  84. {
  85. cout << "Intel的显卡开始显示了!" << endl;
  86. }
  87. };
  88. class IntelMemory :public Memory
  89. {
  90. public:
  91. virtual void storage()
  92. {
  93. cout << "Intel的内存条开始存储了!" << endl;
  94. }
  95. };
  96. //Lenovo厂商
  97. class LenovoCpu :public Cpu
  98. {
  99. public:
  100. virtual void calculate()
  101. {
  102. cout << "Lenovo的CPU开始计算了!" << endl;
  103. }
  104. };
  105. class LenovoVideoCard :public VideoCard
  106. {
  107. public:
  108. virtual void display()
  109. {
  110. cout << "Lenovo的显卡开始显示了!" << endl;
  111. }
  112. };
  113. class LenovoMemory :public Memory
  114. {
  115. public:
  116. virtual void storage()
  117. {
  118. cout << "Lenovo的内存条开始存储了!" << endl;
  119. }
  120. };
  121. void test01()
  122. {
  123. //第一台电脑零件
  124. Cpu* intelCpu = new IntelCpu;
  125. VideoCard* intelCard = new IntelVideoCard;
  126. Memory* intelMem = new IntelMemory;
  127. cout << "第一台电脑开始工作:" << endl;
  128. //创建第一台电脑
  129. Computer* computer1 = new Computer(intelCpu, intelCard, intelMem);
  130. computer1->work();
  131. delete computer1;
  132. cout << "------------------------" << endl;
  133. cout << "第二台电脑开始工作:" << endl;
  134. 第二台电脑组装
  135. //Cpu* lenovoCpu = new LenovoCpu;
  136. //VideoCard* lenovoCard = new LenovoVideoCard;
  137. //Memory* lenovoMem = new LenovoMemory;
  138. //创建第二台电脑
  139. Computer* computer2 = new Computer(new LenovoCpu, new LenovoVideoCard, new LenovoMemory);
  140. computer2->work();
  141. delete computer2;
  142. cout << "------------------------" << endl;
  143. cout << "第三台电脑开始工作:" << endl;
  144. 第三台电脑组装
  145. //Cpu* lenovoCpu = new LenovoCpu;
  146. //VideoCard* intelCard3 = new IntelVideoCard;
  147. //Memory* lenovoMem = new LenovoMemory;
  148. //创建第三台电脑
  149. Computer* computer3 = new Computer(new LenovoCpu, new IntelVideoCard, new LenovoMemory);
  150. computer3->work();
  151. delete computer3;
  152. }
  153. int main()
  154. {
  155. test01();
  156. system("pause");
  157. return 0;
  158. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/45826
推荐阅读
相关标签
  

闽ICP备14008679号