运算符重载知识题

合集下载

运算符重载基础概念练习题

运算符重载基础概念练习题

运算符重载基础概念练习题1、下列运算符中,()运算符在C++中不能重载。

A=B()C::Ddelete2、下列运算符中,()运算符在C++中不能重载。

A:B[]CnewD&&3、下列关于C++运算符函数的返回类型的描述中,错误的是()。

A可以是类类型B可以是int类型C可以是void类型D可以是float类型4、下列运算符不能用友元函数重载的是()。

A+B=C某D<<5、在重载运算符函数时,下面()运算符必须重载为类成员函数形式。

A+B-C++D->6、下列关于运算符重载的描述中,正确的是()A运算符重载可以改变运算符的操作数的个数B运算符重载可以改变优先级C运算符重载可以改变结合性D运算符重载不可以改变语法结构7、友元运算符obj>obj2被C++编译器解释为()。

Aoperator>(obj1,obj2)B>(obj1,obj2)Cobj2.operator>(obj1)Dobj1.oprator>(obj2)8、在表达式某+y某z中,+是作为成员函数重载的运算符,某是作为非成员函数重载的运算符。

下列叙述中正确的是()。

Aoperator+有两个参数,operator某有两个参数Boperator+有两个参数,operator某有一个参数Coperator+有一个参数,operator某有两个参数Doperator+有一个参数,operator某有一个参数9、重载赋值操作符时,应声明为()函数。

A友元B虚C成员D多态10、在一个类中可以对一个操作符进行()重载。

A1种B2种以下C3种以下D多种11、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。

A.作为友元函数重载的1元运算符B.作为成员函数重载的1元运算符C.作为友元函数重载的2元运算符D.作为成员函数重载的2元运算符12、在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。

c 运算符的重载习题答案

c  运算符的重载习题答案

1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。

运算符重载的实质是函数重载,是类的多态性特征。

1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。

但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。

类类型转换函数既没有参数,也不显式给出返回类型。

类类型函数中必须有return 表达式的语句返回函数值。

一个类可以定义多个类类型转换函数。

1.3运算符重载时其函数名由operator运算符构成。

成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。

2.简答题2.2简述运算符重载的规则。

2.2简述重载单目运算符++、--,前置和后置时的差别。

2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数?2.4 构造函数作为类型转换函数的条件是什么。

3.选择题3.1在下列运算符中,不能重载的是(B)A.!B. sizeofC. newD. delete3.2 不能用友员函数重载的是(A)。

A.=B.==C.<=D.++3.3下列函数中,不能重载运算符的函数是(B)。

A.成员函数B.构造函数C.普通函数D.友员函数3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。

A.operator*(i.operator++(),k) B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。

A.这是运算符-的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变数据成员的值3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

国家二级C++机试(运算符重载、C++流)模拟试卷3(题后含答案及解析)

国家二级C++机试(运算符重载、C++流)模拟试卷3(题后含答案及解析)

国家二级C++机试(运算符重载、C++流)模拟试卷3(题后含答案及解析)题型有:1. 选择题选择题1.通过运算符重载,可以改变运算符原有的( )。

A.操作数类型B.操作数个数C.优先级D.结合性正确答案:A解析:此题考查的是运算符重载。

运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。

故本题选项A正确。

知识模块:运算符重载2.下列有关运算符重载的叙述中,正确的是( )。

A.运算符重载是多态性的一种表现B.C++中可以通过运算符重载创造新的运算符C.C++中所有运算符都可以作为非成员函数重载D.重载运算符时可以改变基结合性正确答案:A解析:此题考查的是运算符重载。

C++中运算符重载是多态性的一种表现:运算符重载是针对C++原有运算符进行的,不可能通过重载创造出新的运算符;除了“.”、“.*”、“->*”、“::”、“?:”这五个运算符外,其它运算符都可以重载;但“=”“[]”“->”及所有的类型转换运算符只能作为成员函数重载,运算符重载不可改变其结合性、操作数个数和优先级。

知识模块:运算符重载3.下列关于运算符函数的描述中,错误的是( )。

