鱼C论坛

 找回密码
 立即注册
查看: 783|回复: 1

[已解决]多态简单运用,void函数里,Computer* computer1 = new Computer(..)

[复制链接]
发表于 2021-12-5 21:34:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
报错显示 没有与参数列表匹配的构造函数

  1. //************************多态案例三 电脑组装
  2. #include <stdio.h>
  3. #include<iostream>
  4. #include<cstring>
  5. #include<cstdio>
  6. #include<string>
  7. using namespace std;

  8. class AbstractCpu
  9. {
  10. public:
  11.         virtual void calculate() = 0;
  12. };

  13. class AbstractVidocard
  14. {
  15. public:
  16.         virtual void display() = 0;
  17. };

  18. class AbstractMerory
  19. {
  20. public:
  21.         virtual void storage() = 0;
  22. };

  23. class Computer
  24. {
  25. public:
  26.         Computer(AbstractCpu* cpu, AbstractMerory* memory, AbstractVidocard* vidocard)
  27.         {
  28.                 m_cpu = cpu;
  29.                 m_merory = memory;
  30.                 m_vidocard = vidocard;
  31.         }

  32.         //提供工作的函数
  33.         void work()
  34.         {
  35.                 m_cpu->calculate();
  36.                 m_merory->storage();
  37.                 m_vidocard->display();
  38.         }

  39. private:
  40.         AbstractCpu* m_cpu;
  41.         AbstractMerory* m_merory;
  42.         AbstractVidocard* m_vidocard;
  43. };

  44. //具体化厂商
  45. //厂商1  Intel
  46. class IntelCUP :public AbstractCpu
  47. {
  48. public:
  49.         virtual void calculate()
  50.         {
  51.                 cout << " Intel Cpu begin to work " << endl;
  52.         }
  53. };
  54. class IntelvedioCard :public AbstractVidocard
  55. {
  56. public:
  57.         virtual void display()
  58.         {
  59.                 cout << " Intel vedioCard begin to work " << endl;
  60.         }
  61. };
  62. class IntelMemory :public AbstractMerory
  63. {
  64. public:
  65.         virtual void storage()
  66.         {
  67.                 cout << " Intel storage begin to work " << endl;
  68.         }
  69. };


  70. //厂商2  联想
  71. class LevenoCUP :public AbstractCpu
  72. {
  73. public:
  74.         virtual void calculate()
  75.         {
  76.                 cout << " Leveno Cpu begin to work " << endl;
  77.         }
  78. };
  79. class LevenovedioCard :public AbstractVidocard
  80. {
  81. public:
  82.         virtual void display()
  83.         {
  84.                 cout << " Leveno vedioCard begin to work " << endl;
  85.         }
  86. };
  87. class LevenoMemory :public AbstractMerory
  88. {
  89. public:
  90.         virtual void storage()
  91.         {
  92.                 cout << " Leveno storage begin to work " << endl;
  93.         }
  94. };

  95. void test()
  96. {
  97.         //电脑零件
  98.         AbstractCpu* Intelc = new IntelCUP; //父类指针对象指向子类,多态的运用
  99.         AbstractVidocard* Intelv = new IntelvedioCard;
  100.         AbstractMerory* IntelM = new IntelMemory;

  101.         //创建第一台电脑
  102.         Computer* computer1 = new Computer(Intelc,Intelv,IntelM);
  103.         computer1->work();
  104.         delete computer1;
  105. }

  106. int main()
  107. {
  108.         test();
  109.         return 0;
  110. }
