0

我有overloaded << opreator这种方式:

ostream& operator<<(ostream&os, const Computer& c) {
     for (int i = 0; i != c.listOfComponents.size() - 1; i++) {
        os << c.listOfComponents[i].getInfo(os) << endl;    
    }
    return os;
}

listoOfComponents在哪里vector<Component>

我的Component班级和其中一个孩子班级在这里:

class Component {
public:

    Component() {
    };

    ~Component() {
    };

  virtual ostream &getInfo(ostream& os)const;
};

ostream &Component::getInfo(ostream& os)const {
    return os;
}

class CPU : public Component {
public:

    CCPU(int cores, int freq) {
        this->cores = cores;
        this->freq = freq;
    };

    ~CPU() {
    };

    virtual ostream &getInfo(ostream& os)const;

    int cores;
    int freq;
};

ostream &CPU::getInfo(ostream& os)const {
        os<<"CORES:"<<cores<<" FREQ:"<<freq<<endl;
 }

最后是Computer课程:

class Computer {
public:
    // constructor

    Computer(string name) {
        this->name = name;
    };
    // destructor

    ~Computer() {

    };


    // operator <<
    friend ostream& operator<<(ostream& os, const CComputer& c);

    CComputer & AddComponent(Component const & component) {
        this->listOfComponents.push_back(component);
        return *this;
    };

    CComputer & AddAddress(const string & address) {
        this->address = address;
        return *this;
    };

    string name;
    string address;
    vector<Component> listOfComponents;
};

但是,当我想通过cout<<os;它打印出来时,它只打印出地址(即0x6c180484)。但我不知道如何编写它才能编译它并获得正确的值......

4

3 回答 3

1

这个:

os << c.listOfComponents[i].getInfo(os) << endl;

应该:

c.listOfComponents[i].getInfo(os) << endl;

这当然是假设os返回std::ostream对象。


使用您拥有它的方式,您正在打印一个指针,该指针返回其地址(以十六进制表示)。

于 2013-04-23T22:18:40.670 回答
1

首先,为什么打印到流的方法称为get_info?调用它put_info()(具有相同的返回类型/参数)并像使用它一样使用它

c.listOfComponents.put_info(os) << endl;

不要忘记从put_info.

在你这样做之后,它仍然无法工作,因为vector<Component>精确地保存了 Components - 如果你推CPU入,它会被粗暴地截断为Component.

于 2013-04-23T22:20:25.740 回答
0

cout<<os但是,当我想通过;打印出来时 它只打印出地址(即 0x6c180484)。但我不知道如何编写它才能编译它并获得正确的值......

我猜你正在将你的对象的指针std::cout传递给,它被打印为它的地址(十六进制数)。如果您有指针,请确保在将其传递给流时取消引用它:

std::cout << *pointer;
于 2013-04-23T22:12:22.197 回答