A.运算符函数的名称总是以operator为前缀B.运算符函数的参数可以是对象C.运算符函数只能定义为类的成员函数D.在表达式中使用重载的运算符相当于调用运算符重载函数正确答案:C解析:C++把重载的运算符视为特殊的函数,称为运算符函数。

编译系统能够依据使用运算符的不同环境,即参数(操作数)的数量或类型的差异,区分同一运算符的不同含义。

运算符函数作为非成员函数时,所有的操作数必须出现在参数表中。

知识模块:运算符重载4.下列关于运算符重载的叙述中,正确的是( )。

A.通过运算符重载机制可以为C++语言扩充新的运算符B.运算符重载的作用是使已有的运算符作用于类的对象C.重载运算符的操作数类型可以全部为基本类型D.所有运算符都可以被重载正确答案:B解析:运算符重载就是赋予已有的运算符多重含义。

运算符重载练习题.

运算符重载练习题.

运算符重载一.单项选择题1.下列运算符中,运算符在C++中不能重载。

A.?: B.+ C. D.<=解:C++中不能被重载的运算符有:·,一,::,?:。

本题答案为A。

2.下列运算符中,运算符在C++中不能重载。

A.&& B.[] C.:: D.new解:c++中不能被重载的运算符有:·,·+,::,?:。

本题答案为c。

3.下列关于运算符重载的描述中,是正确的。

A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。

本题答案为D。

4.友元运算符objl>obj2被C++编译器解释为。

A.operator>(objl,obj2) B.>(obj1,obj2)C.obj2.operator:>(obj1) D.objl.operator>(obj2)解:重载为友元函数的运算符的调用形式如下:operator<运算符>(<参数1>,<参数2>)等价于:<参数1><运算符><参数2>本题答案为A。

5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。

A、list & list::operator==(const list &a);B、list list::operator==(const list &a);C、bool & list::operator==(const list &a);D、bool list::operator==(const list &a);6. 以下类中分别说明了“+=”和“++”运算符重载函数的原型。

如果主函数中有定义:fun m,c,d;,那么,执行语句c=m++; 时,编译器把m++解释为: (33)A) c.operator++(m); B) m=operator++(m);C) m.operator++(m); D) operator++(m);class fun{ public:.. .. ..fun operator +=(fun );friend fun operator ++(fun &,int);};答案:D7. 在第33题中,当执行语句d+=m; 时,C++编译器对语句作如下解释: (34)A. d=operator+=(m);B. m=operator+=(d);C. d.operator+=(m);D. m.operator+=(d);答案:C8. 设有以下类定义,其中说明了“+”运算符重载函数的原型。

运算符重载自考习题

运算符重载自考习题

2000.1019、重载的运算符仍然保持其原来的优先级、结合性和____________。

25、下面程序希望产生的输出为4+3i,但是运行输出是3+3i,请指出错误并改正#include <iostream.h>class complex {int real; // 实部int imag; // 虚部public:complex(int r=0,int i=0): real(r),imag(i) {}void show() { cout<<real<<"+"<<imag<<"i"<<endl;}complex operator++() { real++; return * this; }};void main() {complex c(2,3);++++c;c.show();}Key:complex &operator++() { real++; return * this; }2001.1029.下面是类fraction(分数)的定义,其中重载的运算符<<以分数形式输出结果,例如将三分之二输出为2/3。

在横线处填上适当字句。

class fraction{int den; //分子int num; //分母friend ostream& operator<<(ostream&,fraction);…};ostream& operator <<(ostream& os,fraction fr){_________;return _________;}29.os<<fr.den<<′/′<<fr.num os2002.106.如果表达式++i*k中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( )A.operator*(i.operator++(),k)B.operator*(operator++(i),k)C.i.operator++().operator*(k)D.k.operator*(operator++(i))33.写出下面程序的输出结果。

运算符重载题目

运算符重载题目

二、运算符重载(运算符重载的基本概念、运算符重载方法、运算符重载规则、特殊运算符重载和类型转换)单选题10道:1、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )。

A. AB operator+(AB& a,AB& b)B. AB operator+(AB& a)C. operator+(AB a)D. AB &operator+( )2、关于运算符重载,下面的叙述错误的是()。

