在继承 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
成员函数。
我在继承的 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
成员函数。