基类中的输出运算符过载
Overloaded output operator in base class
我有许多表示各种计算机组件的类,每个类都有一个重载的<<
运算符,声明如下:
friend ostream& operator << (ostream& os, const MotherBoard& mb);
每个返回一个ostream对象,该对象具有描述该组件的唯一流,其中一些流由其他组件组成。我决定创建一个名为Component
的基类,以便生成一个唯一的id以及所有组件将公开派生的一些其他函数。当然,重载的<<
运算符不适用于指向Component
对象的指针。
我想知道我将如何实现一个纯虚拟函数,它将被每个派生类的<<
运算符覆盖,这样我就可以做这样的事情:
Component* mobo = new MotherBoard();
cout << *mobo << endl;
delete mobo;
还涉及:重载<lt;运算符和继承类
也许是这样的:
#include <iostream>
class Component
{
public:
// Constructor, destructor and other stuff
virtual std::ostream &output(std::ostream &os) const
{ os << "Generic componentn"; return os; }
};
class MotherBoard : public Component
{
public:
// Constructor, destructor and other stuff
virtual std::ostream &output(std::ostream &os) const
{ os << "Motherboardn"; return os; }
};
std::ostream &operator<<(std::ostream &os, const Component &component)
{
return component.output(os);
}
int main()
{
MotherBoard mb;
Component &component = mb;
std::cout << component;
}
相关文章:
- 尝试重载输出运算符时,我无法遍历对象向量
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 如何为流输出运算符提供重载<<模板'using'类型别名?
- 在C++中重载输入/输出运算符
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 如何调用继承的重载运算符<<并在派生类的输出中添加更多文本?
- 为什么带有逻辑和运算符以及增量运算符的 c++ 程序给出的输出与预期不同?
- 如何处理自定义输出运算符中的 iomanips?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- C 和 C++ 中运算符大小的不同输出
- 是否可以转换 c++ 运算符新输出?
- C++ - <<运算符重载,链表 - 地址而不是标准输出
- 如何输入和输出方括号运算符 []
- C++ 输出流运算符 <<() 中的字符何时加宽?
- 我使用箭头运算符打印出对象的变量值,并得到一些随机值作为输出
- 编译器将输出的流运算符<<解释为用于按位左移的二进制运算符<<
- 使用模板化运算符输出集合集合<<
- 重载运算符<<输出布尔值.为什么
- C++重载运算符<<输出地址
- 如何重载运算符<<输出模板内定义的向量?