A.运算符预定义的操作数个数不能改变B.重载不能改变运算符的优先级顺序C.参数的类型没有限制D.尽量使其与原意保持一致3、在一个类中可以对一个操作符进行(D )重载。

A. 1种B. 2种以下C. 3种以下D. 多种4、重载赋值操作符时,应声明为(C )函数。

A. 友元B. 虚C. 成员D. 多态5、要在类对象使用运算符,以下不必被重载的运算符是( A )。

A. []B. =C. ++D. --6、下列运算符中,不能重载的是(C )A.new B.() C.::D.&&7、在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

下列叙述中正确的是( A )。

A)operator+有两个参数,operator*有两个参数B)operator+有两个参数,operator*有一个参数C)operator+有一个参数,operator*有两个参数D)operator+有一个参数,operator*有一个参数8、友元运算符obj1>obj2被C++编译器解释为()。

A) operator>(obj1,obj2) B) >(obj1,obj2)C) obj1.operator>(obj2) D) obj2.operator>(obj1)9、已知某个类的友元函数重载了+=和-,a,b,c是该类的对象,则“a+=b-c”被C++编译器解释为()。

C++运算符重载题库及答案

C++运算符重载题库及答案

运算符重载一.单项选择题1.下列运算符中,运算符在C++中不能重载。

A.?:B.+C.D.<=解:C++中不能被重载的运算符有:·,一,::,?:。

本题答案为A。

2.下列运算符中,运算符在C++中不能重载。

A.&&B.[]C.::D.new解:c++中不能被重载的运算符有:·,·+,::,?:。

本题答案为c。

3.下列关于运算符重载的描述中,是正确的。

A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。

本题答案为D。

4.友元运算符objl>obj2被C++编译器解释为。

A.operator>(objl,obj2) B.>(obj1,obj2)C.obj2.operator:>(obj1) D.objl.operator>(obj2)解:重载为友元函数的运算符的调用形式如下:operator<运算符>(<参数,<参数2>)等价于:<参数1><运算符><参数2>本题答案为A。

5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。

A、list&list::operator==(const list&a) ;B、list list::operator==(const list&a) ;C、bool&list::operator==(const list&a);D、bool list::operator==(const list&a);6.以下类中分别说明了“+=”和“++”运算符重载函数的原型。

如果主函数中有定义:fun m,c,d;,那么,执行语句c=m++;时,编译器把m++解释为:(3)A)c.o p e r a t o r++(m);B)m=o p e r a t o r++(m);C)m.o p e r a t o r++(m);D)o p e r a t o r++(m);class fun{public:....f u n o p e r a t o r+=(f u n);f r i e n d f u n o p e r a t o r++(f u n&,i n t);};答案:D7.在第33题中,当执行语句d+=m;时,C++编译器对语句作如下解释:(34)A.d=operator+=(m);B.m=operator+=(d);C. d.operator+=(m);D.m.operator+=(d);答案:C8.设有以下类定义,其中说明了“+”运算符重载函数的原型。

C++实验21 运算符重载

C++实验21 运算符重载

实验21 运算符重载一、实验目的和要求1.理解运算符重载的作用。

2.掌握实现运算符重载的方法及几种特殊运算符的重载格式。

3.进一步锻炼针对类的编程能力。

二、实验准备☞知识点1.运算符重载定义的一般格式、基本概念。

2.运算符函数重载的两种形式。

3.通过成员函数实现运算符重载的一般格式。

4.通过友元函数实现运算符重载的一般格式。

5.”++”运算符的重载。

6.”=”赋值运算符的重载。

☞课前练习题1.重载运算”+”,实现a+b运算,则。

A.a必须为对象,b可为整数或实数B.a和b必须为对象C.b必须为对象,a可为整数或实数D.a和b均可为整数或实数2.在C++中,运算符的重载有两种实现方法,一种是通过成员函数来实现,另一种则通过_________来实现。

3.不能重载的5个运算符是:______、______、______、______、_________。

4.重载赋值运算符必须通过________函数实现。

5.用成员函数实现前置”--”运算符重载的一般格式为:_______________________________。

