Я overloaded << opreator
так:перегруженного << оператора ostream, используемый в виртуальных функциях
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). Но я не могу понять, как написать это, чтобы иметь возможность скомпилировать его и получить правильные значения ...
Покажите нам класс «Компьютер». – 0x499602D2
В отличие от названия, я не вижу никаких виртуальных функций и только один «оператор <<' перегрузки. –
Ваш метод 'getInfo' ничего не возвращает. – 0x499602D2