您的位置:首页 > 编程语言 > C语言/C++

C++中的运算符重载

2015-12-22 10:20 232 查看
运算符重载给c++提供了很强大的功能,使得我们可以将一个类设计得跟内置类型差不多了。

但是运算符这种东西最大的问题就是,看起来直观,却常常隐匿了实际的函数调用过程,时常容易让人困惑。所以在google c++编码规范里面,建议直接用普通的成员

函数而不是重载运算符。

可以看下面的代码段:

class Array {
public:
int size() const;
float& operator[] (int index);
// ...
};
int main()
{
Array a;
for (int i = 0; i < a.size(); ++i)
a[i] = 7;    // This line invokes Array::operator[](int)
// ...
}


注释的那一行显得及其简洁,但实际涉及到两个函数调用operator[] 和operator=,关键是若是不看类Array的定义,你可能很难知道a[i]返回的是个什么东西:C++支持运算符重载!

还有就是赋值运算符,这是每个类所避不开的成员函数,即使不定义也会默认生成。所以一定要记住编译器默认生成的赋值运算符的函数原型(输入参数类型,返回类型):

class A
{
public:
A& operator=(const A&a);
A& operator=(A&& a);
}


其中第二个是c++11有了右值引用之后新加的。

总之,一个务必小心的原则是:每次看到运算符,把它展开成函数!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: