如何确保继承类实现友元函数(ostream)?

Gre*_*reg 3 c++ inheritance overriding std

我宁愿实现一个非友元函数并直接将该函数标记为虚拟。

但我现在的情况是,我想确保一组特定的类实现重载

friend std::ostream& operator << (std::ostream& os, MyClass& myClass);
Run Code Online (Sandbox Code Playgroud)

我发现没有其他方法可以将其直接链接到我的班级。(实施运算符的其他可能性是将其移到我的班级之外,没有朋友)

各位语法大佬,我有什么方法可以正确执行这个规则吗?(让孩子重写 << ostream 运算符)

编辑 - 以下线程的相关主题:

子类中重载的流插入运算符(<<)

基类和派生类的虚拟插入运算符重载

Sla*_*ica 7

您可以创建一个纯虚方法 - 这将需要继承类来重载它,然后使用友元输出运算符来调用它。例如:

class MyClass {
public:
    virtual ~MyClass();
    virtual void output( std::ostream &os ) const = 0;

    friend std::ostream& operator << (std::ostream& os, const MyClass& myClass)
    {
        myClass.output( os );
        return os;
    }
};
Run Code Online (Sandbox Code Playgroud)