菜鸟的提问:关于C++类的组合的疑问,我这串代码哪儿错了

#include
using namespace std;
class CPU
{
CPU(int c=1);
};
class RAM
{
RAM(int ram=2);
};
class CDROM
{
CDROM(int cdrom=3);
};
class Computer
{
public:
Computer(CPU c,RAM r,CDROM d);
~Computer();
void run()
{
cout<<"cpu为:"<<cpu<<" "<<"ram为:"<<ram<<" "<<"cdrom为:"<<cdrom<<endl;
cout<<"调用的是这个run函数"<<endl;
}
void stop()
{
cout<<"调用的是这个stop函数"<<endl;
}
private:
CPU cpu;
RAM ram;
CDROM cdrom;
};
Computer::Computer(CPU c,RAM r,CDROM d):cpu(c),ram(r),cdrom(d)
{
cout<<"调用的是构造函数"<<endl;
}
Computer::~Computer()
{
cout<<"调用的是该析构函数"<<endl;
}
int main()
{
Computer thing();
thing.run();
thing.stop();
return 0;
}

1个回答

如果问题得到解决,请点我回答左上角的采纳和向上的箭头,谢谢

#include <iostream>

using namespace std;

class CPU
{
private:
    int val;
public:
    CPU(int c = 1) { val = c; }
    friend ostream& operator << (ostream& output, CPU& c)
    {
        output << "CPU" << c.val;
        return output;
    }
};
class RAM
{
private:
    int val;
public:
    RAM(int ram = 2) { val = ram; }
    friend ostream& operator << (ostream& output, RAM& r)
    {
        output << "RAM" << r.val;
        return output;
    }
};
class CDROM
{
private:
    int val;
public:
    CDROM(int cdrom = 3) { val = cdrom; }
    friend ostream& operator << (ostream& output, CDROM& c)
    {
        output << "CDROM" << c.val;
        return output;
    }
};
class Computer
{
public:
    Computer(CPU c, RAM r, CDROM d);
    ~Computer();
    void run()
    {
        cout << "cpu为:" << cpu << " " << "ram为:" << ram << " " << "cdrom为:" << cdrom << endl;
        cout << "调用的是这个run函数" << endl;
    }
    void stop()
    {
        cout << "调用的是这个stop函数" << endl;
    }
private:
    CPU cpu;
    RAM ram;
    CDROM cdrom;
};
Computer::Computer(CPU c, RAM r, CDROM d) :cpu(c), ram(r), cdrom(d)
{
    cout << "调用的是构造函数" << endl;
}
Computer::~Computer()
{
    cout << "调用的是该析构函数" << endl;
}
int main()
{
    CPU c;
    RAM r;
    CDROM cd;
    Computer thing(c, r, cd);
    thing.run();
    thing.stop();
    return 0;
}
qq_44344388
C++初学者 好的,十分感谢
10 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_44344388: 不会。我测试过。可以运行,我没法重复回答,不然你重新开一个问题把你问题代码贴出来
10 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_44344388: 是的,除非重载<<
10 个月之前 回复
qq_44344388
C++初学者 您的意思是:cpu是一个对象,不是一个值,所以不能通过<<符号将它输出是吗
10 个月之前 回复
qq_44344388
C++初学者 回复caozhy: 即使去掉这三个,编译器依然会报错:“.stop”的左边必须有类/结构/联合,“.run”的左边必须有类/结构/联合
10 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复qq_44344388: 你 << cpu,而cpu是一个对象,这就必须重载流运算符。如果你看不懂这些代码,也不想写这些代码,为了编译通过,你需要把 << cpu << ram << cdrom这三个去掉
10 个月之前 回复
qq_44344388
C++初学者 感谢答复,但是说实话,作为一个初学C++的菜鸟,您解答中很多东西我都看不懂,如:output之类的语言我甚至还没有学过,但是还是希望您能指出我代码中的错误,希望您能指明我错在哪儿了
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!