了解重载插入/提取操作符的语法(和操作员放置)

时间:2016-07-15 19:14:11

标签: c++ operator-overloading

自从我上一次编程课程(早在春季)已经过了几个月,我正在尝试在重返课堂之前重做一个班级的操作员。我从未完全理解的一件事是放置&函数名中的运算符。例如:

ostream & operator << (ostream & Out, const Measurement & X)

第一个&amp;看起来有点奇怪,因为我们通常将引用运算符放在我们想要成为引用的对象的前面,但第一个放在operator <<之前。这里有operator <<个对象吗?

我道歉,我们的教授从未解释过这种语法,只是告诉我们不要质疑它,我不喜欢它。我想完全理解语法。

编辑:我已经在下面提供了完整的功能。

ostream & operator << (ostream & Out, const Measurement & X)
{
    Out << "Inches : " << X.Inches;
    Out << "\nFeet   : " << X.Feet;
    Out << "\nMiles  : " << X.Miles;
    Out << "\n";

    return Out;
}

2 个答案:

答案 0 :(得分:1)

您感到困惑,因为符号&在不同的背景下意味着不同:

int i, j;
int* ptr = &i;  // & is used with a variable, and it is operator "address-of"
int r = i & j;  // & is used with 2 variables and it is operator "bitwise-and"
int& ref = i;   // & is used with a type, not variable and it is not an operator anymore, 
                // it is type modifier, which says type is now not `int`
                // but reference to `int`

所以在这段代码中:

ostream& operator << ( ostream& Out, const Measurement& X);

&ostreamMeasurement类型一起使用,并将这些类型修改为引用

答案 1 :(得分:0)

  

是运营商&lt;&lt;这里有一个对象?

没有。您可能会混淆语法中的某些内容。 &实际上属于std::ostream类型,表示从函数返回引用。

返回类型中的引用实际上表示将传递第一个参数引用,以允许链接对该运算符重载的调用。实现应如下所示:

ostream & operator << (ostream & Out, const Measurement & X) {
   Out << X.x << " " << X.y;
   return Out; // <<<<<<<<< This is essential!
}

因此,您可以调用链式操作,如

Measurment a;
// Do whatever with a
std::cout << a << std::endl;
相关问题