6.用友元函数实现后置”--”运算符重载的一般格式为:_______________________________。

☞分析1.有以下程序:#include<iostream.h>class C{private:double x;public:C( ) { x=0.0; }C(double a) { x=a; }friend C operator--(C t) //行A{t.x--;return t;}void show(){cout<<x<<endl;}};void main(){C c(5.6);(--c).show(); //行Bc.show(); //行C}请回答问题:①从行A 的形式上看,这是利用________函数实现__________运算符的重载。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第7章运算符重载和多态性一、选择题(共30分,每题1分)1.下列运算符中,()运算符在C++中不能重载。

A.?:B.[]C. newD.++2.友元重载运算符obj1>obj2被C++编译器解释为()。

A.operator >(obj1,obj2) B.>(obj1,obj2)C.obj2.operator >(obj1) D.obj1.operator >(obj2)3.重载赋值操作符时,应声明为()函数。

A.友元B.虚C.成员D.多态4.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。

A. 作为友元函数重载的1元运算符B. 作为成员函数重载的1元运算符C. 作为友元函数重载的2元运算符D. 作为成员函数重载的2元运算符5.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()。

A. 该运算符是一个单目运算符。

B. 该运算符函数有一个隐含的参数this。

C. 该运算符函数是类的成员函数。

D. 该运算符函数是类的友元函数。

6. 关于运输符重载,下列表述中正确的是()。

A.C++已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型. C.在类型转换符函数的定义中不需要声明返回类型D.可以通过运算符重载来创建C++中原来没有的运算符7. C ++流中重载的运算符>>是一个()。

A. 用于输出操作的非成员函数B. 用于输出操作的成员函数C. 用于输入操作的非成员函数D. 用于输入操作的成员函数8. 若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。

A. Data +(Data);B. Data operator+(Data);C. Data +operator(Data);D. operator +(Data, Data);9. 下列运算符中哪些是不能够被重载的()。

A. .,.*,sizeof,::,?:B. ++,--,new,= =C. new,delete,>=,[ ]D. +,-,=,delete10. 在名为BigNumber类的类体中对运算符函数double进行如下声明:operator double(BigNumbe);函数声明中有一个明显的错误,这个错误就是()。

A.参数表中不应该有任何参数B.缺少对函数返回类型的说明C.参数声明中缺少参数变量D.函数声明中缺少函数体11. 下列关于运算符重载的描述中,正确的是()。

A. 运算符重载成为成员函数时,若参数表中无参数,重载是一元运算符B. 一元运算符只能作为成员函数重载C. 二元运算符重载成为非成员函数时,参数表中有一个参数D. C++中可以重载所有的运算符12. 在语句“cout<<’A’”中,cout是()。

A. 类名B. 函数名C. 对象名D. C++的关键字13.下面是重载为非成员函数的运算符的函数原型,其中错误的是()。

A.Fraction operator +(Fraction, Fraction)B.Fraction& operator =(Fraction&, Fraction)C.Fraction operator -(Fraction,Fraction)D.Fraction& operator *(Fraction, Fraction)14. 下列关于运算符重载的描述中,错误的是()。

A. 运算符重载不能改变操作数的个数、优先级、结合性和运算符的语法结构B. 所有的运算符都可以重载C. 运算符函数的调用必须使用关键字operatorD. 在C++语言中不可以通过运算符重载创造出新的运算符15. 如果表达式a>=b,中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为()。

A. a.operator>=(b)B. a.operator>=(a)C. operator>=(a, b)D. a.operator>=(b, a)16. 下列有关运算符函数的描述中,错误的是()。

A. 运算符函数的名称总是以operator为前缀的B. 运算符函数的参数可以是对象C. 运算符函数只能定义为类的成员函数D. 在表达式中使用重载的运算符相当于调用运算符重载函数17. 将前缀运算符“--”重载为非成员函数,下列原型中,正确的是()。

A. Decr &operator- - (int);B. Decr operator- - (Decr &, int);C. friend Decr &operator- - (Decr &, int);D. friend Decr &operator- - (Decr &);18.下列关于C++预定义流对象的叙述中,正确的是()。

