鱼C论坛

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

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

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

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

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

x
报错显示 没有与参数列表匹配的构造函数
//************************多态案例三 电脑组装
#include <stdio.h>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string> 
using namespace std;

class AbstractCpu
{
public:
        virtual void calculate() = 0;
};

class AbstractVidocard
{
public:
        virtual void display() = 0;
};

class AbstractMerory
{
public:
        virtual void storage() = 0;
};

class Computer
{
public:
        Computer(AbstractCpu* cpu, AbstractMerory* memory, AbstractVidocard* vidocard)
        {
                m_cpu = cpu;
                m_merory = memory;
                m_vidocard = vidocard;
        }

        //提供工作的函数
        void work()
        {
                m_cpu->calculate();
                m_merory->storage();
                m_vidocard->display();
        }

private:
        AbstractCpu* m_cpu;
        AbstractMerory* m_merory;
        AbstractVidocard* m_vidocard;
};

//具体化厂商
//厂商1  Intel
class IntelCUP :public AbstractCpu
{
public:
        virtual void calculate()
        {
                cout << " Intel Cpu begin to work " << endl;
        }
};
class IntelvedioCard :public AbstractVidocard
{
public:
        virtual void display()
        {
                cout << " Intel vedioCard begin to work " << endl;
        }
};
class IntelMemory :public AbstractMerory
{
public:
        virtual void storage()
        {
                cout << " Intel storage begin to work " << endl;
        }
};


//厂商2  联想
class LevenoCUP :public AbstractCpu
{
public:
        virtual void calculate()
        {
                cout << " Leveno Cpu begin to work " << endl;
        }
};
class LevenovedioCard :public AbstractVidocard
{
public:
        virtual void display()
        {
                cout << " Leveno vedioCard begin to work " << endl;
        }
};
class LevenoMemory :public AbstractMerory
{
public:
        virtual void storage()
        {
                cout << " Leveno storage begin to work " << endl;
        }
};

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

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

int main()
{
        test();
        return 0;
}
最佳答案
2021-12-5 21:53:32
//************************多态案例三 电脑组装
#include <cstdio>
#include <cstring>
#include <iostream>
#include <stdio.h>
#include <string>

using namespace std;

class AbstractCpu {
  public:
    virtual void calculate() = 0;
    virtual ~AbstractCpu() {}
};

class AbstractVidocard {
  public:
    virtual void display() = 0;
    virtual ~AbstractVidocard() {}
};

class AbstractMerory {
  public:
    virtual void storage() = 0;
    virtual ~AbstractMerory() {}
};

class Computer {
  public:
    Computer(AbstractCpu *cpu, AbstractMerory *memory,
             AbstractVidocard *vidocard) {
        m_cpu = cpu;
        m_merory = memory;
        m_vidocard = vidocard;
    }

    //提供工作的函数
    void work() {
        m_cpu->calculate();
        m_merory->storage();
        m_vidocard->display();
    }

  private:
    AbstractCpu *m_cpu;
    AbstractMerory *m_merory;
    AbstractVidocard *m_vidocard;
};

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

class IntelvedioCard : public AbstractVidocard {
  public:
    virtual void display() {
        cout << " Intel vedioCard begin to work " << endl;
    }
};

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

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

class LevenovedioCard : public AbstractVidocard {
  public:
    virtual void display() {
        cout << " Leveno vedioCard begin to work " << endl;
    }
};

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

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

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

int main() {
    test();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

using namespace std;

class AbstractCpu {
  public:
    virtual void calculate() = 0;
    virtual ~AbstractCpu() {}
};

class AbstractVidocard {
  public:
    virtual void display() = 0;
    virtual ~AbstractVidocard() {}
};

class AbstractMerory {
  public:
    virtual void storage() = 0;
    virtual ~AbstractMerory() {}
};

class Computer {
  public:
    Computer(AbstractCpu *cpu, AbstractMerory *memory,
             AbstractVidocard *vidocard) {
        m_cpu = cpu;
        m_merory = memory;
        m_vidocard = vidocard;
    }

    //提供工作的函数
    void work() {
        m_cpu->calculate();
        m_merory->storage();
        m_vidocard->display();
    }

  private:
    AbstractCpu *m_cpu;
    AbstractMerory *m_merory;
    AbstractVidocard *m_vidocard;
};

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

class IntelvedioCard : public AbstractVidocard {
  public:
    virtual void display() {
        cout << " Intel vedioCard begin to work " << endl;
    }
};

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

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

class LevenovedioCard : public AbstractVidocard {
  public:
    virtual void display() {
        cout << " Leveno vedioCard begin to work " << endl;
    }
};

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

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

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

int main() {
    test();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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