基类中的输出运算符过载

Overloaded output operator in base class

本文关键字:运算符 输出 基类      更新时间:2023-10-16

我有许多表示各种计算机组件的类,每个类都有一个重载的<<运算符,声明如下:

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;
}