运算符重载练习题
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(题后含答案及解析)题型有: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. 设有以下类定义,其中说明了“+”运算符重载函数的原型。
运算符重载知识题

.《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第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. 下列运算符中哪些是不能够被重载的()。
国家二级C++机试(运算符重载、模板和C++流)模拟试卷1

国家二级C++机试(运算符重载、模板和C++流)模拟试卷1(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.运算符重载是对已有的运算符赋予多重含义,因此( )。
(分数:2.00)A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载C++中已经有的运算符,不能定义新运算符√D.C++中已经有的所有运算符都可以重载解析:解析:此题考查的是运算符重载。
运算符重载是针对C++语言原有的运算符进行的,并不能创造新的运算符。
2.关于运算符重载,下列表述中正确的是( )。
(分数:2.00)A.C++已有的任何运算符都可以重载B.运算符函数的返回类型不能声明为基本数据类型C.在类型转换符函数的定义中不需要声明返回类型√D.可以通过运算符重载来创建C++中原来没有的运算符解析:解析:此题考查的是运算符重载的概念。
C++语言规定,“.”、''*''、''->*''、“::”和“?:”这五个运算符不能被重载,故选项A错误;运算符函数的返回类型由该运算符所组成的表达式的值的类型来决定,故选项B说法是错误的:运算符重载是针对原有运算符,并不能通过重载创造出新的运算符,故选项D错误。
3.通过运算符重载,可以改变运算符原有的( )。
(分数:2.00)A.操作数类型√B.操作数个数C.优先级D.结合性解析:解析:此题考查的是运算符重载。
运算符重载具有保持其原有的操作数个数、优先级、语法结构和结合性不变的特性。
故本题选项A正确。
4.下列运算符中,不能被重载的是( )。
(分数:2.00)A.&&B.!=C..√D.++解析:解析:此题考查的是运算符重载。
在C++中,只有.、*、->*、::、?:这五个运算符不能重载。
5.下列关于运算符重载的描述中,正确的是( )。
c++运算符重载习题

Task8—1/*1. 定义一个复数类Complex,重载运算符“+",使之能用于复数的加法运算。
将运算符函数重载为非成员、非友元的普通函数.编写程序,求两个复数之和*/#include<iostream>using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}void display();double real;double imag;};void Complex::display(){cout〈<”("〈〈real<<”,”〈<imag<<”i)";}Complex operator +(Complex &c1,Complex &c2){Complex p;p。
real=c1。
real+c2.real;p.imag=c1.imag+c2。
imag;return p;}int main(){Complex c1(3,5),c2(2,5),c3;c1.display();cout〈〈”+";c2。
display();cout〈〈”=”;c3=c1+c2;c3.display();}Task8—2/*2。
定义一个复数类Complex,重载运算符“+”、”-“、”*”、”/”,使之能用于复数的加、减、乘、除。
运算符重载函数作为Complex类的成员函数, 编程,分别求两个复数之和差积商。
*/#include<iostream〉using namespace std;class Complex{public:Complex(){real=0;imag=0;}Complex(double r,double i){real=r;imag=i;}Complex operator+(Complex &c2);Complex operator—(Complex &c2);Complex operator*(Complex &c2);Complex operator/(Complex &c2);void display();private:double real;double imag;};Complex Complex::operator +(Complex &c2){Complex c;c.real=real+c2.real;c。
c运算符的重载习题答案

1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。
运算符重载的实质是函数重载,是类的多态性特征。
1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。
但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。
类类型转换函数既没有参数,也不显式给出返回类型。
类类型函数中必须有return 表达式的语句返回函数值。
一个类可以定义多个类类型转换函数。
1.3运算符重载时其函数名由operator运算符构成。
成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。
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++流)模拟试卷1(题后含答案及解析)

国家二级C++机试(运算符重载、C++流)模拟试卷1(题后含答案及解析)题型有:1. 选择题选择题1.运算符重载是对已有的运算符赋予多重含义,因此( )。
A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义B.可以改变一个已有运算符的优先级和操作数个数C.只能重载C++中已经有的运算符,不能定义新运算符D.C++中已经有的所有运算符都可以重载正确答案:C解析:此题考查的是运算符重载。
运算符重载是针对C++语言原有的运算符进行的,并不能创造新的运算符。
知识模块:运算符重载2.下列运算符中,不能被重载的是( )。
A.&&B.!=C..D.++正确答案:C解析:此题考查的是运算符重载。
在C++中,只有.、.*、->*、::、?:这五个运算符不能重载。
知识模块:运算符重载3.下列关于运算符重载的叙述中,错误的是( )。
A.有的运算符可以作为非成员函数重载B.所有的运算符都可以通过重载而被赋予新的含义C.不得为重载的运算符函数的参数设置默认值D.有的运算符只能作为成员函数重载正确答案:B解析:“运算符重载”是针对C++中原有运算符进行的,不可能通过重载创造新的运算符。
除了.,.*,->*,::,?:这五个运算符以外,其他运算符都可以重载。
知识模块:运算符重载4.下列关于运算符重载的描述中,错误的是( )。
A.::运算符不能重载B.类型转换运算符只能作为成员函数重载C.将运算符作为非成员函数重载时必须定义为友元D.重载[]运算符应完成“下标访问”操作正确答案:C解析:C++把重载的运算符视为特殊的函数,称为运算符函数。
“运算符重载”是针对CH中原有运算符进行的,不可能通过重载创造出新的运算符。
知识模块:运算符重载5.下列关于运算符重载的叙述中,正确的是( )。
A.通过运算符重载,可以定义新的运算符B.有的运算符只能作为成员函数重载C.若重载运算符+,则相应的运算符函数名是+D.重载一个二元运算符时,必须声明两个形参正确答案:B解析:此题考查的是运算符重载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算符重载一.单项选择题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. 设有以下类定义,其中说明了“+”运算符重载函数的原型。
这是一个友元函数,当类外有语句a=b+c;访问这个友元函数时,C++编译器把对语句a=b+c;解释为:operator +(b,c)其中: (35)A. a,b,c都必须是Com的对象B. a,b都必须是Com的对象C. a,c都必须是Com的对象D. b,c都必须是Com的对象class Com{ ... ...friend Com operator +(... ...);};答案:B二.填空题1.利用成员函数对双目运算符重载,其左操作数为,右操作数为。
解:将双目运算符重载为类的成员函数时,由于this指针在每次非静态成员函数操作对象时都作为第一个隐式参数传递给对象,因此它充当了双目运算符的左操作数,而该成员函数的形参则表示双目运算符的右操作数。
本题答案为:this指针成员函数参数。
2.运算符重载仍然保持其原来的优先级、和。
解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构。
本题答案为:结合性语法结构。
3.为了满足运算符“+”的可交换性,必须将其重载为。
解:以友元函数方式重载运算符可满足运算符“+”的可交换性,因为两个操作数都作为参数,例如,有以下程序:#include<iostream.h>class Sample{int n;public:Sample(){}Sample(int i){n=i;}friend Sample operator+(Sample,Sample);void disp() {cout<<“n=”<<n<<endl; }}Sample operator+(sample s1,Sample s2){return sample(S1.n+s2.n);}void main(){Sample S1(2),s2(5),s3;cout<<”S1:”;S1.disp();cout<<”s2:”;s2.disp();s3=S1+S2;cout<<”s3:”; s3.disp();S3=S2+S1;cout<<”s3:”;s3.disp();}程序执行结果如下:从中看到,执行sl+s2和s2+sl的结果是相同的,从而满足运算符“+”的交换性。
所以本题答案为:友元函数。
4.在c++中,运算符的重载有两种实现方法,一种是通过成员函数来实现,另一种则通过(4) 来实现。
答案:友元5. 当用成员函数重载双目运算符时,运算符的左操作数必定是: (5)答案:对象三.程序分析题1.以下程序的执行结果是。
#include<iostream.h>class Sample{int n;public:Sample(){)Sample(int m){n=m;)int &operator--(int){n--;return n;}void disp() { cout<<”rl=”<<n<<endl;)}void main(){Sample s(10);(S--)++;S.disp();}解:该程序中,类Sample的重载”一”运算符的成员函数返回Sample对象的私有数据成员n的引用。
在main()函数中执行(s--)++;语句时,先调用重载成员函数,使S对象的n值减1,这时返回的是S对象的n的引用,再执行++运算,也就是对s对象的n值执行++运算,所以s对象的11值保持不变。
程序的执行结果为:n=lO。
2.以下程序的执行结果是:#include<iostream.h>class Sample{private:int x;public:Sample(){x=0;}void disp(){cout<<”x=”<<x<<endl;}void 0perator++(){x+=10;}}void main(){Sample obj;obj.disp();obj++;cout<<“执行。
bj++之后”<<endl ;obj.disp();}解:在类Sample中设计运算符重载成员函数,使运算符“++”作为于Sample类对象时,该对象的x增10。
本题答案为:x=0执行obj++之后x=103.阅读下面的程序,在空白处填写出程序运行后的结果。
#include<iostream.h>class complex{float real,imag,public:complex(float r,float i){real=r;imag=i;}complex(){real=O; imag=O;}void print();friend complex operator+(complex a,complex b);friend complex operator一(complex a,complex b);friend complex operator‘(complex a,complex b);friend complex operator/(complex a,complex b);}void complex::print(){cout<<real:if(imag>O)cout<<”+”;if(imag!:0) cout<<imag<<”i”<<endl;}complex operator+(complex a,complex b){complex temp;temp.real=a.real+b.real;temp.imag=a.imag+b.imag;return temp;}complex operator-(complex a,complex b){complex temp ;temp.real=a.real-b.real;temp.imag=a.imag-b.imag;return temp;}complex operator *(complex a,complex b){complex temp;temp.real:a.real*b.real-a.imag *b.imag;temp.imag=a.real *b.imag+a.imag *b.real;return temp;}complex operator/(complex a,complex b){complex temp;float tt;tt=l/(b.real‘b.real+b.imag。
b.imag);temp.real=(a.real*b.real+a.imag*b.imag)*tt;temp.imag=(b.real*a.imag-a.real*b.imag)*tt;return temp;}void main(){complex c1(2.3,4.6),c2(3.6,2.8),c3;c1.print();c2.print();c3=c1+c2;c3.print();c3=c1-c2;c3.print();c3=c1*c2 ;c3.print();c3=c1/c2;c3.print();}程序运行结果为:2.3+4.6i3.6+2.8i(1)(2)(3)(4)解:(1)、(2)、(3)和(4)分别是2.3+4.6i和3.6+2.8i两个复数相加、相减、相乘和相除的结果。
本题答案为:(1)5.9+7.4i (2)-1.3+1.8i (3)-4.6+23i;(4)A.1.01731+0.486538i。
四.简答题1.说明以下类date的功能,并给出程序执行结果。
#include<iostream.h>static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31);c1ass date{int mo ,rda, ryr;public:date(int m,int d,int y){mo=m;da=d;yr=y;}date(){}void disp(){cout<<mo<< ”/”<<da<<“/”<<yr<<endl;}friend date operator+(date &d,int day) // 运算符重载友元函数{date dt;dt.mo=d.mo;dt.yr=d.yr;day+=d.da;while(day>dys[dt.mo-1]){day-=dys[dt.mo-1];if(++dt.mo==13){dt.mo=1;dt.yr++;}}dt.da=day;.return dt;}}void main(){date dl(2,10,2003),d2;d2=dl+365;d2.disp();}解:类date含有mo、da和),r 3个私有数据成员,分别存放一个日期的月份、日号和年份。