Counter类(运算符重载练习)

合集下载

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中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

运算符重载练习题.

运算符重载练习题.

运算符重载一.单项选择题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. 设有以下类定义,其中说明了“+”运算符重载函数的原型。

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(总分:58.00,做题时间:90分钟)一、选择题(总题数:29,分数:58.00)1.若在表达式y/x中,''/''是作为成员函数重载的运算符,则该表达式还可以表示为( )。

(分数:2.00)A.x.operator/(y)B.operator/(x,y)C.y.operator/(x) √D.operator/(y,x)解析:解析:运算符函数的函数名是由运算符前加关键字operator构成的。

所以当“/”作为运算符重载后,其格式为operator/。

所以其作为成员函数调用时的格式为y.operator/(x)。

2.有类定义如下: class Type{ public: Type(int i=0); Type operator-(int); friend Type operator+(Type,Type); private: int val; };若有对象定义Type c1;则下列语句序列中,错误的是( )。

(分数:2.00)A.Type(3)+c1;B.e1+Type(3);C.3-c1:√D.c1-3;解析:解析:由于在类Type中对“-”进行了重载,所以根据“-”重载的形式定义,c1-3是正确的,而3-c1是错误的表达式。

3.若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是( )。

(分数:2.00)A.Data+(Data);B.Data operator+{Data};√C.Data+operator{Data};D.operator+(Data,Data);解析:解析:“+”是一个二元运算符,因此作为成员函数重载时参数表中只有一个参数,对应于第二个操作数,而第一个操作数是对象本身。

运算符函数的函数名是由运算符前加关键字operator构成的。

4.若要对类BigNumber中重载的类型转换运算符long进行声明,下列选项中正确的是( )。

第十章运算符重载复习题

第十章运算符重载复习题

第十章运算符重载复习题运算符重载复习题1. 重载赋值操作符时,应声明为( )A. 友元函数B. 虚函数C. 成员函数D. 多态函数2.关于重载的描述,正确的是( )A.函数重载只能在成员函数之间进行B.函数重载只能在全局函数之间进行C.函数重载可以在基类和派生类之间进行D.函数重载必须要求同名的函数的形参类型和个数都完全一致,返回值类型无所谓3.下列运算符中不能重载的是( )。

A.∷(域运算符) B.+ (正) C.++ (自增) D.*(指针)4. 派生类的对象对它的基类成员中()A. 公有继承的公有成员是可以访问的B. 公有继承的私有成员是可以访问的C. 公有继承的保护成员是可以访问的D. 私有继承的公有成员是可以访问的5 不能重载的运算符是()A. ?:B. [ ]C. newD. &&6. C++中不能重载的运算符是( )A. newB. +=C. sizeofD. &&7.重载函数是( )A.以函数参数来区分,而不用函数的返回值来区分不同的函数B.以函数的返回值来区分,而不用函数参数来区分不同的函数C.参数表完全相同而返回值类型不同的两个或多个同名函数D.参数表和返回值类型中至少有一个不同的两个或多个同名函数8.对于运算符重载,说法正确的是( )A.运算符如果被重载为非成员函数,那么对象就不能利用这个运算符重载函数进行操作B.运算符重载函数可能既不是成员函数,也不是友元函数C.用户每定义一个类,系统会自动提供一个赋值运算符重载函数,所以完全不必考虑重载赋值运算符函数D.一个类的虚函数不能调用运算符重载函数9. C++中不能重载的运算符是( )A. =B. ()C. ::D. delete10. 不能作为函数重载判断依据的是( )A. constB. 返回类型C. 参数个数D. 参数类型11. 为满足运算符“+”的可交换性,必须将其重载为成员函数,重载的函数名是关键字加上运算符“+”。

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

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

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

a=b()c::D删除2、下列运算符中,(a)运算符在c++中不能重载。

a?:b[]cnewd&&3.在下面对C++运算符函数的返回类型的描述中,错误为(C)。

a可以是类类型b可以是int类型c可以是void类型d可以是float类型4.以下运算符不能用友元函数is(b)重载。

a+b=c*d<<5.重载运算符函数时,以下运算符(d)必须作为类成员函数重载。

a+b-c++d->6.在以下关于操作员过载的描述中,正确的描述是(d)。

a运算符重载可以改变运算符的操作数的个数b运算符重载可以改变优先级c运算符重载可以改变结合性D运算符重载无法更改语法结构7、友元运算符obj>obj2被c++编译器解释为(a)。

aoperator>(obj1,obj2)b>(obj1,obj2)cobj2。

操作员>(obj1)dobj1。

oprator>(obj2)8、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

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

A operator+有两个参数,operator*有两个参数,B operator+有两个参数,operator*有一个参数,copier+有一个参数,operator*有两个参数,DopOperator+有一个参数,operator*有一个参数9、重载赋值操作符时,应声明为(c)函数。

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

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

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

Python正确重载运算符的方法示例详解

Python正确重载运算符的方法示例详解

