1.1 what
operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将operator和运算符(如operator=)视为一个函数名。
使用operator重载运算符,是C++扩展运算符功能的方法。使用operator扩展运算符功能的原因如下:
- 使重载后的运算符的使用方法与重载前一致
- 扩展运算符的功能只能通过函数的方式实现(实际上,C++中各种“功能”都是由函数实现的)
1.2 why
对于C++提供的所有操作符,通常只支持对于基本数据类型和标准库中提供的类的操作,而对于用户自己定义的类,如果想要通过该操作符实现一些基本操作(比如比较大小,判断是否相等),就需要用户自己来定义关于这个操作符的具体实现了。
比如,我们要设计一个名为“person”的类,现在要判断person类的两个对象p1和p2是否一样大,我们设计的比较规则是按照其年龄来比较,那么,在设计person类的时候,就可以通过对操作符“==”进行重载,来使用操作符“==”对对象p1和p2进行比较了(根据前面的分析,实际上比较的内容应该是person类中的数据成员“age”)。
我们上面说的对操作符“==”进行重载,说是“重载”,是由于编译器在实现操作符“==”功能的时候,已经为我们提供了这个操作符对于一些基本数据类型的操作支持,只不过由于现在该操作符所操作的内容变成了我们自定义的数据类型(如class),而默认情况下,该操作符是不能对我们自定义的class类型进行操作的,所以,就需要我们通过重载该操作符,给出该操作符操作我们自定义的class类型的方法,从而达到使用该操作符对我们自定义的class类型进行运算的目的。
1.3 how
实现一个操作符重载的方式通常分为两种情况:
- 将操作符重载实现为类的成员函数;
- 操作符重载实现为非类的成员函数(即全局函数)。
1.4 operator 与&operator
之前一直搞不懂operator 与&operator的区别。
简单来说就是operator 返回的是这个值,而&operator返回的是这个的地址(引用)。
主要的区别于用处就在于这个运算符的连用性,如果需要连用的话必须使用引用。
返回引用是为了能够连续赋值 如(a=b)=c,如果不返回引用的话像楼上说的那样,*this是当做临时变内量返回的容,C++为了保证临时变量从产生到返回不被修改,从而把临时变量定义为const,因而(a=b)=c的话,a=b为一个const,c是不能赋值给他的。
_a_info_ &operator=(const _a_info_ &o) //返回对象的引用,为了连续赋值?
{
if (&o == this) {
return *this;
}
a= o.a;
b= o.b;
c= o.c;
return *this;
}
} AInfo;