版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C++机试(运算符重载)模拟试卷1(共5套)(共123题)国家二级C++机试(运算符重载)模拟试卷第1套一、选择题(本题共26题,每题1.0分,共26分。)1、运算符重载是对已有的运算符赋予多重含义,因此()。A、可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B、可以改变一个已有运算符的优先级和操作数个数C、只能重载C++中已经有的运算符,不能定义新运算符D、C++中已经有的所有运算符都可以重载标准答案:C知识点解析:此题考查的是运算符重载。运算符重载是针对C++语言原有的运算符进行的,并不能创造新的运算符。2、通过运算符重载,可以改变运算符原有的()。A、操作数类型B、操作数个数C、优先级D、结合性标准答案:A知识点解析:此题考查的是运算符重载。运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。故本题选项A正确。3、下列运算符中,不能被重载的是()。A、&&B、!=C、.D、++标准答案:C知识点解析:此题考查的是运算符重载。在C++中,只有.、.*、.>*、::、?:这五个运算符不能重载。4、下列关于运算符重载的描述中,正确的是()。A、运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B、一元运算符只能作为成员函数重载C、二元运算符重载为非成员函数时,参数表中有一个参数D、C++中可以重载所有的运算符标准答案:A知识点解析:此题考查的是运算符的重载。运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。所以二元运算符重载为非成员函数时,参数表中应有两个参数,c选项错误;运算符重载为成员函数,若参数表中无参数,重载的是一元运算符,选项A正确;一元运算符中,“-”(取负)、“++”、“--”等均可重载为成员函数;C++语言中,“.”、“.*”、“->*”、“::”、“?:”五个运算符不能重载。5、下列有关运算符重载的叙述中,正确的是()。A、运算符重载是多态性的一种表现B、C++中可以通过运算符重载创造新的运算符C、C++中所有运算符都可以作为非成员函数重载D、重载运算符时可以改变基结合性标准答案:A知识点解析:此题考查的是运算符重载。C++中运算符重载是多态性的一种表现;运算符重载是针对C++原有运算符进行的,不可能通过重载创造出新的运算符;除了“.”、“.*”、“->*”、“::”、“?:”这五个运算符外,其它运算符都可以重载;但“=”“[]”“->”及所有的类型转换运算符只能作为成员函数重载,运算符重载不可改变其结合性、操作数个数和优先级。6、下列关于运算符重载的叙述中,错误的是()。A、有的运算符可以作为非成员函数重载B、所有的运算符都可以通过重载而被赋予新的含义C、不得为重载的运算符函数的参数设置默认值D、有的运算符只能作为成员函数重载标准答案:B知识点解析:“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造新的运算符。除了*,.*,->*,::,?:,.这五个运算符以外,其他运算符都可以重载。7、运算符重载时不需要保持的性质是()。A、操作数个数B、操作数类型C、优先级D、结合性标准答案:B知识点解析:运算符重载应该体现为原有运算符的功能在新的数据类型上的延伸。重载的运算符保持原有运算符的操作个数、优先级和结合性三个最基本的特征。8、下列关于运算符函数的描述中,错误的是()。A、运算符函数的名称总是以operator为前缀B、运算符函数的参数可以是对象C、运算符函数只能定义为类的成员函数D、在表达式中使用重载的运算符相当于调用运算符重载函数标准答案:C知识点解析:C++把重载的运算符视为特殊的函数,称为运算符函数。编译系统能够依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义。运算符函数作为非成员函数时,所有的操作数必须出现在参数表中。9、下列关于运算符重载的描述中,错误的是()。A、运算符不能重载B、类型转换运算符只能作为成员函数重载C、将运算符作为非成员函数重载时必须定义为友元D、重载[]运算符应完成“下标访问”操作标准答案:C知识点解析:C++把重载的运算符视为特殊的函数,称为运算符函数。“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造出新的运算符。10、下列关于运算符重载的描述中,错误的是()。A、可以通过运算符重载在C++中创建新的运算符B、赋值运算符只能重载为成员函数C、运算符函数重载为类的成员函数时,第一操作数是该类对象D、重载类型转换运算符时不需要声明返回类型标准答案:A知识点解析:运算符重载应尽可能保持其原有的基本语义,而不是创建新的运算符。重载的运算符应该体现为原运算符的功能在新数据类型上的延伸,它的使用应当使程序中算法的表达式显得更流畅、自然,使阅读程序的人在不借助于其他说明资料的情况下就能够正确理解。11、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载机制可以为C++语言扩充新的运算符B、运算符重载的作用是使已有的运算符作用于类的对象C、重载运算符的操作数类型可以全部为基本类型D、所有运算符都可以被重载标准答案:B知识点解析:运算符重载就是赋予已有的运算符多重含义。通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了C++语言的扩充能力。运算符重载要注意以下3点:①不能重载的运算符包括::.,.*,?;②必须重载为成员函数的运算符包括[],(),->,=;③在类成员函数中重载运算符是不允许返回引用的,会出现“返回局部变量的地址”警告。12、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载,可以定义新的运算符B、有的运算符只能作为成员函数重载C、若重载运算符+,则相应的运算符函数名是+D、重载一个二元运算符时,必须声明两个形参标准答案:B知识点解析:此题考查的是运算符重载。C++中,“=”、“[]”、“()”、“->”以及所有的类型转换符只能作为成员函数重载,故B选项正确;运算符重载只是赋予已有的运算符多重含义,并不是定义新的运算符;运算符函数的函数名就是在运算符前加上关键字operator。13、己知在一个类体中包含如下函数原型:VOLUMEoperator-(VOLUME)const;,下列关于这个函数的叙述中,错误的是()。A、这是运算符.的重载运算符函数B、这个函数所重载的运算符是一个一元运算符C、这是一个成员函数D、这个函数不改变类的任何数据成员的值标准答案:B知识点解析:此题考查的是运算符的重载。运算符“-”有一元和二元两种,在本题中它作为一个二元运算符,所以它不能更新对象的数据成员,也不能调用该类中没有const修饰的成员函数。14、在表达式x+y*z中,+是作为成员函数重载的运算符,木是作为非成员函数重载的运算符。下列叙述中正确的是()。A、operator+有两个参数,operator*有两个参数B、operator+有两个参数,operator*有一个参数C、operator+有一个参数,operator*有两个参数D、operator+有一个参数,operator*有一个参数标准答案:C知识点解析:此题考查的是运算符的重载。运算符可重载成员函数,也可重载为友元函数。当重载为成员函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个;当重载为友元函数时,其参数个数应与操作数的个数相同。15、有如下的运算符重载函数定义:doubleoperator+(inti,intk){returndouble(i+k);}但定义有错误,对这个错误最准确的描述是()。A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为doubleC、没有将运算符重载函数声明为某个类的友元D、C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符标准答案:D知识点解析:此题考查的是运算符的重载。C++语言规定,不能作为非成员函数重载的运算符有=、[]、()、->以及所有的类型转换运算符,故选项A错误;运算符重载对返回值类型没有限制,故选项B错误:C++并不强制要求非成员重载的运算符一定是某个类的友元,所以C选项错误;题目中重载的“+”运算符的两个参数都是int类型,而C++已经提供了求两个int型数据之和的运算符+,编译器无法区分应该调用哪一个,所以应该选择D选项。16、下面程序中对一维坐标点类Point进行运算符重载#includeusingnamespacestd;classPoint{public:Point(intval){x=val;}Point&operator++(){x++;return*this;)Pointoperator++(int){Pointold=*this;++(*this);returnold;}IntGetX()const{returnx;}private:intx;};intmain(){Pointa(10);cout<<(++a).GetX();cout<A、运行时输出1011B、运行时输出1111C、运行时输出1112D、编译有错标准答案:B知识点解析:此题考查的是重载增1运算符“++”。此题中,Point&operator++()重载的是前缀形式,而Pointoperator++(int)重载的是后缀形式。所以主函数中第1条输出语句输出11,此时a.x的值为11;第2条输出语句,首先创建了一个Point对象old保存自身,然后通过语句++(*this);调用前缀++的重载函数,因为返回值是改变前保存的old对象,故仍输出11。17、下列是重载乘法运算符的函数原型声明,其中错误的是()。A、MyClassoperator*(double,double);B、MyClassoperator*(double,MyClass);C、MyClassoperator*(MyClass,double);D、MyClassoperator*(MyClass,MyClass);标准答案:A知识点解析:此题考查的是运算符重载。本题中,选项A重载运算符“*”使用的形参是两个double,而系统中的“*”运算原本就能计算两个double,所以这样违反了重载函数的原则,当执行a*b这样的表达式时,系统不能识别是否执行运算符重载函数。故答案是A选项。18、已知Value是一个类,Value是Value的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是()。A、Valueoperator+(Valuev,inti);B、Valueoperator+(Valuev=value,inti);C、Valueoperator+(Valuevinti=0);D、Valueoperator+(Valuev=value,inti=0);标准答案:B知识点解析:此题考查的是重载加法运算符“+”。“+”是二元运算符,其第一操作数是对象本身,i为第二操作数,由此可知选项B正确。19、有如下程序:#includeUsingnamespacestd;ClassAmount{intamount;public;Amount(intn=0):amount(n){}IntgetAmountoconst{returnamount;}Amount&operator+=(Amounta){amount+=a.amount;return;}};intmain(){Amountx(3),y(7);x+=y;cout<A、*thisB、thisC、&amountD、amount标准答案:A知识点解析:此题考查的是“+”运算符重载和this指针。语句amount+=a.amount;实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amoum&,所以横线处填入*this。20、如果表达式a>_b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为()。A、a.operator>=(b)B、b.operatotr>=(a)C、operator>=(a,b)D、operator>=(b,a)标准答案:C知识点解析:运算符函数作为非成员函数时,没有隐含的mis指针,因此所有的操作数必须出现在参数表中,对于二元运算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。21、已知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为()。A、a.operator++(1)B、operator++(a)C、operator++(a,1)D、a.operator++()标准答案:C知识点解析:本题主要是对运算符重载的考查。“++”实现增加1,所以除了a之外的另一个参数默认为1。22、有如下程序:#includeusingnamespacestd;classPair{intm;intn;public:Pair(inti,intj):m(i),n(j){}booloperator>(PairP)const;//须在类体外给出定义};intmain(){Pairp1(3,4),p2(4,3),p3(4,5);cout<<(pl>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2);return0:}运算符函数。perator>的功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。程序输出0101,下列对运算符重载函数的正确定义是()。A、boolPair::operator>(Pairp)const{if(m!=p.m)returnm>p.m;returnn>p.n;}B、boolPair::operator>(Pairp){if(m!=p.m)returnm>p.m;returnn>p.n;}C、boolPair::operator>(Pairp)const{if(m>p.m)returntrue;returnn>p.n;}D、boolPair::operator>(Pairp){if(m>p.m)returntrue;returnn>p-n;}标准答案:A知识点解析:按照比较规则:首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。这条规则的用C++写出来就是选项A。23、将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是()。A、不合法的运算符B、一元运算符C、无操作数的运算符D、二元运算符标准答案:B知识点解析:对于一元或二元运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在参数表中。即第一操作数仅以this指针的形式隐含存在于参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。24、将前缀运算符“--”重载为非成员函数,下列原型中,能正确用于类中说明的是()。A、Decr&operator--(int);B、Decroperator--(Decr&,int);C、friendDecr&operator--(Decr&);D、friendDecroperator--(Decr&,int);标准答案:C知识点解析:因为要作为非成员函数重载,所以加衔end,作为前缀操作,其返回的操作结果是对该变量的引用,所以类型为Decr&,操作数出现在参数表中,应声明为引用,即Decr&。25、将运算符“+”重载为非成员函数,下列原型声明中,错误的是()。A、MycloCkoperator+(MyClock,long);B、MycloCkoperator+(MyClock,MyClock);C、MycloCkoperator+(long,long);D、MycloCkoperator+(long,MyClock);标准答案:C知识点解析:运算符重载不能有二义性,故选项C)不能区分运算符的准确含义。26、下列关于赋值运算符“=”重载的叙述中,正确的是()。A、赋值运算符只能作为类的成员函数重载B、默认的赋值运算符实现了“深层复制”功能C、重载的赋值运算符函数有两个本类对象作为形参D、如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符标准答案:A知识点解析:赋值运算符“=”只能作为成员函数重载。国家二级C++机试(运算符重载)模拟试卷第2套一、选择题(本题共18题,每题1.0分,共18分。)1、通过运算符重载,可以改变运算符原有的()。A、操作数类型B、操作数个数C、优先级D、结合性标准答案:A知识点解析:此题考查的是运算符重载。运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。故本题选项A正确。2、下列关于运算符重载的描述中,正确的是()。A、运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B、一元运算符只能作为成员函数重载C、二元运算符重载为非成员函数时,参数表中有一个参数D、C++中可以重载所有的运算符标准答案:A知识点解析:此题考查的是运算符的重载。运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。所以二元运算符重载为非成员函数时,参数表中应有两个参数,C选项错误:运算符重载为成员函数,若参数表中无参数,重载的是一元运算符,选项A正确:一元运算符中,“-”(取负)、“++”、“--”等均可重载为成员函数:C++语言中,“.”、“.*”、“->*”、“::”、“?:”五个运算符不能重载。3、下列关于运算符函数的描述中,错误的是()。A、运算符函数的名称总是以operator为前缀B、运算符函数的参数可以是对象C、运算符函数只能定义为类的成员函数D、在表达式中使用重载的运算符相当于调用运算符重载函数标准答案:C知识点解析:C++把重载的运算符视为特殊的函数,称为运算符函数。编译系统能够依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义。运算符函数作为非成员函数时,所有的操作数必须出现在参数表中。4、下列关于运算符重载的描述中,错误的是()。A、可以通过运算符重载在C++中创建新的运算符B、赋值运算符只能重载为成员函数C、运算符函数重载为类的成员函数时,第一操作数是该类对象D、重载类型转换运算符时不需要声明返回类型标准答案:A知识点解析:运算符重载应尽可能保持其原有的基本语义,而不是创建新的运算符。重载的运算符应该体现为原运算符的功能在新数据类型上的延伸,它的使用应当使程序中算法的表达式显得更流畅、自然,使阅读程序的人在不借助于其他说明资料的情况下就能够正确理解。5、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载,可以定义新的运算符B、有的运算符只能作为成员函数重载C、若重载运算符+,则相应的运算符函数名是+D、重载一个二元运算符时,必须声明两个形参标准答案:B知识点解析:此题考查的是运算符重载。c++中,“=”、“[]”、“()”、“->”以及所有的类型转换符只能作为成员函数重载,故B选项正确:运算符重载只是赋予已有的运算符多重含义,并不是定义新的运算符;运算符函数的函数名就是在运算符前加上关键字operator。6、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。A、operator+有两个参数,operator*有两个参数B、operator+有两个参数,operator*有一个参数C、operator+有一个参数,operator*有两个参数D、operator+有一个参数,operator*有一个参数标准答案:C知识点解析:此题考查的是运算符的重载。运算符可蘑载成员函数,也可重载为友元函数。当重载为成员函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个:当重载为友元函数时,其参数个数应与操作数的个数相同。7、有如下的运算符重载函数定义:doubleoperator+(inti,intk){returndouble(i+k);}但定义有错误,对这个错误最准确的描述是()。A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为doubleC、没有将运算符重载函数声明为某个类的友元D、C++已经提供了求两个int型数据s之和的运算符+,不能再定义同样的运算符标准答案:D知识点解析:此题考查的是运算符的重载。C++语言规定,不能作为非成员函数重载的运算符有=、[]、()、->以及所有的类型转换运算符,故选项A错误;运算符重载对返回值类型没有限制,故选项B错误;C++并不强制要求非成员重载的运算符一定是某个类的友元,所以c选项错误;题目中重载的“+”运算符的两个参数都是int类型,而C++已经提供了求两个int型数据之和的运算符+,编译器无法区分应该调用哪一个,所以应该选择D选项。8、下列运算符函数中肯定不属于类FunNumber的成员函数的是()。A、intoperator-(FunNumber);B、FunNumberoperator-();C、FunNumberoperator-(int);D、intoperator-(FunNumber,FunNumber);标准答案:D知识点解析:此题考查的是运算符“-”的重载。“-”运算符有一元和二元两种,且均可以重载为成员函数和非成员函数。运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符冗数相等。所以,“-”运算符重载为成员函数时,参数可以是0个或1个:而重裁为非成员函数时.参数个数可以是1个或2个。所以D选项,肯定是重载为非成员函数。9、已知Value是一个类,Value是Value的一个对象。下列以非成员函数形式重载的运算符函数原形中,正确的是()。A、Valueoperator+(Valuev,inti);B、Valueoperator+(Valuev=value,inti);C、Valueoperator+(Valuevinti=0);D、Valueoperator+(Valuev=value,inti=0);标准答案:B知识点解析:此题考查的是重载加法运算符“+”。“+”是二元运算符,其第一操作数是对象本身,i为第二操作数,由此可知选项B正确。10、有如下程序:#includeusingnamespacestd;classPair{intm;intn:public:Pair(inti,intj):m(i),n(j){}booloperator>(PairP)const;//须在类体外给出定义};intmain(){Pairp1(3,4),p2(4,3),p3(4,5);cout<<(p1>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2);return0;}运算符函数。perator>的功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。程序输出0101,下列对运算符重载函数的正确定义是()。A、boolPair::operator>(Pairp)const{if(m!=p.m)returnm>p.m;returnn>p.n;}B、boolPair::operator>(Pairp){if(m!=p.m)returnm>p.m;returnn>p.n;}C、boolPair::operator>(Pairp)const{if(m>p.m)returntrue;returnn>p.n;}D、boolPair::operator>(Pairp){if(m>p.m)returntrue;returnn>p.n;}标准答案:A知识点解析:按照比较规则:首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。这条规则的用C++写出来就是选项A。11、将前缀运算符“--”重载为非成员函数,下列原型中,能正确用于类中说明的是()。A、Decr&operator--(int);B、Decroperator--(Decr&,int);C、friendDecr&operator--(Decr&);D、friendDecroperator--(Decr&,int);标准答案:C知识点解析:因为要作为非成员函数重载,所以加friend,作为前缀操作,其返回的操作结果是对该变量的引用,所以类型为Decr&,操作数出现在参数表中,应声明为引用,即Decr&。12、下列关于赋值运算符“=”重载的叙述中,正确的是()。A、赋值运算符只能作为类的成员函数重载B、默认的赋值运算符实现了“深层复制”功能C、重载的赋值运算符函数有两个本类对象作为形参D、如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符标准答案:A知识点解析:赋值运算符“=”只能作为成员函数重载。13、有类定义如下:classType{public:Type(inti=0);Typeoperator-(int);friendTypeoperator+(Type,Type);private:intval;};若有对象定义Typec1;则下列语句序列中,错误的是()。A、Type(3)+c1;B、c1+Type(3);C、3-c1;D、c1-3:标准答案:C知识点解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。14、若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()。A、operatorlong()const;B、operatorlong(bigNumber);C、longoperatorlong()const;D、longoperatorlong(BigNumber);标准答案:A知识点解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。15、为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是()。A、+B、=C、<<D、++标准答案:B知识点解析:在C++中,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。16、若为Fraction类重载前增1运算符++,应在类体中将其声明为()。A、Fraction&operator++();B、Fraction&operator++(int);C、friendFraction&operator++();D、friendFraction&operator++(int);标准答案:A知识点解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符++时,其声明形式为Fraction&operator++(int);。17、已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:MyClockc1,c2;//…..c2=c1+10:由此可知:为类MyClock重载的“+”运算符函数的声明是()。A、friendMyClockoperator+(MyClock,int);B、friendMyClockoperator+(MyClock,MyClock);C、friendMyClockoperator+(int,MyClock);D、MyClockoperator+(MyClock);标准答案:A知识点解析:由表达式c2=c1+10可知,在对“+”进行重载时,第一操作数是MyClock类的对象,而第二操作数是一个整型数据。18、在类中重载赋值运算符时,应将其声明为类的()。A、静态函数B、友元函数C、成员函数D、构造函数标准答案:C知识点解析:赋值运算符只能作为类的成员函数重载。国家二级C++机试(运算符重载)模拟试卷第3套一、选择题(本题共27题,每题1.0分,共27分。)1、若在表达式y/x中,"/"是作为成员函数重载的运算符,则该表达式还可以表示为()。A、x.operator/(y)B、operator/(x,y)C、y.operator/(x)D、operator/(y,x)标准答案:C知识点解析:运算符函数的函数名是由运算符前加关键字operator构成的。所以当“/”作为运算符重载后,其格式为operator/。所以其作为成员函数调用时的格式为y.operator/(x)。2、若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。A、Data+(Data);B、Dataoperator+{Data};C、Data+operator{Data};D、operator+(Data,Data);标准答案:B知识点解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。运算符函数的函数名是由运算符前加关键字operator构成的。3、若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是()。A、operatorlong()const;B、operatorlong(bigNumber);C、longoperatorlong()const;D、longoperatorlong(BigNumber);标准答案:A知识点解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。4、有如下类模板定义:templateclassBigNumber{longn;public:BigNumber(Ti):n(i){}BigNumberoperator+(BigNumberb){returnBigNumber(n+b.n);}}己知b1、b2是BigNumber的两个对象,则下列表达式中错误的是()。A、b1+b2B、b1+3C、3+b1D、3+3标准答案:C知识点解析:C++运算符的重载有两个方式,一种是作为成员函数,另一种是作为友元函数。前种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为COperatoroperator+(COperalor&op);,在调用的过程中我们可以理解为result=operalor+(op);友元方式为friendCOperatoroperator-(COpemtor&opl,COperator&op2);,在调用的过程中我们可以理解为result=operator-(op1,op2);。对于本题来说,整数3与b1相加时,3是int型,bl是BigNumber型,int型不能和别的型做运算。5、为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是()。A、+B、=C、<<D、++标准答案:B知识点解析:在C++中,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载。6、有如下类定义classMyClasspublic:Private:intdata;};若要为MyClass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入MyClass类的对象obj,则横线处的声明语句应为()。A、friendistream&operator>>(istream&is,MyClass&a);B、friendistream&operator>>(istream&is,MyClassa);C、istream&operator>>(istream&is,MyClass&a);D、istream&operator>>(istream&is,MyClassa);标准答案:A知识点解析:C++的输入运算符>>作为非类成员函数重载。在一个类中,可将输入运算符>>声明为友元函数,在类MyClass重载输入运算符>>的形式如选项A)所示。7、若为Fraction类重载前增1运算符++,应在类体中将其声明为()。A、Fraction&operator++();B、Fraction&operator++(int);C、friendFraction&operator++();D、friendFraction&operator++(int);标准答案:A知识点解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符++时,其声明形式为Fraction&operator++(int);。8、若需要为XV类重载乘法运算符,运算结果为XV类型,在将其声明为类的成员函数时,下列原型声明正确的是()。A、XVoperator*(XV,XV);B、XV*(XV);C、operator*(XV);D、XVoperator*(XV);标准答案:D知识点解析:“*”是一个二元运算符,在作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数就是对象本身,仅以this指针的形式隐藏在参数表中。9、已知类MyClock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:MyClockc1,c2;//……c2=c1+10;由此可知:为类MyClock重载的“+”运算符函数的声明是()。A、friendMyClockoperator+(MyClock,int);B、friendMyClockoperator+(MyClock,MyClock);C、fiendMyClockoperator+(int,MyClock);D、MyClockoperator+(MyClock);标准答案:A知识点解析:由表达式c2=c1+10可知,在对“+”进行重载时,第一操作数是Myclock类的对象,而第二操作数是一个整型数据。10、已知将运算符“+”和“*”作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于()。A、c1.operator*(c2.operator+(c1))B、c1.operator+(c2.operator*(c1))C、c1.operator*(c1.operator+(c2))D、c2.operator+(c1.operator*(c1))标准答案:B知识点解析:表达式c1+c2*c1的含义是c1加上c2与c1的积。11、下列运算符不能重载为友元函数的是()。A、=()[]->B、+-++--C、><>=<=D、+=-=*=/=标准答案:A知识点解析:此题考查的是运算符重载的概念。C++语言规定,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,如果要重载为友元函数就必须重载为非成员函数。12、若要重载+、=、<<、==和[]运算符,则必须作为类成员重载的运算符是()。A、+和=B、=和<<C、=和<<D、=和[]标准答案:D知识点解析:=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,而且不能是针对枚举类型操作数的重载。13、在类中重载赋值运算符时,应将其声明为类的()。A、静态函数B、友元函数C、成员函数D、构造函数标准答案:C知识点解析:赋值运算符只能作为类的成员函数重载。14、下列关于C++流的说明中,正确的是()。A、与键盘、屏幕、打印机和通信端口的交互都可以通过流类来实现B、从流中获取数据的操作称为插入操作,向流中添加数据的操作称为提取操作C、cin是一个预定义的输入流类D、输出流有一个名为open的成员函数,其作用是生成一个新的流对象标准答案:A知识点解析:此题考查的是C++流的概念。从输入流中提取数据称为提取操作,把表达式插入到输出流中的操作称为插入操作,故选项B错误;cin是一个预定义的输入流对象而不是流类,故选项c错误;输入输出流中没有open成员函数,故选项D错误。15、在语句cin>>data;中,cin是()。A、C++的关键字B、类名C、对象名D、函数名标准答案:C知识点解析:此题考查的是预定义流对象。C++有4个预定义的流对象:cin一标准输入;cout一标准输出;cerr一标准出错信息输出;clog一带缓冲的标准出错信息输出。16、如果利用C++流进行输入输出,下面的叙述中正确的是()。A、只能借助于流对象进行输入输出B、只能进行格式化输入输出C、只能借助于cin和cout进行输入输出D、只能使用运算符>>和<<进行输入输出标准答案:A知识点解析:此题考查的知识点是C++流。利用C++流既可以进行有格式输入输出,也可以进行无格式输入输出,所以选项B错误:C++的4个预定义的流对象为:cin一标准输入,cout一标准输出,cerr一标准出错信息输出,clog一带缓冲的标准出错信息输出,选项C错误;C++流除了可以使用提取“>>”插入“<<”进行输入输出外,还可以通过流对象的一些成员函数进行输入输出,故选项D错误。17、下列有关C++流的叙述中,错误的是()。A、C++操作符setw设置的输出宽度永久有效B、C++操作符endl可以实现输出的回车换行C、处理文件I/O时,要包含头文件fstreamD、进行输入操作时,eof0函数用于检测是否到达文件尾标准答案:A知识点解析:此题考查的是C++流。C++操作符setw()的作用是设置输入输出宽度,且只对当前一次有效,并非永久有效,故选项A叙述错误。18、在语句“cout<<’A’;”中,cout是()。A、类名B、对象名C、函数名D、C++的关键字标准答案:B知识点解析:C++有四个预定义的流对象:cin标准输,cout标准输出,cerr标准出错信息输出,clog带缓冲的标准出错信息输出。19、下列关于C++流的描述中,错误的是()。A、cout>>’A’表达式可输出字符AB、eof()函数可以检测是否到达文件尾C、对磁盘文件进行流操作时,必须包含头文件fstreamD、以iosbase::out模式打开的文件不存在时,将自动建立一个新文件标准答案:A知识点解析:cout是一个标准输出流对象。>>称之为提取运算符,它的功能是从输入流中提取数据赋值给一个变量。<<为插入运算符,其功能是把表达式的值插入到输出流中。当系统执行cout<20、在C++中,cin是一个()。A、类B、对象C、模板D、函数标准答案:B知识点解析:cin为istream流类的对象。21、下列关于C++预定义流对象的叙述中,正确的是()。A、cin是C++预定义的标准输入流对象B、cin是C++预定义的标准输入流类C、cout是C++预定义的标准输入流对象D、cout是C++预定义的标准输入流类标准答案:A知识点解析:cin为istream流类的标准输入对象,标准输入设备就是指键盘。22、C++系统预定了4个用于标准数据流的对象,下列选项中不属于此类对象的是()。A、coutB、cinC、cerrD、cset标准答案:D知识点解析:C++流有4个预定义的流对象,它们分别是:cin标准输入;cout标准输出;cerr标准出错信息输出;clog带缓冲的标准出错信息输出。23、在C++中,打开一个文件时与该文件建立联系的是()。A、流对象B、模板C、函数D、类标准答案:A知识点解析:在C++中,打开一个文件时与该文件建立联系的是流对象。24、下列关于输入输出流的叙述中,正确的是()。A、一个文件流可以与一个数据文件相联系B、cin是专门从键盘输入数据的输入流类C、流运算符<<用来从输入流中读取数据D、宽度设置的效果永久有效标准答案:A知识点解析:当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的流对象,另一个是文件对象。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。25、在C++中既可以用于文件输入又可以用于文件输出的流类是()。A、fstreamB、ifstreamC、ofstreamD、iostream标准答案:A知识点解析:文件流以磁盘文件以及其他可按文件方式进行管理的外部设备为输入输出对象。ifstream是文件输入流类,ofstream是文件输出流类,fstream是文件输入输出流类,当使用cin、cout的预定义流对象进行针对标准设备的I/O操作,则需要使用iostream文件。26、对于语句cout<A、cout是一个输出流对象B、endl的作用是输出回车换行C、x是一个变量D、<<称作提取运算符标准答案:D知识点解析:此题考查的是C++语言的输出流。符号“<<”是预定义插入符,提取运算符是“>>”。27、有如下程序:#includeusingnamespacestd;intmain(){cout.fill(’*’);cout.width(6);cout.fill(’#’);cout<<123<A、###123B、123###C、***123D、123***标准答案:A知识点解析:此题考查的是I/O格式化输出。函数width(intn)设置输入输出宽度,当实际数据宽度小于制定的宽度时,多余的位置用填充字符填满;当实际数据宽度大于设置的宽度时,仍按实际宽度输出;函数fill(charc)用来设置填充字符。国家二级C++机试(运算符重载)模拟试卷第4套一、选择题(本题共34题,每题1.0分,共34分。)1、运算符重载是对已有的运算符赋予多重含义,因此()。A、可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B、可以改变一个已有运算符的优先级和操作数个数C、只能重载C++中已经有的运算符,不能定义新运算符D、C++中已经有的所有运算符都可以重载标准答案:C知识点解析:此题考查的是运算符重载。运算符重载是针对C++语言原有的运算符进行的,并不能创造新的运算符。2、关于运算符重载,下列表述中正确的是()。A、C++已有的任何运算符都可以重载B、运算符函数的返回类型不能声明为基本数据类型C、在类型转换符函数的定义中不需要声明返回类型D、可以通过运算符重载来创建C++中原来没有的运算符标准答案:C知识点解析:此题考查的是运算符重载的概念。C++语言规定,“,”、“*”、“一>+”、“::”和“?:”这五个运算符不能被重载,故选项A错误;运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项B说法是错误的;运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项D错误。3、下列运算符中,不能被重载的是()。A、&&B、!=C、.D、++标准答案:C知识点解析:此题考查的是运算符重载。在C++中,只有.、*、一>*、::、?:这五个运算符不能重载。4、下列关于运算符重载的描述中,正确的是()。A、运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B、一元运算符只能作为成员函数重载C、二元运算符重载为非成员函数时,参数表中有一个参数D、C++中可以重载所有的运算符标准答案:A知识点解析:此题考查的是运算符的重载。运算符重载为成员函数时,形参个数~般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。所以二元运算符重载为非成员函数时,参数表中应有两个参数,C选项错误:运算符重载为成员函数,若参数表中无参数,重载的是一元运算符,选项A正确:一元运算符中,“.”(取负)、“++”、“..”等均可重载为成员函数:C++语言中,“.”、“.*”、“一>*”、“::”、“?:”五个运算符不能重载。5、下列关于运算符重载的叙述中,错误的是()。A、有的运算符可以作为非成员函数重载B、所有的运算符都可以通过重载而被赋予新的含义C、不得为重载的运算符函数的参数设置默认值D、有的运算符只能作为成员函数重载标准答案:B知识点解析:“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造新的运算符。除了*,.*,.>*,::,?:,,这五个运算符以外,其他运算符都可以重载。6、下列关于运算符函数的描述中,错误的是()。A、运算符函数的名称总是以operator为前缀B、运算符函数的参数可以是对象C、运算符函数只能定义为类的成员函数D、在表达式中使用重载的运算符相当于调用运算符重载函数标准答案:C知识点解析:C++把重载的运算符视为特殊的函数,称为运算符函数。编译系统能够依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义。运算符函数作为非成员函数时,所有的操作数必须出现在参数表中。7、下列关于运算符重载的描述中,错误的是()。A、::运算符不能重载B、类型转换运算符只能作为成员函数重载C、将运算符作为非成员函数重载时必须定义为友元D、重载[]运算符应完成“下标访问”操作标准答案:C知识点解析:C++把重载的运算符视为特殊的函数,称为运算符函数。“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造出新的运算符。8、下列关于运算符重载的描述中,错误的是()。A、可以通过运算符重载在C++中创建新的运算符B、赋值运算符只能重载为成员函数C、运算符函数重载为类的成员函数时,第一操作数是该类对象D、重载类型转换运算符时不需要声明返回类型标准答案:A知识点解析:运算符重载应尽可能保持其原有的基本语义,而不是创建新的运算符。重载的运算符应该体现为原运算符的功能在新数据类型上的延伸,它的使用应当使程序中算法的表达式显得更流畅、自然,使阅读程序的人在不借助于其他说明资料的情况下就能够正确理解。9、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载机制可以为C++语言扩充新的运算符B、运算符重载的作用是使已有的运算符作用于类的对象C、重载运算符的操作数类型可以全部为基本类型D、所有运算符都可以被重载标准答案:B知识点解析:运算符重载就是赋予已有的运算符多重含义。通过重新定义运算符,使它能够用于特定类的对象执行特定的功能,这便增强了C++语言的扩充能力。运算符重载要注意以下3点:①不能重载的运算符包括::,.,*,?;②必须重载为成员函数的运算符包括[],(),一>,=;③在类成员函数中重载运算符是不允许返回引用的,会出现“返回局部变量的地址”警告。10、下列关于运算符重载的叙述中,正确的是()。A、通过运算符重载,可以定义新的运算符B、有的运算符只能作为成侵函数重载C、若重载运算符+,则相应的运算符函数名是+D、重载一个二元运算符时,必须声明两个形参标准答案:B知识点解析:此题考查的是运算符重载。C++中,“=”、“[]”、“()”、“一>”以及所有的类型转换符只能作为成员函数重载,故B选项正确;运算符重载只是赋予已有的运算符多重含义,并不是定义新的运算符;运算符函数的函数名就是在运算符前加上关键字operator。11、己知在一个类体中包含如下函数原型:VOLUMEoperator一(VOLUME)const;,下列关于这个函数的叙述中,错误的是()。A、这是运算符.的重载运算符函数B、这个函数所重载的运算符是一个一元运算符C、这是一个成员函数D、这个函数不改变类的任何数据成员的值标准答案:B知识点解析:此题考查的是运算符的重载。运算符“一”有一元和二元两种,在本题中它作为…个二元运算符,所以它不能更新对象的数据成员,也不能调用该类中没有const修饰的成员函数。12、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。A、operator+有两个参数,operator*有两个参数B、operator+有两个参数,operator*有一个参数C、operator+有一个参数,operator*有两个参数D、operator+有一个参数,operator*有一个参数标准答案:C知识点解析:此题考查的是运算符的重载。运算符可重载成员函数,也可重载为友元函数。当重载为成员函数时,运算符重载函数的形参个数要比运算符操作数的个数少一个:当重载为友元函数时,其参数个数应与操作数的个数相同。13、有如下程序:#inc1ude<iostream>usingnamespacestd;classComplex{doublere,im;public:Complex(doubler,doublei):re(r),im(i){}doublereal()const{returnre;}doubleimage()const{returnim;}Complex&operator+=(Complexa){re+=a.re,im+=a.im,return*this;}};ostream&operator<<(ostream&s,constComplex&z){renlms<<’(’<<z.real()<<’,’<<z.image()<<’)’;}intmain(){Complexx(1,一2),y(2,3);cout<<(x+=y)<<endl;return0;}执行这个程序的输出结果是()。A、(1,2)B、(2,3)C、(3,5)D、(3,1)标准答案:D知识点解析:此题考查了运算符重载应用。因为x和y都是Complex类的对象,Complex类中已经重载了+=运算符,表达式x+=y就等价与x.operator+=(y),执行后得到(3,1);接着计算cout<<(x+=y),其等价于调用operator<<(cout,(x+=y)),最后输出结果是(3,1)。14、有如下的运算符重载函数定义:doubleoperator+(inti,intk){returndouble(i+k);)但定义有错误,对这个错误最准确的描述是()。A、+只能作为成员函数重载,而这里的+是作为非成员函数重载的B、两个int型参数的和也应该是int型,而这里将+的返回类型声明为doubleC、没有将运算符重载函数声明为某个类的友元D、C++已经提供了求两个int型数据之和的运算符+,不能再定义同样的运算符标准答案:D知识点解析:此题考查的是运算符的重载。C++语言规定,不能作为非成员函数重载的运算符有=、[]、()、一>以及所有的类型转换运算符,故选项A错误;运算符重载对返回值类型没有限制,故选项B错误;C++并不强制要求非成员重载的运算符一定是某个类的友元,所以C选项错误;题目中重载的“+’’运算符的两个参数都是int类型,而C++已经提供了求两个int型数据之和的运算符+,编译器无法区分应该调用哪一个,.所以应该选择D选项。15、下列运算符函数中肯定不属于类FunNumber的成员函数的是()。A、intoperator一(FunNumber);B、FunNumberoperator一();C、FunNumberoperator一(int);D、intoperator一(FunNumber,FunNumber);标准答案:D知识点解析:此题考查的是运算符“.”的重载。“,”运算符有一元和二元两种,且均可以重载为成员函数和非成员函数。运算符重载为成员函数时,形参个数一般为运算符元数减1;重载为非成员函数时,形参个数一般和运算符元数相等。所以,“,”运算符重载为成员函数时,参数可以是0个或1个:而重载为非成员函数时,参数个数可以是1个或2个。所以D选项,肯定是重载为非成员函数。16、下列是重载乘法运算符的函数原型声明,其中错误的是()。A、Myclassoperator*(double,double);B、Myclassoperator*(double,Myclass);C、Myclassoperator*(Myclass,double);D、Myclassoperator*(Myclass,Myclass);标准答案:A知识点解析:此题考查的是运算符重载。本题中,选项A重载运算符“+”使用的形参是两个double,而系统中的“*”运算原本就能计算两个double,所以这样违反了重载函数的原则,当执行a*b这样的表达式时,系统不能识别是否执行运算符重载函数。故答案是A选项。17、有如下程序:#inc1ude<iostream>Usingnamespacestd;classAmcunt{intamount,public;Amount(intn=0):amount(n){}IntgetAmount()const{returnamount,}Amount&operator+=(Amourita){amount+=a.amount,retum;}};intmain(){Amountx(3),y(7);X+=y;cout<<x.getAmount()<<endl;return0:}己知程序的运行结果是10,则下划线处缺失的表达式是()。A、*thisB、thisC、&amountD、amount标准答案:A知识点解析:此题考查的是“+”运算符重载和this指针。语句amount+=a.amount,实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amount&,所以横线处填入*this。18、如果表达式a>=b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为()。A、a.operator>=(b)B、b.operatotr>=(a)C、operator>=(a,b)D、operator>=(b,a)标准答案:C知识点解析:运算符函数作为非成员函数时,没有隐含的this指针,因此所有的操作数必须出现在参数表中,对于二元运算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。19、己知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为()。A、a.operator++(1)B、operator++(a)C、operator++(a,1)D、a.operator++()标准答案:C知识点解析:本题主要是对运算符重载的考查。“++”实现增加1,所以除了a之外的另一个参数默认为1。20、有如下程序:#inc1ude<iostream>usingnamespacestd;classPair{intm,intn;public:Pair(inti,intj):m(i),n(j){}booloperator>(Pairp)const;//须在类体外给出定义};intmain(){Pairpl(3,4),p2(4,3),p3(4,5);cout<<(pl>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2);retum0;}运算符函数。perator>的功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。程序输出0101,下列对运算符重载函数的正确定义是()。A、boolPair::operator>(Pairp)const{if(m!一p.m)returnm>p.m;returnn>p.n;)B、boolPair::operator>(Pairp){if(mf=p.m)returnm>p.m;retumn>p.n;}C、boolPair::operator>(Pairp)const{if(m>p.m)returntrue;returnn>p.n;)D、boolPair::operator>(Pairp){if(m>p.m)returntrue;returnn>p.n;}标准答案:A知识点解析:按照比较规则:首先比较两对象的m成员,m大者为大:当m相等时比较n,n大者为大。这条规则的用C++写出来就是选项A。21、将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是()。A、不合法的运算符B、一元运算符C、无操作数的运算符D、二元运算符标准答案:B知识点解析:对于一元或二元运算符函数作为成员函数重载时,第一操作数就是对象本身,并不显式地出现在参数表中。即第一操作数仅以this指针的形式隐含存在于参数表中。因此,对于一元运算符参数表是空的;对于二元运算符参数表中只有一个参数,它代表第二操作数。22、将前缀运算符“一一”重载为非成员函数,下列原型中,能正确用于类中说明的是()。A、Decr&operator一一(int);B、Decroperator一一(Decr&,int);C、friendDecr&operator一一(Decr&);D、friendDecroperator一一(Decr&,int);标准答案:C知识点解析:因为要作为非成员函数重载,所以加friend,作为前缀操作,其返回的操作结果是对该变量的引用,所以类型为Decr&,操作数出现在参数表中,应声明为引用,即Decr&。23、将运算符“+”重载为非成员函数,下列原型声明中,错误的是()。A、Myc1oCkoperator+(Myc1ock,long);B、Myc1oCkoperator+(Myc1ock,Myc1ock);C、Myc1oCkoperator+(long,long);D、Myc1oCkoperator+(long,Myc1ock);标准答案:C知识点解析:运算符重载不能有二义性,故选项C)不能区分运算符的准确含义。24、下列关于赋值运算符“=”重载的叙述中,正确的是()。A、赋值运算符只能作为类的成员函数重载B、默认的赋值运算符实现了“深层复制”功能C、重载的赋值运算符函数有两个本类对象作为形参D、如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符标准答案:A知识点解析:赋值运算符“=”只能作为成员函数重载。25、若在表达式y/x中,"/"是作为成员函数重载的运算符,则该表达式还可以表示为()。A、x.operator/(y)B、operator/(x,y)C、y.operator/(x)D、operator/(y,x)标准答案:C知识点解析:运算符函数的函数名是由运算符前加关键字operator构成的。所以当“/”作为运算符重载后,其格式为0perator/。所以其作为成员函数调用时的格式为y.operator/(x)。26、有类定义如下:classType{public:Type(inti=0);Typeoperator一(int);friendTypeoperator+(Type,Type);private:intval,};若有对象定义Typec1;则下列语句序列中,错误的是()。A、Type(3)+c1;B、c1+Type(3);C、3一c1;D、c1一3;标准答案:C知识点解析:由于在类Type中对“.”进行了重载,所以根据“.”重载的形式定义,cl一3是正确的,而3一cl是错误的表达式。27、有如下类模板定义:template<typenameT>classBigNumber{longn;public:BigNumber(Ti):n(i){}BigNumberoperator+(BigNumberb){retumBigNumber(n+b.n);}}己知bl.b2是BigNumber的两个对象,则下列表达式中错误的是()。A、bl+b2B、b1+3C、3+blD、3+3标准答案:C知识点解析:C++运算符的重载有两个方式,一种是做为成员函数,另一种是做为友元函数。前种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:成员方式为COperatoroperator+(COperator&op);,在调用的过程中我们可以理解为result=operator+(op);友元方式为friendCOperatoroperator一(C0perator&opl,COperator&op2);,在调用的过程中我们可以理解为result=operator一(opl,op2);。对于本题来说,整数3与bl相加时,3是int型,bl是BigNumbe<>型,int型不能和别的型做运算。28、为类Matrix重载下列运算符时,只能作为Matrix类成员函数重载的运算符是()。A、+B、=C、<<D、++标准答案:B知识点解析:在C++中,=、[]、()、一>以及所有的类型转换运算符只能作为成员函数重载。29、有如下类定义classMyclasspublic:Private:intdata;};若要为Myclass类重载流输入运算符>>,使得程序中可以“cin>>obj;”形式输入Myclass类的对象obj,则横线处的声明语句应为()。A、friendistream&operator>>(istream&is,Myclass&a);B、friendistream&operator>>(istream&is,Myclassa);C、istream&operator>>(istream&is,Myclass&a);D、istream&operator>>(istream&is,Myclassa);标准答案:A知识点解析:C++的输入运算符>>作为非类成员函数重载。在一个类中,可将输入运算符>>声明为友元函数,在类MyClass重载输入运算符>>的形式如选项A)所示。30、若为Fraction类重载前增1运算符++,应在类体中将其声明为()。A、Fraction&operator++();B、Fraction&operator++(int),C、friendFraction&operator++();D、friendFraction&operator++(int);标准答案:A知识点解析:在类Fraction中重载前增1运算符++时,其声明形式为Fraction&operator++();在类Fraction中重载后增1运算符++时,其声明形式为Fraction&operator++(int);。31、已知类Myc1ock中未显式定义构造函数,并重载了加法运算符,使得下面的语句序列能够正确执行:Myc1ockc1,c2;//……c2=c1+10;由此可知:为类Myc1ock重载的“+”运算符函数的声明是()。A、friendMyc1ockoperator+(Myc1ock,int);B、friendMyc1ockoperator+(Myc1ock,Myc1ock);C、friendMyc1ockoperator+(int,Myc1ock);D、Myc1ockoperator+(Myc1ock);标准答案:A知识点解析:由表达式c2=ci+io可知,在对“+”进行重载时,第一操作数是MyClock类的对象,而第二操作数是一个整型数据。32、已知将运算符“+”和“*”作为类Complex的成员函数重载,设c1和c2是类Complex的对象,则表达式c1+c2*c1等价于()。A、c1.operator*(c2.operator+(c1))B、c1.operator+(c2.operator*(c1)C、c1.operator*(c1.operator+(c2))D、c2.operator+(c1.operator*(c1)标准答案:B知识点解析:表达式cl+c2*cl的含义是cl加上c2与cl的积。33、下列运算符不能重载为友元函数的是()。A、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年从零到精通学徒安全培训内容
- 2026年幼儿教育质量监督协议
- 2026年油田运营管理合同协议
- 2026年安全培训内容包括什么重点
- 2026年监控施工安全培训内容核心要点
- 阿坝藏族羌族自治州茂县2025-2026学年第二学期五年级语文第五单元测试卷(部编版含答案)
- 2026年商场消防安全培训内容核心要点
- 九江市修水县2025-2026学年第二学期五年级语文期中考试卷(部编版含答案)
- 襄樊市枣阳市2025-2026学年第二学期二年级语文第四单元测试卷(部编版含答案)
- 宝鸡市金台区2025-2026学年第二学期五年级语文第六单元测试卷(部编版含答案)
- 【揭阳】2025年广东省揭阳市惠来县卫健系统公开招聘事业单位工作人员152人笔试历年典型考题及考点剖析附带答案详解
- 2025年北京市西城区社区工作者招聘笔试真题及答案
- 2026年及未来5年市场数据中国演艺行业市场发展数据监测及投资潜力预测报告
- Z20名校联盟2026届高三语文第二次联考考场标杆文9篇:“出片”
- 部编版五年级下册第二单元 口语交际《怎样表演课本剧》考题作业设计
- 肾内科住院医师规范化培训
- 2026年员工安全操作培训
- 2026工业机器人核心零部件行业现状与发展趋势报告
- 蚯蚓养殖技术操作指南
- mckinsey -国家健康:更健全的健康状况更强劲的经济发展 The health of nations Stronger health,stronger economies
- 机动车检测维修工程师考试题及答案
评论
0/150
提交评论