练习14.10
对于Sales_data的输入运算符来说给定下面的输入会发生什么?
(a)0-201-99999-9 10 24.95正常输入
(b)10 24.95 0-210-99999-9最后一个输入格式错误,会chongz
练习14.11
下面的Sales_data输入运算符存在错误吗?如果执行上面的输入会发生什么
istream& operator>>(istream& in,Sales_data& s)
{
double price ;
in>>s.bookNo>>s.units_sold>>price;
s.revenue=s.units_sold*price;
return in;}
错误的输入无法处理,且s的数据不匹配
练习14.13
你认为Sales_data类还应该支持哪些其他算术运算符?如果要的话请给出定义
::可以定义利润关系运算符
bool operator<(const Sales_data&a,const Sales_data&b) { return a.revenue<b.revenue; } bool operator>(const Sales_data&a,const Sales_data&b) { return a.revenue>b.revenue; } bool operator==(const Sales_data&a,const Sales_data&b) { return a.revenue==b.revenue; }
练习14.14
你觉得为什么调用operator+=来定义operator+比其他方法有效
::不用记那么多名字,运算符都是约定俗成的
练习14.16
为你的String类定义相等运算符和不相等运算符
bool operator==(const String&a,const String&b) { return a.elements==b.elements&&a.first_free==b.first_free&&a.cap==b.cap; } bool operator!=(const String&a,const String&b) { return !(a==b); }
练习14.18
为你的String类定义关系运算符
bool operator<(const String&a,const String&b) { return a.size()<b.size(); } bool operator>(const String&a,const String&b) { return a.size()>b.size(); }
练习14.20
为你的Sales_data类定义加法和复合赋值运算符
Sales_data& operator+=(Sales_data&a) { if(isbn==a.isbn) { units_sold+=a.units_sold; revenue+=a.revenue; } return *this; }
练习14.21
编写Sales_data类的+和+=运算符,使得执行实际的加法操作而+=调用+。相比于内置的,本题的有何缺点?
::会有多余开销,且没有益处
练习14.22
定义赋值运算符的一个新版本,使得我们能把一个表示ISBN的string赋值给一个Sales_data对象
Sales_data& operator=(const std::string&a) { isbn=a; return *this; }
练习14.23
为你的StrVec类定义一个initializer_list赋值运算符
inline StrVec& StrVec::operator=(std::initializer_list<std::string> il) { auto newdata = alloc_n_copy(il.begin(), il.end()); free(); elements = newdata.first; first_free = cap = newdata.second; return *this; }
标签:const,23,Sales,运算符,14.10,operator,return,primer,data From: https://www.cnblogs.com/yddl/p/16595009.html