C++ Primer 5e chapter 14.1

来源:互联网 发布:matlab编程题 编辑:程序博客网 时间:2024/05/29 19:46

1、除了函数调用重载运算符,其他重载不能含有默认参数;

2、如果运算符是成员函数,则参与运算的左侧对象默认绑定到this指针对象,所以这个时候形参列表要比真正的运算符参数少一个;

3、无法重载内置类型的运算符,比如 int operator+ (int, int);

4、绝大多数运算符可以重载,除了少数一些,比如::,.* ;

5、应该保证重载后的运算符具有原来的意思;

6、当面对重载函数是成员函数还是非成员函数的时候: 赋值,下标,调用都必须是成员函数,递增递减等改变对象状态的元算符要是成员函数;具有对称性的运算符可以转换任意一段的运算对象,如+ - * 关系运算符等等,应该是非成员函数;

7、输出运算符: ostream &operator<<(ostream &os, const A &a),不要换行,必须是非成员函数(因为返回值不是本对象);

8、输入运算符:istream &operator>>(istream &is, A &a),注意内部需要定义如果读取该对象,检查读入是否成功,失败要给出信息,要做防御使编程,或默认初始化;

9、算数运算符和关系运算符:都是非成员函数,通常使用+=实现+即可;

10、逻辑上,一旦定义==就定义!=,一个委托另一个实现即可;非成员函数

11、赋值运算符:无论是移动还是拷贝赋值,都是成员函数,另外,一般把符合运算符重载在类内;

12、下表运算符:成员函数,一般定义两个,返回常量对象和非常量对象;

13、递增和递减:成员函数,同时定义前置和后置版本,前置版本(返回递增后的引用),A& operator++ (),后置版本(返回递增前的引用),A& operator++ (int),这个int并没有实际作用,只是为了区别两个版本,后置可以调用前置来完成操作;

14、前置运算符实现的时候注意检查是否可以完成++或--,检查指针是否已经到了尾后或者第一个;

15、成员访问运算符(*和->): 成员函数,A& operator*() const ; A* operator->() constt;一般用一个调用另一个完成实现;


0 0
原创粉丝点击