#include
using namespace std;
class Value{
private:
int value;
public:
Value()
{
value = 0;
}
Value(int x)
{
value = x;
}
//此处的ostream&是指返回值类型是ostream的对象引用
friend ostream& operator<<(ostream &output,const Value &d)
{
output << d.value;
return output;
}
//此处不加const
friend istream& operator>>(istream &input,Value &d)
{
input >> d.value;
return input;
}
};
int main()
{
Value d1(5),d2(10),d3;
cin >> d3;
cout << d3 << endl;
return 0;
}针对上述的详细解释:
在C++中,ostream&表示对输出流的引用。通过将输出流作为引用传递给重载的输出运算符<<,可以使函数能够更高效地操作输出流对象,而不是创建一个新的副本。这样可以减少内存的使用和提高运行效率。
在重载输出流运算符时,可以使用const Value &d作为参数的原因是,输出操作符不会修改被输出的对象的值。因此,可以将参数声明为const引用,允许传递const Value类型的对象,以及非const Value类型的对象。
然而,重载输入流运算符时情况稍有不同。输入操作符的目的是将输入的数据存储到对象中,即修改对象。因此,参数必须是非常量引用Value &d,以确保可以直接对参数进行修改。
如果我们将输入流运算符的参数声明为const Value &d,那么我们无法对对象进行修改,也就无法通过输入运算符将输入的数据存储到对象中。这将导致输入操作无法成功完成。
因此,在重载输入流运算符时,我们需要使用非常量引用Value &d,以便能够在函数内部修改对象的值并将输入的数据存储到对象中。
小凡 小凡
392***216@qq.com
2年前 (2023-11-08)