c++ 重写数组类的>>运算符

c++ override the >> operator for Array Class

本文关键字:gt 运算符 重写 数组 c++      更新时间:2023-10-16

我正在尝试覆盖我自己的数组类的>>运算符:

std::istream& operator>>(std::istream& input, Array& array) {
for (int i = 0; i < array.size; i++)
    input >> array[i];
return input;
}

但是我变成了以下错误:

std::istream& Array::operator>>(std::istream&, const Array&)' 必须只接受一个参数

我看到的所有示例都是像它一样实现的。我不知道,为什么编译器想要一个参数?我该怎么办?

如果 operator>> 是该类的成员,它将对 Array 对象进行操作,并采用您为其提供的参数:

Array a;
a >> whatever;

你似乎想要一个istream写入它,这意味着它不是成员,所以要么将其移动到类之外,要么将其声明为 friend(这实际上使其成为非成员):

class Array
{
//.........
friend std::istream& operator>>(std::istream& input, Array& array) {
   for (int i = 0; i < array.size; i++)
      input >> array[i];
   return input;
}
};

在类内部定义时,二进制运算符函数应该只有一个参数(因为左侧参数隐式*this)。您必须将提取器定义为自由函数,这可以通过在类外部定义它来实现。此外,如果提取器需要访问私有变量,则可以将其定义/声明为类中的friend