&运算符在重载时意味着什么

时间:2012-02-06 19:39:15

标签: c++ class stl vector overloading

我正在读一本C ++书。 该程序试图制作一个对象矢量。 这是我不理解的部分

class X {
public:
    X();
    X(int m) {
        temp = x;
    }

    int temp;


    X &operator =(int z) {
        temp = z;
        return *this;
    }

private :
    //            Some functions here
}

以上行是什么意思? 这是某种超载吗? 怎么样?

6 个答案:

答案 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);
    // ...
};