c ++中重载运算符的引用

时间:2014-04-08 18:22:31

标签: c++ reference overloading

我是c ++的新手,最近我试图理解重载函数。我对运算符重载中的引用有疑问。我得到了CBoys&是对类CBoys的引用,但我没有看到跟随5运算符=的重载的区别。

class CBoys{
//operator=(const CBoys&);
//operator=(const CBoys);
}
// CBoys& operator=(const CBoys&);
// CBoys operator=(const CBoys&);
// CBoys& operator=(const CBoys);

寻求帮助

1 个答案:

答案 0 :(得分:2)

嗯,对于初学者来说,

operator = (const CBoys&);

operator = (const CBoys);

无效。当你重载转换运算符时,唯一省略返回类型(运算符就像函数)的时候。 e.g。

operator bool();

在您的类型中定义时,将创建一个隐式将您的类型转换为bools的方法。

至于其余的,它们都根据它们的返回类型和它们所参数的参数而不同。第一个,CBoys& operator=(const CBoys&);接受对常量CBoys的引用并返回对CBoys的引用。第二个按值返回CBoys。第三个,虽然很好,但会复制你传入它的CBoys(右边的物体。)

长话短说,操作符重载的参数的常量和引用意味着它们在常规函数声明中的作用相同。

实现复制赋值运算符重载通常非常简单:

class CBoys {
    // stuff
public:
    CBoys& operator = (const CBoys& rhs) {
        CBoys temp(rhs); // make a copy.
        using std::swap;
        swap(*this, temp); // and swap the old *this with the new object.
        return *this; // return the object by-reference.
    }
};

这允许我们以直接的方式使用赋值运算符而没有任何意外,因为它的行为类似于内置类型的赋值运算符。有关复制赋值运算符的更多信息,请参见此处:http://en.cppreference.com/w/cpp/language/as_operator

我希望这有助于您理解。