欢迎来到天天文库
浏览记录
ID:50289120
大小:37.00 KB
页数:6页
时间:2020-03-07
《C程序设计教程8操作符重载.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、1:可重载的操作符有:2:重载操作符必须具有一个类类型操作数重载操作符必须具有至少一个类类型或枚举类型的操作数。不能重新定义用于内置类型对象的操作符。3:优先级和结合性是固定不变的,除了函数调用操作符operator(),重载操作符时使用默认实参是非法的4:不再具有短路求值特性,就是不能保证操作数的求值顺序5:可以是普通非成员函数,也可以是类成员函数,如果是成员函数,则形参看起来比操作数目少1,第一个形参是this一般将算术和关系操作符定义为非成员函数,将赋值运算符定义为成员函数操作符定义为非成员函数是,通常必须将他们设置为所操作类的友员重载操
2、作符的设计:1:不要重载具有内置含义的操作符,重载逗号,取地址,逻辑与,逻辑或等操作符都不是好的做法2:大多数操作符对类对象没有意义3:如果一个类有算术操作符,或位操作符。那么提供相应的复合赋值操作符一般是一个好的做法4:相等和关系操作符,将要用作关联容器键类型的类应该定义<操作符,类通常也该定义==和<操作符,因为很多算法假定这些操作符的存在。下面是一些指导原则a:赋值=,下标[],调用(),和成员访问箭头->等操作符必须定义为成员,将这些定义为非成员函数将在编译时候标记错误b:像赋值一样,复合赋值操作符通常为类的成员,但不这样做不会标记错误
3、c:改变对象状态或与给定类型紧密联系的其他一些操作符,如自增,自减,解引用,通常为类成员d:对称的操作符,如算术,相等,关系和位操作符,最好定义为普通非成员函数14.2输入输出操作符<<为了与标准库一致,格式应该是:operator<<(ostream&os,constclasstype&object)输出操作符通常所作格式化尽量少,且必须为非成员函数,因为左操作是ostream类型而不是类类型>>必须处理错误和文件结束的可能性如果可能,要确定错误恢复措施,指出错误,通常仅需设置failbit。设置eofbit,表示文件结束,badbit流被破
4、坏14.3算术操作符和关系操作符为了与内置操作符保持一致,加法返回一个右值,而不是一个引用==操作符表示两个对象是等价的设计原则:if类定义了==,该操作符的含义是两个对象包含同样的数据if类具有一个操作,能确定该类型的两个对象是否相等,通常将该函数定义为operator==,而不是创造命名函数。if定义了==,则应该定义!=应该及那个着两个操作符联系起来,一个完成实际比较工作,另一个调用前者inlinebooloperator==(constsales_item&hls,constsales_item&rhs){returnlhs.units
5、_sold==rhs.units_sold&& hls.revenue==rhs.revenue&& kgs,sane_isbn(rhs);}inlinebooloperator!=(constsales_item&lhs,constsales_item&rhs){return!(lhs==rhs);}14.4赋值操作符一个类可以有多个赋值操作符string类包含以西的成员:classstring{public:string&operator=(conststring&);string&operator=(constchar*);strin
6、g&operator=(char);...};stringcar("volks");car="studet";stringmodel='p';赋值必须返回对*this的引用,必须为成员函数14.5下标操作符必须定义为类成员函数类定义下标操作符,一般需要定义两个版本,一个为非const成员并返回引用,另一个为const成员并返回const引用classFoo{public:int&operator[](constsize_t){returndata[index]};constint&operator[](constsize_t)const{ret
7、urndata[index]};private:vectordata;};14.7自增自建着两个操作符通常由诸如迭代器这样的类实现,例如,可以定义一个类,该类指向一个数组并为该数组中的元素提供访问检查。这个指针类可用于任意类型的数组,classCheckPtr{pubilc:checkptr(int*b,int*e)beg(b),end(e),curr(b){}private:int*beg;int*end;int*curr;public;checkedPtr&operator++();checkedPtr&operator--();
8、};因为改变操作对象的状态,所以更倾向于将他们作为成员,并返回引用3区别操作符的前缀和后缀普通重载不能区别所定义的是前缀还是后缀,用一个额外的int型
此文档下载收益归作者所有