您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > C++给学生习题第7章练习题
第7章练习题同步练习7.1一、选择题1.在下列运算符中,不能重载的是()。(A)!(B)sizeof(C)new(D)delete2.在下列关于运算符重载的描述中,()是正确的。(A)可以改变参与运算的操作数个数(B)可以改变运算符原来的优先级(C)可以改变运算符原来的结合性(D)不能改变原运算符的语义3.运算符函数是一种特殊的()或友元函数。(A)构造函数(B)析构函数(C)成员函数(D)重载函数4.设op表示要重载的运算符,那么重载运算符的函数名是()。(A)operatorop(B)op(C)函数标识符(D)函数标识符op5.用于类运算的运算符通常都要重载。但有两个运算符系统提供默认重载版本,它们是()。(A)-和.(B)++和--(C)=和&(D)new和delete【解答】BDCAC同步练习7.2一、选择题1.在下列函数中,不能重载运算符的函数是()。(A)成员函数(B)构造函数(C)普通函数(D)友元函数2.在下列运算符中,要求用成员函数重载的运算符是()。(A)=(B)==(C)=(D)++3.在下列运算符中,要求用友元函数重载的运算符是()。(A)=(B)[](C)(D)()4.如果希望运算符的操作数(尤其是第一个操作数)有隐式转换,则重载运算符时必须用()。(A)构造函数(B)析构函数(C)成员函数(D)友元函数5.当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数一般定义为()。(A)构造函数(B)析构函数(C)成员函数(D)友元函数【解答】BACDC二、程序练习1.阅读程序,写出运行结果。#includeiostreamusingnamespacestd;classT{public:T(){a=0;b=0;c=0;}T(inti,intj,intk){a=i;b=j;c=k;}voidget(int&i,int&j,int&k){i=a;j=b;k=c;}Toperator*(Tobj);private:inta,b,c;};TT::operator*(Tobj){Ttempobj;tempobj.a=a*obj.a;tempobj.b=b*obj.b;tempobj.c=c*obj.c;returntempobj;}intmain(){Tobj1(1,2,3),obj2(5,5,5),obj3;inta,b,c;obj3=obj1*obj2;obj3.get(a,b,c);cout(obj1*obj2):a=a'\t'b=b'\t'c=c'\n';(obj2*obj3).get(a,b,c);cout(obj2*obj3):a=a'\t'b=b'\t'c=c'\n';}【解答】2.阅读程序,写出运行结果。#includeiostreamusingnamespacestd;classVector{public:Vector(){}Vector(inti,intj){x=i;y=j;}friendVectoroperator+(Vectorv1,Vectorv2){VectortempVector;tempVector.x=v1.x+v2.x;tempVector.y=v1.y+v2.y;returntempVector;}voiddisplay(){cout(x,y)endl;}private:intx,y;};intmain(){Vectorv1(1,2),v2(3,4),v3;coutv1=;v1.display();coutv2=;v2.display();v3=v1+v2;coutv3=v1+v2=;v3.display();}【解答】同步练习7.3一、选择题1.设有类A的对象Aobject,若用成员函数重载前置自增表达式,那么++Aobject被编译器解释为()。(A)Aobject.operator++()(B)operator++(Aobject)(C)++(Aobject)(D)Aobject::operator++()2.运算符++,=,+和[]中,只能用成员函数重载的运算符是()。(A)+和=(B)[]和后置++(C)=和[](D)前置++和[]3.在C++中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为()。(A)(表达式)对象(B)(表达式表)对象(C)对象(表达式)(D)对象(表达式表)4.设有类A的对象Aobject,若用友元函数重载后置自减表达式,那么Aobject--被编译器解释为()。(A)Aobject.operator--()(B)operator--(Aobject,0)(C)--(Aobject,0)(D)--(Aobject,0)5.如果表达式++j*k中的++和*都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可以表示为()。(A)operator*(j.operator++(),k)(B)operator*(operator++(j),k)(C)operator++(j).operator*(k)(D)operator*(operator++(j),)6.如果类A要重载插入运算符,那么重载函数参数表的形式一般定义为()。(A)(constA&)(B)(ostream&)(C)(constA&,ostream&)(D)(ostream&,constA&)【解答】ACDBBD同步练习7.4一、选择题1.类型转换函数只能定义为一个类的()。(A)构造函数(B)析构函数(C)成员函数(D)友元函数2.具有一个非默认参数的构造函数一般用于实现从()的转换。(A)该类类型到参数类型(B)参数类型到该类类型(C)参数类型到基本类型(D)类类型到基本类型3.假设ClassX是类类型标识符,Type为类型标识符,可以是基本类型或类类型,Type_Value为Type类型的表达式,那么,类型转换函数的形式为()。(A)ClassX::operatorType(Typet){…returnType_Value;}(B)friendClassX::operatorType(){…returnType_Value;}(C)TypeClassX::operatorType(){…returnType_Value;}(D)ClassX::operatorType(){…returnType_Value;}4.在下列关于类型转换的描述中,错误的是()。(A)任何形式的构造函数都可以实现数据类型转换。(B)带非默认参数的构造函数可以把基本类型数据转换成类类型对象。(C)类型转换函数可以把类类型对象转换为其他指定类型对象。(D)类型转换函数只能定义为一个类的成员函数,不能定义为类的友元函数。5.C++中利用构造函数进行类类型转换时的构造函数形式为()。(A)类名::类名(arg);(B)类名::类名(arg,arg1=E1,…,agrn=En);(C)~类名(arg);(D)~类名(arg,arg1=E1,…,agrn=En);【解答】CBDAB二、程序练习1.阅读下面程序,按注释位置指出语句的性质。#includestring.h#includeiostreamusingnamespacestd;//定义String类classString{friendostream&operator(ostream&output,String&s);//(1)什么语句friendistream&operator(istream&input,String&s);//(2)什么语句public:String(constchar*m=);//(3)什么语句~String();//(4)什么语句operatorint()const;//(5)什么语句operatorchar*()const;//(6)什么语句private:char*str;intsize;};//(7)什么定义String::String(constchar*m){size=strlen(m);str=newchar[size+1];strcpy_s(str,size+1,m);}//(8)什么定义String::~String(){delete[]str;size=0;}//(9)什么定义ostream&operator(ostream&output,String&s){outputs.str;returnoutput;}//(10)什么定义istream&operator(istream&input,String&s){chartemp[1000];inputtemp;delete[]s.str;s.size=strlen(temp);s.str=newchar[s.size+1];strcpy_s(s.str,s.size+1,temp);returninput;}//(11)什么定义String::operatorint()const{returnsize;}//(12)什么定义String::operatorchar*()const{staticchartemp[1000];strcpy_s(temp,\);strcat_s(temp,str);strcat_s(temp,\);returntemp;}intmain(){chars[100];Strings1,s2;//(13)调用什么函数coutPleaseinputtwostrings:endl;cins1s2;//(14)调用什么函数coutoutputis:endl;couts1asString--s1endl;//(15)调用什么函数coutsizeof(s1)-sizeof(s2)=((int)s1-(int)s2)endl;//(16)调用什么函数couts1aschar*--(char*)s1endl;//(17)调用什么函数couts2aschar*--(char*)s2endl;//(18)调用什么函数strcpy(s,s2);//(19)调用什么函数coutAfterstrcpy(s,s2);s=sendl;//(20)调用什么函数return0;//(21)调用什么函数}【解答】#includestring.h#includeiostreamusingnamespacestd;//定义String类classString{friendostream&operator(ostream&output,String&s);//(1)运算符重载函数声明friendistream&operator(istream&input,String&s);//(2)运算符重载函数声明public:String(constchar*m=);//(3)构造函数声明~String();//(4)析构函数声明operatorint()const;//(5)类型转换函数声明operatorchar*()const;//(6)类型转换函数声明private:char*str;intsize;};//(7)定义构造函数String::String(constchar*m){size=strlen(m);str=newchar[size+1];strcpy_s(str,size+1,m);}//(8)定义析构函数String::~String(){delete[]str;size=0;}//(9)定义运算符重载函数ostream&operator(ostream&output,String&s){outputs.str;returnoutput;}//(10)定义运算符重载函数istream&operator(istream&i
本文标题:C++给学生习题第7章练习题
链接地址:https://www.777doc.com/doc-4770541 .html