- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1:可重载的操作符有:
2:重载操作符必须具有一个类类型操作数重载操作符必须具有至少一个类类型或枚举类型的操作数。不能重新定义用于内置类型对象的操作符。
3:优先级和结合性是固定不变的,除了函数调用操作符operator(),重载操作符时使用默认实参是非法的4:不再具有短路求值特性,就是不能保证操作数的求值顺序5:是普通非成员函数,也可以是类成员函数,如果是成员函数,则形参看起来比操作数目少1,第一个形参是this
一般将算术和关系操作符定义为非成员函数,将赋值运算符定义为成员函数
操作符定义为非成员函数是,通常必须将他们设置为所操作类的友员
重载操作符的设计:1:不要重载具有内置含义的操作符,重载逗号,取地址,逻辑与,逻辑或等操作符都不是好的做法2:大多数操作符对类对象没有意义3:如果一个类有算术操作符,或位操作符。那么提供相应的复合赋值操作符一般是一个好的做法4:相等和关系操作符,将要用作关联容器键类型的类应该定义操作符,类通常也该定义==和操作符,因为很多算法假定这些操作符的存在。
下面是一些指导原则a:赋值=,下标[],调用(),和成员访问箭头-等操作符必须定义为成员,将这些定义为非成员函数将在编译时候标记错误b:像赋值一样,复合赋值操作符通常为类的成员,但不这样做不会标记错误c:改变对象状态或与给定类型紧密联系的其他一些操作符,如自增,自减,解引用,通常为类成员d:对称的操作符,如算术,相等,关系和位操作符,最好定义为普通非成员函数
14.2 输入输出操作符 为了与标准库一致,格式应该是:operator (ostream os, const classtype object)输出操作符通常所作格式化尽量少,且必须为非成员函数,因为左操作是ostream类型而不是类类型
必须处理错误和文件结束的可能性如果可能,要确定错误恢复措施,指出错误,通常仅需设置failbit。设置eofbit,表示文件结束,badbit流被破坏
14.3算术操作符和关系操作符为了与内置操作符保持一致,加法返回一个右值,而不是一个引用
==操作符表示两个对象是等价的设计原则:if类定义了==,该操作符的含义是两个对象包含同样的数据if类具有一个操作,能确定该类型的两个对象是否相等,通常将该函数定义为operator==,而不是创造命名函数。if定义了==,则应该定义!=应该及那个着两个操作符联系起来,一个完成实际比较工作,另一个调用前者inline bool operator== (const sales_item hls, const sales_item rhs){return lhs.units_sold == rhs.units_sold ?? hls.revenue == rhs.revenue ?? kgs,sane_isbn(rhs);}inline bool operator!=(const sales_item lhs, const sales_item rhs){return !(lhs == rhs);}
14.4赋值操作符一个类可以有多个赋值操作符string类包含以西的成员:class string{public:string operator=(const string );string operator=(const char *);string operator=(char);...};string car(volks);car = studet;string model =p;
赋值必须返回对*this的引用,必须为成员函数
14.5下标操作符必须定义为类成员函数
类定义下标操作符,一般需要定义两个版本,一个为非const成员并返回引用,另一个为const成员并返回const引用class Foo{public:int operator[] (const size_t) {return data[index]};const int operator[] (const size_t) const {return data[index]};private:vectorint data;};
14.7自增自建着两个操作符通常由诸如迭代器这样的类实现,例如,可以定义一个类,该类指向一个数组并为该数组中的元素提供访问检查。这个指针类可用于任意类型的数组,class CheckPtr {pubilc:checkptr(int *b, int *e) beg(b),end(e),curr(b){}private:int* beg;int* end;int* curr;public;checkedPtr op
文档评论(0)