《习题6及其解答(第二版).doc》由会员分享,可在线阅读,更多相关《习题6及其解答(第二版).doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选可编辑第第 6 章章 运算符重载运算符重载习题 66.1选择 题1.在以下运算符中,不克不迭重载的是(b)。(a)!(b)sizeof(c)new(d)delete2.以下关于 运算符重载的描画中,(d)是精确 的。(a)可以 修改 参与 运算的把持数个数(b)可以 修改 运算符原本 的优先级(c)可以 修改 运算符原本 的结合 性(d)不克不迭修改 原运算符的语义3.以下函数中,不克不迭重载运算符的函数是(b)。(a)成员函数(b)构造函数(c)普通函数(d)友员函数4.不克不迭用友员函数重载的是(a)。(a)=(b)=(c)=(d)+5.下面关于 典范转换的描画中,差错 的选项是(b)
2、。(a)构造函数可以 把一种类典范东西转换成另一种类典范东西(b)构造函数可以 把一种类典范东西转换成全然 典范东西(c)典范转换函数可以 把类典范东西转换为其他 指定典范东西(d)典范转换函数只能定义为一个类的成员函数,不克不迭定义为类的友员函数6.2阅读 以下次序,写出实行 结果1.#include class T public:T()a=0;b=0;c=0;T(int i,int j,int k)a=i;b=j;c=k;void get(int&i,int&j,int&k)i=a;j=b;k=c;T operator*(T obj);private:int a,b,c;TT:operat
3、or*(T obj)T tempobj;tempobj.a=a*obj.a;tempobj.b=b*obj.b;tempobj.c=c*obj.c;return tempobj;void main()T obj1(1,2,3),obj2(5,5,5),obj3;精选可编辑int a,b,c;obj3=obj1*obj2;obj3.get(a,b,c);cout (obj1*obj2):t a=a t b=b t c=c t endl;(obj2*obj3).get(a,b,c);cout (obj2*obj3):t a=a t b=b t c=c t endl;【答案】(obj1*obj2):
4、a=5b=10c=15(obj2*obj3):a=25b=50c=752.#include class Vector public:Vector()Vector(int i,int j)x=i;y=j;friend Vector operator+(Vector v1,Vector v2)Vector tempVector;tempVector.x=v1.x+v2.x;tempVector.y=v1.y+v2.y;returntempVector;void display()cout (x ,y )endl;private:int x,y;void main()Vector v1(1,2),v
5、2(3,4),v3;cout v1=;v1.display();cout v2=;v2.display();v3=v1+v2;cout v3=v1+v2=;v3.display();【答案】v1=(1,2)v2=(3,4)v3=v1+v2=(4,6)精选可编辑6.3思索题1 一个运算符重载函数被定义为成员函数或友员函数,从定义办法、阐明 办法跟 调用办法 上有何区不?可以会出现什么征询 题?请用一个实例阐明之。2 类典范东西之间,类典范跟 全然 典范东西之间用什么函数停顿典范转换?归纳 停顿典范转换的构造函数跟 典范转换函数的定义办法、调用办法 跟调用机会。6.4编程题1分不应用 成员函数跟
6、友员函数编次序 重载运算符“+,使该运算符能实现 两个字符串的连接。【解答】1应用 成员函数#include class stringpublic:string()*str=0;string(char*pstr)strcpy(str,pstr);char*gets()return str;string operator+(string obj);private:char str100;string string:operator+(string obj)strcat(str,obj.str);return str;/或 return*thisvoid main()string obj1(Vis
7、ual),obj2(C+),obj3;obj3=obj1+obj2;cout obj3.gets()endl;2应用 友员函数#include#include class stringpublic:string()*str=0;string(char*pstr)strcpy(str,pstr);char*gets()return str;friend string operator+(string obj1,string obj2);private:精选可编辑char str100;string operator+(string obj1,string obj2)string tempobj;
8、strcat(tempobj.str,obj1.str);strcat(tempobj.str,obj2.str);return tempobj;void main()string obj1(Visual),obj2(C+),obj3;obj3=obj1+obj2;cout obj3.gets()endl;2定义一个整数打算类 Integer,实现 短整数+,-,*,/全然 算术运算。恳求 可以 停顿数据范围 检查-3276832767,或自行设定,数据溢出时表示差错 信息并中断 次序 运行。【解答】#include#includeclass Integerprivate:short a;pu
9、blic:Integer(short n=0)a=n;Integer operator+(Integer);Integer operator-(Integer);Integer operator*(Integer);Integeroperator/(Integer);Integer operator=(Integer);void display()coutaendl;Integer Integer:operator+(Integer x)Integer temp;if(a+x.a32767)coutData overflow!endl;abort();temp.a=a+x.a;return t
10、emp;Integer Integer:operator-(Integer x)Integer temp;if(a-x.a32767)coutData overflow!endl;abort();temp.a=a-x.a;return temp;精选可编辑Integer Integer:operator*(Integer x)Integer temp;if(a*x.a32767)coutData overflow!endl;abort();temp.a=a*x.a;return temp;IntegerInteger:operator/(Integer x)Integer temp;if(a/
11、x.a32767)coutData overflow!endl;abort();temp.a=a/x.a;return temp;Integer Integer:operator=(Integer x)a=x.a;return*this;void main()Integer A(90),B(30),C;coutA=;A.display();coutB=;B.display();C=A+B;coutC=A+B=;C.display();C=A-B;coutC=A-B=;C.display();C=A*B;coutC=A*B=;C.display();C=A/B;coutC=A/B=;C.disp
12、lay();3定义一个实数打算类 Real,实现 单精度浮点数+,-,*,/全然 算术运算。恳求 可以 停顿数据范围-3.410383.41038,或自行设定 检查,数据溢出时表示差错 信息并中断 次序 运行。【解答】#include#includeclass Realprivate:double a;public:Real(double r=0)a=r;Real operator+(Real);Real operator-(Real);Real operator*(Real);Real operator/(Real);Real operator=(Real);精选可编辑void displa
13、y()coutaendl;Real Real:operator+(Real x)Real temp;if(a+x.a1.7e308)coutData overflow!endl;abort();temp.a=a+x.a;return temp;Real Real:operator-(Real x)Real temp;if(a-x.a1.7e308)coutData overflow!endl;abort();temp.a=a-x.a;return temp;Real Real:operator*(Real x)Real temp;if(a*x.a1.7e308)coutData overflo
14、w!endl;abort();temp.a=a*x.a;return temp;RealReal:operator/(Real x)Real temp;if(a/x.a1.7e308)coutData overflow!endl;abort();temp.a=a/x.a;return temp;Real Real:operator=(Real x)a=x.a;return*this;void main()Real A(1.1),B(1.2),C;coutA=;A.display();coutB=;B.display();C=A+B;coutC=A+B=;C.display();C=A-B;co
15、utC=A-B=;C.display();C=A*B;coutC=A*B=;C.display();C=A/B;cout、“做向量的输出/输出把持。留心 检测运算的合理 性。【解答】#include#includeclass Vectorprivate:double*v;int len;public:Vector(int size);Vector(double*,int);Vector();double&operator(int i);Vector&operator=(Vector&);friend Vector operator+(Vector&,Vector&);friend Vector
16、 operator-(Vector&,Vector&);friend double operator*(Vector&,Vector&);friend ostream&operator(istream&input,Vector&);Vector:Vector(int size)if(size=2147483647)coutThe size of sizeis overflow!n;abort();v=new double size;for(int i=0;isize;i+)vi=0;len=size;Vector:Vector(double*C,int size)if(size=2147483
17、647)coutThe size ofsizeis overflow!nendl;abort();v=new doublesize;len=size;for(int i=0;i=0&ilen)return vi;elsecoutThe size ofiis overflow!n;abort();Vector&Vector:operator=(Vector&C)if(len=C.len)for(int i=0;ilen;i+)vi=Ci;return*this;elsecoutOperator=fail!n;abort();Vector operator+(Vector&A,Vector&B)/
18、向量相加 int size=A.len;double*T=new doublesize;if(size=B.len)for(int i=0;isize;i+)Ti=Ai+Bi;return Vector(T,size);elsecoutOperator+fail!n;abort();Vector operator-(Vector&A,Vector&B)/向量相减 int size=A.len;double*T=new doublesize;if(size=B.len)for(int i=0;isize;i+)Ti=Ai-Bi;return Vector(T,size);elsecoutOper
19、ator-fail!n;abort();double operator*(Vector&A,Vector&B)/向量相乘精选可编辑 int size=A.len;double s=0;if(size=B.len)for(int i=0;isize;i+)s+=Ai*Bi;return s;elsecoutOperator*fail!n;abort();ostream&operator(ostream&output,Vector&A)/输出 output(;for(int i=0;iA.len-1;i+)outputAi,;outputAi(istream&input,Vector&A)/输出f
20、or(int i=0;iAi;return input;void main()int k1,k2,k3;double t;coutk1;Vector A(k1);coutA;coutk2;Vector B(k2);coutB;coutk3;Vector C(k3);coutA=Aendl;coutB=Bendl;C=A+B;coutA+B=A+B=Cendl;C=A-B;coutA-B=A-B=Cendl;精选可编辑t=A*B;coutA*B=A*B=tendl;5定义一个类 nauticalmile_kilometer,它包含 两个数据成员 kilometer千米跟 meter米。还包含 一
21、个构造函数对数据成员初始化;成员函数 print 用于输出数据成员 kilometer 跟 meter 的值;典范转换函数 double()实现 把千米跟 米转换为海里(1 海里=1.852 千米)。编写 main 函数,测试类 nauticalmile_kilometer。【解答】#include const double n=1.852;/定义海里与千米跟 米的转换系数(1 海里=1.852 千米)class nauticalmile_kilometer public:nauticalmile_kilometer(int km,double m)kilometer=km;meter=m;void print()coutkilometer=kilometertmeter=meterendl;operator double();private:int kilometer;double meter;nauticalmile_kilometer:operator double()return(meter/1000+double(kilometer)/n;void main()nauticalmile_kilometerobj(100,50);obj.print();cout nauticalmile=double(obj)endl;
限制150内