自从我上一次编程课程(早在春季)已经过了几个月,我正在尝试在重返课堂之前重做一个班级的操作员。我从未完全理解的一件事是放置&函数名中的运算符。例如:
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;
}
答案 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);
&
与ostream
和Measurement
类型一起使用,并将这些类型修改为引用
答案 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;