欢迎来到天天文库
浏览记录
ID:40522335
大小:142.23 KB
页数:25页
时间:2019-08-04
《C++Primer 第14章-重载操作符与转换-课后习题答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十四章重载操作符与转换1。在什么情况下重载操作符与内置操作符不同?在什么情况下重载操作符与内置操作符相同?重载操作符必须具有至少一个类类型或枚举类型的操作数。重载操作符不保证操作数的求值顺序,例如对&&和
2、
3、的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。对于优先级和结合性及操作数的数目都不变。2。为Sales_item编写输入、输出。加以及复合赋值操作符的重载声明。classSales_item{friendstd::istream&operator>>(std::istream&,Sale
4、s_item&);friendstd::ostream&operator<<(std::ostream&,constSales_item&);public:Sales_item&operator+=(constSales_item&);};Sales_itemoperator+(constSales_item&,constSales_item&)3。解释如下程序,假定Sales_item构造函数的参数是一个string,且不为explicit.解释如果构造函数为explicit会怎样。stringnull_book=“0-000-000
5、00-0”;Sales_itemitem(cin);item+=null_book;第一句:调用接受一个C风格的字符串形参的string构造函数,创建一个string临时对象,然后使用string复制构造函数用这个临时对象初始化string对象null_book,第二句:从标准输入设备读入数据,创建Sales_item对象item。第三句:首先调用接受一个string参数的Sales_item构造函数,创建一个临时对象,然后调用Sales_item的复合重载操作符+=,将这个Sales_item临时对象加到item对象上,如果构造函数为
6、explicit,则不能进行从string对象到Sales_item对象的隐式转换,第三句将不能被编译。4。string和vector类都定义了一个重载的==,可用于比较这些类的对象,指出下面的表达式中应用了哪个==版本。strings;vectorsvec1,svec2;“cobble”==“store”应用了C++语言内置版本的重载==svec1[0]==svec2[0];应用了string版本的重载==svec1==svec2应用了vector版本的重载==5。列出必须定义为类成员的操作符。赋值=,下标[],调用(
7、),成员访问箭头->6。解释下面操作符是否应该为类成员,为什么?(a)+(b)+=(c)++(d)->(e)<<(f)&&(g)==(h)()+,<<,==,&&通常定义为非成员;->和()必须定义为成员,否则会出现编译错误;+=和++会改变对象的状态,通常会定义为类成员。7。为下面的ChecoutRecord类定义一个输出操作符:classCheckoutRecord{public://..private:doublebook_id;stringtitle;Datedate_borrowed;Datedate_due;pair8、ing,string>borrower;vector*>wait_list;};ostream&operator<<(ostream&out,constCheckoutRecord&s){out<9、:"<*>::const_iteratorit=s.wait_list.begin();it!=s.wait_list.end();++it){out<<"t"<<(*it)->first<<","<<(*it)->second<usingnamespacestd;classDate{public:D10、ate(){}Date(inty,intm,intd){year=y;month=m;day=d;}friendostream&operator<<(ostream&,constDate&);private
8、ing,string>borrower;vector*>wait_list;};ostream&operator<<(ostream&out,constCheckoutRecord&s){out<9、:"<*>::const_iteratorit=s.wait_list.begin();it!=s.wait_list.end();++it){out<<"t"<<(*it)->first<<","<<(*it)->second<usingnamespacestd;classDate{public:D10、ate(){}Date(inty,intm,intd){year=y;month=m;day=d;}friendostream&operator<<(ostream&,constDate&);private
9、:"<*>::const_iteratorit=s.wait_list.begin();it!=s.wait_list.end();++it){out<<"t"<<(*it)->first<<","<<(*it)->second<usingnamespacestd;classDate{public:D
10、ate(){}Date(inty,intm,intd){year=y;month=m;day=d;}friendostream&operator<<(ostream&,constDate&);private
此文档下载收益归作者所有