运算符重载练习题
- 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);
};
答案:D
7. 在第33题中,当执行语句d+=m; 时,C++编译器对语句作如下解释: (34)
A. d=operator+=(m);
B. m=operator+=(d);
C. d.operator+=(m);
D. m.operator+=(d);
答案:C
8. 设有以下类定义,其中说明了“+”运算符重载函数的原型。这是一个友元函数,当类
外有语句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
class Sample
{
int n;
public:
Sample(){}
Sample(int i){n=i;}
friend Sample operator+(Sample,Sample);
void disp() {cout<<“n=”< } 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) 答案:对象