Я прочитал некоторые подобные вопросы и ответы в формате SO, но на самом деле не понимаю ответы. Приносим извинения, если это дубликат.Перегрузка << оператор с полиморфизмом
Имейте базовый класс, как это.
class CParam
{
public:
virtual void PrintData(ostream &OutStream) = 0;
};
Теперь я наследовать от этого:
class CUInt32:public CParam
{
public:
void PrintData(ostream &OutStream);
}
void CUInt32::PrintData(ostream &OutStream)
{
// Write some data to OutStream Here
}
я перегрузить оператор < < для CUInt32 класса
inline ostream &operator<<(ostream &OutStream, CUInt32 &UInt32Obj)
{
UInt32Obj.PrintData(OutStream);
return (OutStream);
}
в междунар основной функции() Я делаю следующее:
int main()
{
CParam *cp = new CUInt32(ANALOG);
cout << *cp;// Error
return 0;
}
Я говорю об ошибке ошибка: нет совпадения для 'operator < <' in 'std :: cout < < * cp' |
Мои вопросы
- Можно ли использовать полиморфные указатели базового класса с соиЬ?
- Если да, то как мы могли это сделать?
Спасибо за ваше время!
Вместо перегрузки 'operator <<' для 'CUInt32' перегрузить его для' CParam'. – Casey
Не совсем уверен, как я мог это сделать, поскольку второй аргумент inline ostream & operator << (ostream & OutStream, CUInt32 и UInt32Obj) различен для каждого производного класса. – NeonGlow
Также (хотя это и не вызывает проблем здесь), полезно сделать ссылку на const: 'inline ostream & operator << (ostream & OutStream, const CParam & obj)' – biocomp