在继承 class c++ 中重载 >>

Overload >> in inherited class c++

我在继承的 class 中重载了运算符 <<,它工作正常,但是当我尝试重载运算符 >> 时,它显示了很多错误。 我的错误是什么?

class Base{
private:
    virtual std::ostream& print(std::ostream&) const = 0;
    virtual std::istream& read(std::istream&);
protected:
    //atributes
public:
    //other functions
    friend std::ostream& operator << (std::ostream& os, const Base& b) {
        return b.print(os);
    }
    friend std::istream& operator >> (std::istream& is, Base& bb) {
        return bb.read(is);
    }
};

class Inherited: public Base{
private:
    //atributes
    std::ostream& print(std::ostream& os) const {
        //things I want to print
    }
    std::istream& read(std::istream& is){
        //things I want to read
        return is;
    }
public:
    //other functions
};

将 istream 定义为纯虚拟 (virtual...const = 0;) 也不起作用。

您没有在 Base 中声明 read 是纯 virtual

virtual std::istream& read(std::istream&);

通过上述声明,compiler/linker 期望在基 class 中实现函数。要解决此问题,请将函数设为 Base.

的纯 virtual 函数
virtual std::istream& read(std::istream&) = 0;

PS 请注意,它不是 const 成员函数。