练习14.1
在什么时候情况下重载的运算符与内置运算符有所区别?在什么时候重载的运算符又与内置运算符一样
::为类设计的运算符,尽量重载的运算符含义不要改变,如+还是加法
练习14.2
为Sales_data编写重载的输入,输出,加法和复合赋值运算符
std::istream& operator>>(std::istream& in,Sales_data&a) { double p; in>>a.isbn>>a.units_sold>>p; a.revenue=(a.units_sold*p); return in; } std::ostream& operator<<(std::ostream& ot,Sales_data&a) { ot<<a.isbn<<a.units_sold<<a.revenue<<std::endl; return ot; }
Sales_data operator+(Sales_data&a,Sales_data&b) { Sales_data c; if(a.isbn==b.isbn){ c.units_sold=(a.units_sold+b.units_sold)/2; c.revenue=a.revenue+b.revenue;} return c; }
Sales_data& operator+=(Sales_data&a) { if(isbn==a.isbn) { units_sold=(units_sold+a.units_sold)/2; revenue=revenue+a.revenue; } return *this; }
练习14.3
string和vector都定义了重载的==以比较各自的对象,假设svec1和sevc2是存放string的vector,确定下面的表达式分别使用了哪个版本的==?
(a)"cobble" == "stone"内置的
(b)svec1[0]==svec2[0] string的
(c)svec1==svec2 vector的
(d) "svec1[0] =="stone" string的
练习14.4
如何确定下列运算符是否是类的成员?
(a)%非成员
(b)%=成员
(c)++成员
(d)->成员
(e)<<成员
(f)&&非成员且不该重载
(g)==非成员
(h)()不该重载
当运算符是二元且位置可以对称进行调换就设非成员
练习14.5
在之前编写了下列类的某一个框架,请问在这个类应该定义重载运算符吗?如果是,请写出
(a) Book::输出,输入
(b)Date::输出,输入,赋值
(c)Employee::输出,输入
其它不建议
练习14.6
为Sales_data添加输出运算符
看14.2
练习14.7
为String类定义输出运算符
ostream& operator<<(ostream& ot,String&a) { for(auto d=a.elements;d!=a.first_free;++d) ot<<*d;
return ot; }
练习14.8
为你曾经选择的类,定义输出运算符
如(14.7)
练习14.9
为你的Sales_data定义输入运算符
std::istream& operator>>(std::istream& in,Sales_data&a) { double p;
in>>a.isbn>>a.units_sold>>p;
if(in) { a.revenue=(a.units_sold*p); return in;}标签:14.1,revenue,sold,Sales,C++,运算符,units,primer,data From: https://www.cnblogs.com/yddl/p/16594264.html
else
{a=Sale_data();
return in;}
}