C++中的运算符重载
2015-12-22 10:20
232 查看
运算符重载给c++提供了很强大的功能,使得我们可以将一个类设计得跟内置类型差不多了。
但是运算符这种东西最大的问题就是,看起来直观,却常常隐匿了实际的函数调用过程,时常容易让人困惑。所以在google c++编码规范里面,建议直接用普通的成员
函数而不是重载运算符。
可以看下面的代码段:
注释的那一行显得及其简洁,但实际涉及到两个函数调用operator[] 和operator=,关键是若是不看类Array的定义,你可能很难知道a[i]返回的是个什么东西:C++支持运算符重载!
还有就是赋值运算符,这是每个类所避不开的成员函数,即使不定义也会默认生成。所以一定要记住编译器默认生成的赋值运算符的函数原型(输入参数类型,返回类型):
其中第二个是c++11有了右值引用之后新加的。
总之,一个务必小心的原则是:每次看到运算符,把它展开成函数!
但是运算符这种东西最大的问题就是,看起来直观,却常常隐匿了实际的函数调用过程,时常容易让人困惑。所以在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有了右值引用之后新加的。
总之,一个务必小心的原则是:每次看到运算符,把它展开成函数!
相关文章推荐
- struct和class 在C/C++/C#
- C++中map、hash_map、unordered_map、unordered_set通俗辨析
- c语言项目感慨
- lintcode 判断一个单链表是否有环及环的链接点
- C++ 的全局构造与析构函数
- 【c/c++】printf函数
- c++异常处理机制
- C++处理异常技巧-try,catch,throw,finally
- Visual C++6.0 程序设计从入门到精通(二) - MFC应用程序的启动和运行机制
- 跨平台CMake的编写
- c++实现大数乘法
- 我的c语言总结
- c语言总结
- C/C++语言复习(一)
- c++异常处理机制示例及讲解
- 位反转的最佳算法(C语言实现)
- 洪恩软件之编程之道C/C++程序设计入门视频教程
- C语言:快速排序
- 【C++ STL应用与实现】23: 如何使用std::mem_fn (since C++11)
- c语言之基础-1