暑假C++复习14
为类设计操作符的时候,必须选择是将操作符设置为类成员还是普通非成员函数,在某些情况下,程序员没有选择,操作符必须是成员,在另一些情况下,有些经验原则可知道我们做出决定,下面是一些指导原则。有助于决定将操作符设置为类成员还是普通非成员函数。
(1)赋值(=)下标[]调用()和成员访问->等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。
(2)像赋值一样,复合赋值操作符通常应定义为类的成员。与赋值不同的是,不一定非得这样做,如果定义非成员复合赋值操作符,不会出现编译错误。
(3)对称的操作符,如算术操作符,相等操作符,关系操作符和位操作符,最好定义为普通非成员函数。
1,输出操作符的重载:
为了与IO标准库一致,操作符应接受ostream&作为第一个形参,对类类型const对像的引用作为第二形参,并返回ostream的引用。
重载输出操作符的一般的简单定义:
int i=42;absInt absObj;unisgned int ui=absObj.operator()(i);
尽管absobj是一个对象而不是函数,我们仍然可以“调用”该对象,效果是运行有absObj对象定义的重载函调用操作符。该操作符接受一个int值并返回它的绝对值。
注意:函数调用操作符必须声明为成员函数,一个类可以定义函数调用操作符的多个版本,有形参的数目或类型加以区别。
定义了调用操作符的类,其对象长陈伟函数对象,即他们是行为类似函数的对象。