复制代码
最佳答案
2021-12-5 21:53:32
  1. //************************多态案例三 电脑组装
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <stdio.h>
  6. #include <string>

  7. using namespace std;

  8. class AbstractCpu {
  9.   public:
  10.     virtual void calculate() = 0;
  11.     virtual ~AbstractCpu() {}
  12. };

  13. class AbstractVidocard {
  14.   public:
  15.     virtual void display() = 0;
  16.     virtual ~AbstractVidocard() {}
  17. };

  18. class AbstractMerory {
  19.   public:
  20.     virtual void storage() = 0;
  21.     virtual ~AbstractMerory() {}
  22. };

  23. class Computer {
  24.   public:
  25.     Computer(AbstractCpu *cpu, AbstractMerory *memory,
  26.              AbstractVidocard *vidocard) {
  27.         m_cpu = cpu;
  28.         m_merory = memory;
  29.         m_vidocard = vidocard;
  30.     }

  31.     //提供工作的函数
  32.     void work() {
  33.         m_cpu->calculate();
  34.         m_merory->storage();
  35.         m_vidocard->display();
  36.     }

  37.   private:
  38.     AbstractCpu *m_cpu;
  39.     AbstractMerory *m_merory;
  40.     AbstractVidocard *m_vidocard;
  41. };

  42. //具体化厂商
  43. //厂商1  Intel
  44. class IntelCUP : public AbstractCpu {
  45.   public:
  46.     virtual void calculate() { cout << " Intel Cpu begin to work " << endl; }
  47. };

  48. class IntelvedioCard : public AbstractVidocard {
  49.   public:
  50.     virtual void display() {
  51.         cout << " Intel vedioCard begin to work " << endl;
  52.     }
  53. };

  54. class IntelMemory : public AbstractMerory {
  55.   public:
  56.     virtual void storage() { cout << " Intel storage begin to work " << endl; }
  57. };

  58. //厂商2  联想
  59. class LevenoCUP : public AbstractCpu {
  60.   public:
  61.     virtual void calculate() { cout << " Leveno Cpu begin to work " << endl; }
  62. };

  63. class LevenovedioCard : public AbstractVidocard {
  64.   public:
  65.     virtual void display() {
  66.         cout << " Leveno vedioCard begin to work " << endl;
  67.     }
  68. };

  69. class LevenoMemory : public AbstractMerory {
  70.   public:
  71.     virtual void storage() { cout << " Leveno storage begin to work " << endl; }
  72. };

  73. void test() {
  74.     //电脑零件
  75.     AbstractCpu *Intelc = new IntelCUP; //父类指针对象指向子类,多态的运用
  76.     AbstractVidocard *Intelv = new IntelvedioCard;
  77.     AbstractMerory *IntelM = new IntelMemory;

  78.     //创建第一台电脑
  79.     //Computer *computer1 = new Computer(Intelc, Intelv, IntelM);
  80.     Computer *computer1 = new Computer(Intelc, IntelM, Intelv);
  81.     computer1->work();
  82.     delete computer1;
  83.     delete Intelc;
  84.     delete Intelv;
  85.     delete IntelM;
  86. }

  87. int main() {
  88.     test();
  89.     return 0;
  90. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-5 21:53:32 | 显示全部楼层    本楼为最佳答案   
  1. //************************多态案例三 电脑组装
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <iostream>
  5. #include <stdio.h>
  6. #include <string>

  7. using namespace std;

  8. class AbstractCpu {
  9.   public:
  10.     virtual void calculate() = 0;
  11.     virtual ~AbstractCpu() {}
  12. };

  13. class AbstractVidocard {
  14.   public:
  15.     virtual void display() = 0;
  16.     virtual ~AbstractVidocard() {}
  17. };

  18. class AbstractMerory {
  19.   public:
  20.     virtual void storage() = 0;
  21.     virtual ~AbstractMerory() {}
  22. };

  23. class Computer {
  24.   public:
  25.     Computer(AbstractCpu *cpu, AbstractMerory *memory,
  26.              AbstractVidocard *vidocard) {
  27.         m_cpu = cpu;
  28.         m_merory = memory;
  29.         m_vidocard = vidocard;
  30.     }

  31.     //提供工作的函数
  32.     void work() {
  33.         m_cpu->calculate();
  34.         m_merory->storage();
  35.         m_vidocard->display();
  36.     }

  37.   private:
  38.     AbstractCpu *m_cpu;
  39.     AbstractMerory *m_merory;
  40.     AbstractVidocard *m_vidocard;
  41. };

  42. //具体化厂商
  43. //厂商1  Intel
  44. class IntelCUP : public AbstractCpu {
  45.   public:
  46.     virtual void calculate() { cout << " Intel Cpu begin to work " << endl; }
  47. };

  48. class IntelvedioCard : public AbstractVidocard {
  49.   public:
  50.     virtual void display() {
  51.         cout << " Intel vedioCard begin to work " << endl;
  52.     }
  53. };

  54. class IntelMemory : public AbstractMerory {
  55.   public:
  56.     virtual void storage() { cout << " Intel storage begin to work " << endl; }
  57. };

  58. //厂商2  联想
  59. class LevenoCUP : public AbstractCpu {
  60.   public:
  61.     virtual void calculate() { cout << " Leveno Cpu begin to work " << endl; }
  62. };

  63. class LevenovedioCard : public AbstractVidocard {
  64.   public:
  65.     virtual void display() {
  66.         cout << " Leveno vedioCard begin to work " << endl;
  67.     }
  68. };

  69. class LevenoMemory : public AbstractMerory {
  70.   public:
  71.     virtual void storage() { cout << " Leveno storage begin to work " << endl; }
  72. };

  73. void test() {
  74.     //电脑零件
  75.     AbstractCpu *Intelc = new IntelCUP; //父类指针对象指向子类,多态的运用
  76.     AbstractVidocard *Intelv = new IntelvedioCard;
  77.     AbstractMerory *IntelM = new IntelMemory;

  78.     //创建第一台电脑
  79.     //Computer *computer1 = new Computer(Intelc, Intelv, IntelM);
  80.     Computer *computer1 = new Computer(Intelc, IntelM, Intelv);
  81.     computer1->work();
  82.     delete computer1;
  83.     delete Intelc;
  84.     delete Intelv;
  85.     delete IntelM;
  86. }

  87. int main() {
  88.     test();
  89.     return 0;
  90. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 06:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表