我正在读一本C ++书。 该程序试图制作一个对象矢量。 这是我不理解的部分
class X {
public:
X();
X(int m) {
temp = x;
}
int temp;
X &operator =(int z) {
temp = z;
return *this;
}
private :
// Some functions here
}
以上行是什么意思? 这是某种超载吗? 怎么样?
答案 0 :(得分:6)
我将假设你有一个拼写错误,该行实际上是:
X &operator =(int z) {
&
表示返回类型是引用;你应该把它读作函数operator =
,它返回X &
的类型。
答案 1 :(得分:4)
如果稍微改变间距,则含义可能会更清晰:
X& operator= (int z)
这是赋值运算符operator=
的重载,它接受int
参数,并返回对class X
的引用。
您可以使用它为对象分配整数值:
X x;
x = 42; // calls the overloaded operator
返回值允许您链接分配:
X x1,x2;
x1 = x2 = 42; // equivalent to `x2 = 42; x1 = x2;`
(x1 = x2) = 42; // equivalent to `x1 = x2; x1 = 42;`
答案 2 :(得分:1)
可能你的代码应该是这样的:
class X {
public:
int temp;
private :
//Some functions here
X &operator =(int z)
{
temp = z;
return *this ;
}
};
而不是你处理operator=
,而不是&operator
您的operator =
会返回对其应用的对象的引用。
答案 3 :(得分:1)
这意味着:C * 和C ++允许您链接这样的分配
((x = 4) = 3) = 2;
结果是x
将具有值2:x
首先设置为4,然后设置为3,然后设置为2(看起来不是很有用,但这种变化可以做出精彩的速记表达)。为此,需要在下面进行以下操作:
x = 4;
X& x2 = x; // reference to x, so that it can be modified without explicitly writing x
x2 = 3; // since x2 is just an alias, the variable that's actually changed is x
X& x3 = x2; // again, x2 just refers to x, so now x3 also does
x3 = 2; // yet again, modifies x
*在C中,它当然不适用于引用,但结果是相同的。
答案 4 :(得分:0)
它是X& operator= (int z)
我认为,也就是说=运算符的重载,它接受一个int并返回对X的引用。
答案 5 :(得分:0)
这是赋值运算符的定义:它看起来可能更像这样(外联定义):
X & X::operator=(int z)
{
temp = z;
return *this;
}
它允许你写这样的东西:
X a, b, c(10);
a = b = c;
每个赋值子表达式的值是对受让人的引用。
当然,运算符需要在类定义中声明:
class X
{
public:
X & operator=(int);
// ...
};