A.cin是C++预定义的标准输入流对象B.cin是C++预定义的标准输入流类C.cout是C++预定义的标准输入流对象D.cout是C++预定义的标准输入流类19.有如下类定义class MyClass{ public:________________________private:int data;};若要为MyClass类重载流输入运算符“>>”,使得程序中可以用“cin>>obj;”的形式改变MyClass 类的对象obj中数据成员data的值,则在下划线处的声明语句应为()。

A.friend istream& operator>>(istream& is, MyClass &a);B.friend istream& operator>>(istream& is, MyClass a);C.istream& operator>>(istream& is, MyClass &a);D.istream& operator>>(istream& is, MyClass a);20.若要在Viz类中将*重载为一元运算符,下列重载函数声明中肯定有错的是()。

A.Viz operator *();B.Viz operator *(Viz);C.int operator *(Viz);D.Viz operator *(Viz, Viz);21.已知一运算符函数没有参数,下列关于该运算符函数的表述中错误的是()。

A.该运算符函数是成员函数B.该运算符是一元运算符C.由于无参数,使用该运算符时不需要操作数D.该运算符不是后缀++或后缀--22.现需要将Matrix类对象使用的关系运算符“==”重载为成员函数,用于判断两个对象是否相等,以下正确且合理的函数声明是()。

A.Matrix& operator==(const Matrix &a);B.Matrix operator==(const Matrix &a);C.bool& operator==(const Matrix &a);D.bool operator==(const Matrix &a);23. 关于赋值运算符=的重载,下列表述中错误的是()。

A.=的重载函数必须且只能有一个参数B.一个类即使没有重载=,也可以用=为该类的对象赋值C.为了实现像“x=y=z;”这样的连续赋值,=的重载函数的返回值必须声明为引用D.=可以重载为一个类的友元函数24.下列运算符中,可以重载为类的友元函数的运算符是()。

.A.= B.( ) C.. D.<<25.有如下类的定义:class MyClass{public:MyClass(double d=0.0):val(d){ }//类型转换运算符double的定义private:double val;};若要使下列语句序列能够正常运行,下划线处的语句应为()。

MyClass x(2.1);cout<<double(x);A.operator double() const {return val;}B.friend operator double() const {return val;}C.double operator () const {return val;}D.friend double operator () const {return val;}26.若为类MyClass重载运算符“+”,下列声明中,错误的是()。

A.friend MyClass operator+(double, double);B.friend MyClass operator+(double, MyClass);C.friend MyClass operator+(MyClass, double);D.friend MyClass operator+(MyClass, MyClass);27.下列关于运算符重载的叙述中,正确的是()。

A.运算符重载的作用是使已有的运算符作用于类的对象B.通过运算符重载机制可以为C++语言扩充新的运算符C.重载运算符的操作类型可以全部为基本类型D.C++中已有的任何运算符都可以重载28. 运算符重载时以下性质一定会保持的是()。

A.返回值类型、操作数类型B.操作数类型、优先级C.优先级、操作数个数D.返回值类型、结合性29.下列关于运算符重载的描述中错误的是()。

A.不能通过运算符重载在C++中创建新的运算符B.赋值运算符=只能重载为成员函数C.运算符函数重载为类的成员函数时,第一操作数是该类对象D.重载类型转换运算符时,应声明返回值为void30.重载流插入运算符<<时,下列做法不合理的是()。

A.将运算符函数的返回值类型设为ostream &B.将运算符函数的第一个参数设为ostream &C.为运算符函数设置两个参数D.将运算符定义为类的成员函数二、填空题(共28分,每空1分)1.利用成员函数对二元运算符重载,其左操作数为,右操作数为。

2.对双目运算符而言,成员运算符函数带有参数,而友元运算符函数带有参数;对单目运算符而言,成员运算符函数参数,而友元运算符函数带参数。

3.重载运算符的函数不能有参数,否则就改变了运算符参数的个数。

4.对于用户自定义的类类型与其他数据类型之间的转换,通常有两种方法:通过进行类型转换;通过进行类型转换。

5.运算符重载函数一般采用两种形式:一是;二是。

相关文档
最新文档