一、运算符重载:
1.类是用户自定义的数据类型,使用运算符重载可以i实现如下逻辑:
(1)对象1 = 对象2+对象3,如描述复数的类,描述字符串的类。
(2)提高程序的可读性。
2.重载赋值运算符:
(1)如果一个类没有提供赋值运算函数,则默认提供一个。
(2)如果一个类提供了拷贝构造函数,那么也要提供一个重载的赋值运算函数。
3.重载运算符的规定:
(1)重载的运算符要保持原运算符的意义。
(2)只能对已有的运算符进行重载,不能增加新的运算符。
(3)重载的运算符不会改变原先的优先级和结合性。
(4)参数说明都是内部类型的时候,不能重载。例如:
int * operator +(int ,int *) 是错误的。
4.运算符重载的形式:
(1)成员函数:(常见)
(2)友元函数:(不太常见)
5.运算符重载的限制:(上面是可以被重载的运算符,下面是不可以被重载的运算符)
6.运算符重载作为成员函数:
7.作为成员的运算符比之作为非成员的运算符,在声明和定义时,形式上少了一个参数。(当前对象在运算符的左边,形参传进来的在运算符的右边)
8.C++规定: = , ()(函数访问运算符),[ ](下标运算符),->()
9.重载前增量和后增量的区别:(++ i和i++)
(1)使用前增量的时候,对对象(操作数)进行增量修改,然后在返回该对象。
(2)使用后增量的时候,必须在增量之前返回原有的对象值。
class increase { public: increase(int x):value(x){} increase&operator ++();// increase operator ++(int); private: } |
前后增量操作的意义,决定了其不同的返回方式。前增量运算符返回引用,后增量运算符返回对象。
后增量运算符中的参数int只是为了区别前增量与后增量,除此之外没有任何的作用。
10、++的非成员形式的重载:
friend increase &operator ++(increase &);//前增量 friend increase operator ++(increase & ,int);//后增量 increase & operator ++(increase & a) { a.value ++;//前增量 return a;//再返回原对象 } increase operator ++(increase & a ,int) { increase temp(a);//通过拷贝构造函数保存原有对象的值 a.value++;//原有对象增量修改 return temp;//返回原有对象值。 } |