Python正确重载运算符的⽅法⽰例详解前⾔说到运算符重载相信⼤家都不陌⽣,运算符重载的作⽤是让⽤户定义的对象使⽤中缀运算符(如 + 和 |)或⼀元运算符(如 - 和 ~)。

说得宽泛⼀些,在 Python 中,函数调⽤(())、属性访问(.)和元素访问 / 切⽚([])也是运算符。

我们为 Vector 类简略实现了⼏个运算符。

__add__ 和 __mul__ ⽅法是为了展⽰如何使⽤特殊⽅法重载运算符,不过有些⼩问题被我们忽视了。

此外,我们定义的Vector2d.__eq__⽅法认为Vector(3, 4) == [3, 4]是真的(True),这可能并不合理。

下⾯来⼀起看看详细的介绍吧。

运算符重载基础在某些圈⼦中,运算符重载的名声并不好。

这个语⾔特性可能(已经)被滥⽤,让程序员困惑,导致缺陷和意料之外的性能瓶颈。

但是,如果使⽤得当,API 会变得好⽤,代码会变得易于阅读。

Python 施加了⼀些限制,做好了灵活性、可⽤性和安全性⽅⾯的平衡:不能重载内置类型的运算符不能新建运算符,只能重载现有的某些运算符不能重载——is、and、or 和 not(不过位运算符&、| 和 ~ 可以)前⾯的博⽂已经为 Vector 定义了⼀个中缀运算符,即 ==,这个运算符由__eq__ ⽅法⽀持。

我们将改进 __eq__ ⽅法的实现,更好地处理不是Vector 实例的操作数。

然⽽,在运算符重载⽅⾯,众多⽐较运算符(==、!=、>、<、>=、<=)是特例,因此我们⾸先将在 Vector 中重载四个算术运算符:⼀元运算符 - 和 +,以及中缀运算符 + 和 *。

⼀元运算符 -(__neg__) ⼀元取负算术运算符。

如果 x 是 -2,那么 -x == 2。

+(__pos__) ⼀元取正算术运算符。

通常,x == +x,但也有⼀些例外。

如果好奇,请阅读“x 和 +x 何时不相等”附注栏。

实验七-运算符重载参考答案

实验七-运算符重载参考答案

实验七-运算符重载参考答案实验七多态性—函数与运算符重载7.1 实验目的1.理解掌握成员函数方式运算符重载;2.理解掌握友元函数方式运算符重载;3.理解掌握++、--运算符的重载。

7.2 实验内容7.2.1程序阅读1.理解下面的程序,并运行查看结果,回答程序后面的问题。

#include <iostream>using namespace std;class CComplex{public:CComplex(){real = 0;imag = 0;}CComplex(int x,int y){real = x;imag = y;}int real;int imag;CComplex operator + (CComplex obj1)//---------------------------------------------①{CComplex obj2(real - obj1.real, imag - obj1.imag);return obj2;}};int main(){CComplex obj1(100,30);CComplex obj2(20, 30);CComplex obj;obj = obj1+obj2; //------------------------------------------------------------------②cout << obj.real <<endl;cout << obj.imag << endl;return 0;}问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型?答:因为在函数中return obj2,obj2是CComplex 类型,所以函数返回值要与return返回的类型相同,即设计成CComplex类型。

问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数?答:因为成员函数经编译后会产生this指针,this指针会指向调用该函数的obj1对象,该obj1对象就是就相当于函数的第一个参数。

练习-运算符重载和创建类库-时间量

练习-运算符重载和创建类库-时间量

定义提取运算符>>的重载函数,实现通过cin直接输入时间量 定义提取运算符 的重载函数,实现通过 直接输入时间量 的重载函数 定义自增运算符++的重载函数 的重载函数, 定义自增运算符 的重载函数,实现以秒为单位增长
– 前缀和后缀形式都可以使用
定义加法运算符+的重载函数, 定义加法运算符 的重载函数,实现计算两个时间量的和 的重载函数 实现时间量与整数(单位为秒) 实现时间量与整数(单位为秒)直接进行加法运算
创建一个测试工程TestMyUtility,分别对输入的5个复数 ,分别对输入的 个复数 创建一个测试工程 和时间值求和,并输出结果。 和时间值求和,并输出结果。
2008年02月 张华 武汉大学
2
2008年02月 张华 武汉大学
1
运算符重载
扩展练习
创建自己的类库
把常用隐藏实现的细节。 隐藏实现的细节。
内容
创建一个工具库MyUtility,包含Complex和MyTime类 ,包含 创建一个工具库 和 类
中创建一个静态库工程( 在VC中创建一个静态库工程(Win32 Static Library) 中创建一个静态库工程 ) 类的.h和 把Complex和MyTime类的 和.cpp文件添加到该工程 和 类的 文件添加到该工程 编译、链接后得到MyUtility.lib库文件 编译、链接后得到 库文件 该工具库的发布文件包括2个头文件和 个头文件和1个库文件 该工具库的发布文件包括 个头文件和 个库文件
运算符重载
基本练习
类设计、 类设计、定义和运算符重载练习 问题
定义一个类MyTime,表示以秒为基本单位的时间量 , 定义一个类 定义并实现具有以下操作
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档