我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)。
但我无法弄清楚,如何编写它以便能够编译它并获得正确的值......
答案 0 :(得分:1)
此:
os << c.listOfComponents[i].getInfo(os) << endl;
应该是:
c.listOfComponents[i].getInfo(os) << endl;
这当然是假设os
返回std::ostream
对象。
按照你的方式,你打印一个指针,它返回它的地址(十六进制)。
答案 1 :(得分:1)
首先,为什么打印到名为get_info
的流的方法?将其称为put_info()
(具有相同的返回类型/参数)并将其用作
c.listOfComponents.put_info(os) << endl;
不要忘记从put_info
返回信息流。
执行此操作后,它仍然无法正常工作,因为vector<Component>
精确地保留了组件 - 如果您推入CPU
,则会被残酷地截断为Component
。
答案 2 :(得分:0)
但是,当我想通过
cout<<os
将其打印出来时;它只打印出地址(即0x6c180484)。但我无法弄清楚,如何编写它以便能够编译它并获得正确的值......
我猜你正在将对象的指针传递给std::cout
,它将被打印为其地址(十六进制数)。如果你有一个指针,请确保在将它传递给流时取消引用它:
std::cout << *pointer;