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

合集下载

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++机试(运算符重载)模拟试卷5(题后含答案及解析)

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

国家二级C++机试(运算符重载)模拟试卷5(题后含答案及解析) 题型有:1. 选择题选择题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.结合性正确答案:A解析:此题考查的是运算符重载。

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

故本题选项A正确。

知识模块:运算符重载4.下列运算符中,不能被重载的是( )。

A.&&B.!=C..D.++正确答案:C解析:此题考查的是运算符重载。

在C++中,只有.、.*、—>*、∷、?:这五个运算符不能重载。

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

A.运算符重载为成员函数时,若参数表中无参数,重载的是一元运算符B.—元运算符只能作为成员函数重载C.二元运算符重载为非成员函数时,参数表中有一个参数D.C++中可以重载所有的运算符正确答案:A解析:此题考查的是运算符的重载。

C++Primer 第14章-重载操作符与转换-课后习题答案

C++Primer 第14章-重载操作符与转换-课后习题答案

第十四章重载操作符与转换1。

在什么情况下重载操作符与内置操作符不同?在什么情况下重载操作符与内置操作符相同?重载操作符必须具有至少一个类类型或枚举类型的操作数。

重载操作符不保证操作数的求值顺序,例如对&& 和|| 的重载版本不再具有“短路求值”的特性,两个操作数都要进行求值,而且不规定操作数的求值顺序。

对于优先级和结合性及操作数的数目都不变。

2。

为Sales_item编写输入、输出。

加以及复合赋值操作符的重载声明。

class Sales_item{friend std::istream& operator >> ( std::istream&, Sales_item& );friend std::ostream& operator <<(std::ostream&, const Sales_item&);public:Sales_item& operator += ( const Sales_item& );};Sales_item operator+ ( const Sales_item&, const Sales_item& )3。

解释如下程序,假定Sales_item构造函数的参数是一个string,且不为explicit.解释如果构造函数为explicit会怎样。

string null_book = “0-000-00000-0”;Sales_item item(cin);item += null_book;第一句:调用接受一个C风格的字符串形参的string构造函数,创建一个string临时对象,然后使用string复制构造函数用这个临时对象初始化string对象null_book,第二句:从标准输入设备读入数据,创建Sales_item对象item。

第三句:首先调用接受一个string参数的Sales_item构造函数,创建一个临时对象,然后调用Sales_item的复合重载操作符+=,将这个Sales_item临时对象加到item对象上,如果构造函数为explicit,则不能进行从string对象到Sales_item对象的隐式转换,第三句将不能被编译。

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

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

国家二级C++机试(运算符重载、模板和C++流)模拟试卷6(题后含答案及解析)题型有:1. 选择题选择题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.有类定义如下:class Type{ public:Type(int i=0);Type operator-(int);friend Type operator+(Type,Type);private:int val;};若有对象定义Type c1;则下列语句序列中,错误的是( )。

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

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

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

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

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

A.operator long( )const;B.operator long(bigNumber);C.long operator long( )const;D.long operator long(BjgNumber);正确答案:A解析:在重载类型转换符时,由于运算符本身已经表示出返回值类型,因此不需要返回值类型的声明。

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

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

实验七-运算符重载参考答案实验七多态性—函数与运算符重载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对象就是就相当于函数的第一个参数。

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

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

国家二级C++机试(运算符重载、模板和C++流)模拟试卷3(题后含答案及解析)题型有:1. 选择题选择题1.下列关于函数模板的描述中,正确的是( )。

A.函数模板是一个实例函数B.使用函数模板定义的函数没有返回类型C.函数模板的类型参数与函数的参数相同D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数正确答案:D解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。

数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。

知识模块:模板2.有如下函数模板定义:template<typename T1,Typename T2>T1 Fun(T2 n){ return n*5.0;} 若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。

A.FUN(9)B.FUN<9>C.FUN<double>[9]D.FUN<9>(double)正确答案:C解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。

知识模块:模板3.下列关于模板的描述中,错误的是( )。

A.类模板的成员函数都是模板函数B.函数模板是一种参数化类型的函数C.满足一定条件时可以省略模板实参D.模板形参只能由关键字typename声明正确答案:D解析:同一模板的声明和定义中,模板形参的名字不必相同。

每个模板类型形参前面必须带上关键字typename/class,每个非类型形参前面必须带上类型名字。

知识模块:模板4.已知主函数中通过如下语句序列实现对函数模板swap的调用:inta[10],b[10];swap(a,b,10);下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。

A.template<typename T>void swap(T a[],T b[],int size);B.template<typename T>void swap(int size,T a[],T b[]);C.template<typename T1,typename T2>void swap(T1 a[],T2 b[],int size};D.template<class T1,class T2>void swap(T1 a[],T2 b[],int size);正确答案:B解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。

C运算符重载习题

C运算符重载习题

一、选择题一、下面关于运算符重载的说法中,错误的选项是()。

A、能够对C++所有运算符进行重载B、运算符重载维持固有的结合性和优先级顺序C、运算符重载不能改变操作数的个数D、在运算符函数中,不能利用缺省的参数值二、以下运算符能被重载的是()。

A、::B、?:C、.D、%3、以下表达正确的选项是()。

A、运算符重载函数只能是一个成员函数B、运算符重载函数既能够是一个成员函数,也能够是友元函数C、运算符重载函数只能是一个非成员函数D、运算符重载函数只能是友元函数4、以下表达不正确的选项是()。

A、利用成员函数重载二元运算符时,参数表中的参数必需为两个B、利用成员函数重载二元运算符时,成员函数的this指针所指向的对象作为运算符的左操作数C、利用成员函数重载二元运算符时,参数表中的参数作为此运算符的右操作数D、运算符重载时不能改变运算符的语法结构五、为了区分一元运算符的前缀和后缀运算,在后缀运算符进行重载时,额外添加一个参数,其类型是()。

A、voidB、charC、intD、float六、以下能正确重载运算符的友元函数原型是()。

A、friend B operator?: ( );B、friend B operator+(int x);C、friend B operator+(B b);D、friend B operator+(B b, B a);7、以下表达正确的选项是()。

class B{ int a,b;public:B(int aa=0, int bb=0) { a=aa; b=bb; }B operator+ ( int x ) //A { B r;=a+x;=b+x;return r;}};void main( ){ B x(3,5), y(8,4), z1, z2;z1=x+5;z2=10+y; //B}A、A行有错误B、B行有错误C、A行和B行都有错误D、A行和B行都没有错误八、以下表达正确的选项是()。

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

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

国家二级C++机试(运算符重载、模板和C++流)模拟试卷8(题后含答案及解析)题型有:1. 选择题选择题1.有如下程序:#include<iostrearn>using namespace std;int main( ) { cout.fill(‘*’);cout.width(6);cout.fill(‘#’);cout <<123<<endl;return 0;} 执行后的输出结果是( )。

A.###123B.123###C.***123D.123***正确答案:A解析:此题考查的是I/O格式化输出。

函数width(int n)设置输入输出宽度,当实际数据宽度小于制定的宽度时,多余的位置用填充字符填满;当实际数据宽度大于设置的宽度时,仍按实际宽度输出;函数fill(char c)用来设置填充字符。

知识模块:C++流2.下面关于C++流的叙述中,正确的是( )。

A.cin是一个输入流对象B.可以用ifstream定义一个输出流对象C.执行语句序列char*y=“PQMN’’;cout<<,y;将输出字符串”PQMN”的地址D.执行语句序列char x[80];cin.getline(x,80);时,若键入Happy new year 则x中的字符串是”Happy’’正确答案:A解析:此题考查的是C++流的概念和I/O的格式化。

cin是类的对象,亦即输入流对象;ifstream是输入文件流类,不能定义一个输出流对象:C选项中最后输出的是字符串“PQMN”:D选项中x中字符串应该是“Happy new year”。

知识模块:C++流3.有如下程序:#include<iostream>#include<iomanip>using namespace std;int main( ) { cout.fill(‘*’);cout<<left <<setw(4)<<123&lt;<<’’OK’’<<endl;return 0;} 执行这个程序的输出结果是( )。

类和对象与运算符重载-答案

类和对象与运算符重载-答案

类和对象与运算符重载-答案选择题1、若有以下说明,在类外使用对象objx成员的正确语句是()。

class X{ int a;void fun1();public:void fun2();};A objx.a=0B objx.fun1();C objx.fun2();D X::fun1();2、若有以下说明,对n的正确访问语句是()。

class Y{ //………;public:static int n;};int Y::n=0;Y objy;A n=1;B Y::n=1;C objy::n=1;D Y->n=1;3、若有以下类Z的说明,函数fstatic的正确定义是()。

class Z{ int a;public:void fstatic(Z &)static;};A void Z::fstatic(Z &objz){objz.a=0;}B void Z::fs tatic(Z &objz){a=objz.a;}C void Z::fstatic(Z &objz){a=0;}D void Z::fstatic(Z &objz){Z::a=0;}4、若有以下类T的说明,函数ffriend的错误定义是()。

class T{ int i;friend void ffriend(T &,int);};A void ffriend(T &objt,int k){objt.i=k;}B void ffriend(T &objt,int k){k=objt.i;}C void T::ffriend(T &objt,int k){K+=objt.i;}D void ffriend(T &objt,int k){objt.i+=k;}5、在类定义的外部,可以被访问的成员有()。

A 所有类成员B 私有或保护类成员C公有的类成员 D 公有或私有的类成员6、关于this指针的说法正确的是()。

第10章_重载正答案

第10章_重载正答案

一、选择题1.重载赋值操作符时,应声明为()函数。

A.友元 B.虚√ C.成员 D.多态2.指出下列对定义重载函数的要求中,哪些是错误的提法( )。

A.要求参数的个数不同。

B.要求参数中至少有一个类型不同。

√C.要求函数的返回值不同。

D. 要求参数的个数相同时,参数类型不同。

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

A.运算符重载可改变其优先级√ B.运算符重载不改变其语法结构C.运算符重载可改变其结合性 D.运算符重载可改变其操作数的个数4.下列运算符中,()运算符在C++中不能重载。

√A.?: B.[] C.new D.&&5.去掉6.去掉7. 一个函数为void f(int,char ch='a'),另一个函数为void f(int),则它们√A.不能在同一程序中定义 B.可以在同一程序中定义并可重载C.可以在同一程序中定义,但不可重载 D 以上说法均不正确8.去掉9.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为()。

A. AB operator+(AB & a , AB & b) √B. AB operator+(AB & a)C. operator+(AB a)D. AB & operator+( )10.系统在调用重载函数时,往往根据一些条件确定哪个重载函数被调用,在下列选项中不能作为依据的是()。

A. 参数个数B. 参数的类型C. 函数的名称√D. 函数的类型二、填空题1.operator是C++的一个关键字,它经常和C++的一个运算符连用,构成一个运算符函数名。

运算符函数的返回类型不能是.void类型。

2.利用成员函数对二元运算符重载,其左操作数为成员函数参数 (默认)第1个对象引用,右操作数为第2个对象引用 。

3.如果表达式--x中的“--”是重载的类运算符,采用运算符函数调用格式,该表达式还可以表示为.operator—(x) 作为友员函数。

【免费下载】4 运算符重载

【免费下载】4 运算符重载

r.b=b+x;
return r;
{ B x(3,5), y(8,4), z1, z2;
}
z1=x+5;
z2=10+y; //B
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

C++程序设计运算符重载习题

C++程序设计运算符重载习题

选择题1.在下列运算符中,能重载的是( )。

(a) ! (b) sizeof (c) new (d) delete2.在下列运算符中,不能重载的是( )。

(a) <= (b) >> (c) ::(d) &=3.下列关于运算符重载的描述中,( )是正确的。

(a) 可以改变参与运算的操作数个数(b) 可以改变运算符原来的优先级(c) 可以改变运算符原来的结合性(d) 不能改变原运算符的语义4.下列函数中,能重载运算符的函数是( )。

(a) 成员函数(b) 构造函数(c) 析构函数(d) 友员函数5.不能用友员函数重载的是( )。

(a) = (b) = = (c) += (d) !=6.下面描述中,错误的是( )。

(a) 只有系统预先定义的运算符才可能被重载(b) 使用类型转换函数不能把一个类转换为另一个类(c) 使用类型转换函数可以把类转换为基本类型(d) 类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数1、a,c,d2、c3、d4、b,c5、a6、b阅读下列程序,写出执行结果1.#include〈iostream.h〉class T{ public :T( ) { a = 0; b = 0; c = 0; }T( int i , int j , int k ){ a = i; b =j ; c = k; }void get( int &i , int &j , int &k ){ i = a; j = b; k = c; }T operator * ( T obj );private:int a , b , c;};T T::operator * ( T obj ){T tempobj;tempobj.a = a * obj.a;tempobj.b = b * obj.b;tempobj.c = c * obj.c;return tempobj;}void main( ){ T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3;int a , b , c;obj3 = obj1 * obj2;obj3.get( a, b, c );cout << "( obj1 * obj2 ): \t"<< "a = " << a << ’\t’ << "b = " << b<< ’\t’ << "c = " << c<< ’\t’ << endl;( obj2 * obj3 ).get( a, b, c );cout << "( obj2 * obj3 ): \t "<< "a = " << a << ’\t’ << "b = " << b << ’\t’ << "c = "<< c << ’\t’ << endl;}【答案】( obj1 * obj2 ): a = 5 b = 10 c = 15( obj2 * obj3 ): a = 25 b = 50 c = 752.#include〈iostream.h〉class vector{ public:vector( ){ }vector(int i,int j){ x = i ; y = j ; }friend vector operator + ( vector v1, vector v2 ){ vector tempvector ;tempvector.x = v1.x + v2.x ;tempvector.y = v1.y + v2.y ;return tempvector ;}void display( ){ cout << "( " << x << ", " << y << ") "<< endl ; }private:int x , y ;};void main( ){ vector v1( 1, 2 ), v2( 3, 4 ), v3 ;cout << "v1 = " ;v1.display( ) ;cout << "v2 = " ;v2.display( ) ;v3 = v1 + v2 ;cout << "v3 = v1 + v2 = " ;v3.display( ) ;}【答案】v1 = ( 1, 2 )v2 = ( 3, 4 )v3 = v1 + v2 = ( 4, 6 )。

C程序设计与应用基础第三章重载习题答案

C程序设计与应用基础第三章重载习题答案
{
public:
Polynomial();
Polynomial operator+(const Polynomial&)const;
Polynomial operator-(const Polynomial&)const;
Polynomial operator*(const Polynomial&);
friend Three_d operator + (Three_d& t1,Three_d& t2);
private:
int x,y,z;
};
Three_d operator +(Three_d& t1,Three_d& t2)
{
return Three_d(t1.x+t2.x,t1.y+t2.y,t1.z+t2.z);
第三章重载
1、请完成下列填空题
1)在C++中,只能重载为类的成员函数的运算符是_=_、__[]__、__()__、__->__。
2)利用成员函数对二元运算符重载,其左操作数为___This___,右操作数为___成员函数参数___。
3)单目运算符作为类成员函数重载时___没有___的参数;双目运算符作为___类成员函数___重载时需声明其右操作数,作为___友元函数___重载时需声明全部操作数。
}
2)给th类:
class Three-d
{
public:
Three_d(int I,int j,int k){x=I;y=j;z=k;}.
Three_d()){x=0;y=0;z=0;}
Void Get(int &I,int &j,int &k({I=x;j=y;k=z;}

C++中的运算符重载练习题

C++中的运算符重载练习题

C++中的运算符重载练习题1.RMB类要求:定义⼀个RMB类 Money,包含元、⾓、分三个数据成员,友元函数重载运算符‘+’(加)和 ‘-’(减),实现货币的加减运算例如:请输⼊元、⾓分:2 3 4请输⼊元、⾓分:3 7 3和:6元0⾓7分差:-1元3⾓9分⼜例如:请输⼊元、⾓分:2 3 4请输⼊元、⾓分:3 0 0和:4元6⾓0分差:-0元6⾓6分代码实现:1 #include <iostream>2using namespace std;34class Money5 {6private:7int yuan, jiao, fen;8bool flag; //标志位,0表⽰钱数为正,1表⽰钱数为负 -> 默认结果的钱数为正9public:10 Money();11 Money(int fg, int y=0, int j=0, int f=0): yuan(y), jiao(j), fen(f), flag(fg){}12 friend Money operator+(Money a, Money b);13 friend Money operator-(Money a, Money b);14void display();1516 };1718 Money::Money()19 {20 flag = 0;21 cout << "请输⼊元、⾓分:" <<endl;22 cin >> yuan >> jiao >> fen;23 }2425void Money::display()26 {27if(flag==1) cout << '-';28 cout << yuan << "元" << jiao << "⾓" << fen << "分" << endl;29 }3031//请⽤友元函数重载加/减,并要在类Money中声明为友元32//TODO重载加类外定义Money类的+重载运算33 Money operator+(Money a, Money b)34 {35 Money temp(0);36// 将钱全部转化成分来计算37int money_a = a.yuan*100 + a.jiao*10 + a.fen*1;38int money_b = b.yuan*100 + b.jiao*10 + b.fen*1;39int res = money_a + money_b;40// 因为是相加故应该结果是正的所以不⽤判断符号但是相减时结果可能为负就要判断符号41 temp.yuan = res/100;42 res = res % 100;43 temp.jiao = res/10;44 temp.fen = res % 10;4546// 返回结果对象47return temp;48 }4950//TODO重载减类外定义Money类的-重载运算51 Money operator-(Money a, Money b)52 {53 Money temp(0);54// 将钱全部转化成分来计算55int money_a = a.yuan*100 + a.jiao*10 + a.fen*1;56int money_b = b.yuan*100 + b.jiao*10 + b.fen*1;57int res = money_a - money_b;58// 因为是相减时结果可能为负就要判断符号59if(res < 0)60 {61 temp.flag = 1;62 res = -res;63 }64 temp.yuan = res/100;65 res = res % 100;66 temp.jiao = res/10;67 temp.fen = res % 10;6869// 返回结果对象70return temp;71 }7273int main()74 {75 Money m1, m2, m3(0), m4(0); //m3⽤来记录和,m4⽤来记录差7677// +78 m3=m1+m2;79 cout<<"和:";80 m3.display();8182// -83 m4=m1-m2;84 cout<<"差:";85 m4.display();8687return0;88 }2.⽇期类运算符重载要求:定义⼀个⽇期类Date,包含年、⽉、⽇三个数据成员友元函数重载⾃增运算符(++),实现⽇期的⾃增。

c++运算符重载习题

c++运算符重载习题

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.imag=imag+c2.imag;return c;}Complex Complex::operator -(Complex &c2){Complex c;c.real=real-c2.real;c.imag=imag-c2.imag;return c;}Complex Complex::operator *(Complex &c2){Complex c;c.real=real*c2.real;c.imag=imag*c2.imag;return c;}Complex Complex::operator /(Complex &c2){Complex c;c.real=(real*c2.real+imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag);c.imag=(imag*c2.real-real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag); return c;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)"<<endl;}int main(){Complex c1(3,4),c2(5,-10),c3;c3=c1+c2;cout<<"c1+c2=";c3.display();c3=c1-c2;cout<<"c1-c2=";c3.display();c3=c1*c2;cout<<"c1*c2=";c3.display();c3=c1/c2;cout<<"c1/c2=";c3.display();return 0;}Task8-3/*3. 有两个矩阵a和b,均为n行m列(m、n的值自己给出),求两个矩阵之和、差、积、商,重载运算符“+”、”-“、”*”、”/”,使之能用于矩阵向加减乘除,如c=a+b、 c=a*b。

运算符重载综合练习题

运算符重载综合练习题

运算符重载练习题一、选择题1、在C++中不能重载的运算符是()。

A、=B、()C、::D、delete2、在C++中不能重载的运算符是()。

A、?:B、[ ] C 、new D、&&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、友元运算符obj1>obj2被C++编译器解释为()。

A、operator>(obj1,obj2)B、>(obj1,obj2)C、obj2.operator>(obj1)D、obj1.operator>(obj2)8、在表达式x+y*z中,+作为成员函数重载的运算符,*作为非成员函数重载的运算符。

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

A、opertator+有两个参数,opertator*有两个参数B、opertator+有两个参数,opertator*有一个参数C、opertator+有一个参数,opertator*有两个参数D、opertator+有一个参数,opertator*有一个参数9、重载赋值运算符时,应声明为重载的()函数。

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

A、1种B、2种以下C、3种以上D、多种11、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是().A、作为友员函数重载的一元运算符B、作为成员函数重载的一元运算符C、作为友员函数重载的二元运算符D、作为友员函数重载的二元运算符12、在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。

c++运算符重载

c++运算符重载

1 下列各运算符中,(b)优先级最高。

A. +(双目)B. *(单目)C.<=D. *=2 下列各运算符中,(a)优先级最低。

A.?:B. | C. || D. !=3 运算符重载是对已有的运算符赋予多重含义,因此(c)。

A)可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义。

B)可以改变一个已有运算符的优先级和操作数个数。

C)只能重载C++中已经有的运算符,不能定义新运算符。

D)C++中已经有的所有运算符都可以重载。

4 有自定义类型A,其赋值函数的函数原型为 A operator =( const A&);有A类型的对象a, b, c,下列语句不合法的是(d)A.a=b; B.a=a; C.a=b=c; D.(a=b)=c;5 下列运算符中,哪一个不能重载(a)。

A.?: B.[ ] C.( ) D.++6 下列运算符中,哪一个必须使用成员函数重载(a)A.= B.<< C.-- D.++7 有自定义类型A,其赋值函数的函数原型为constA& operator =( const A&);有A类型的对象a, b, c,下列语句不合法的是(d)A.a=b; B.a=a; C.a=b=c; D.(a=b)=c;8 下列运算符中,哪一个可以使用全局函数重载(d )。

A.= B.[ ] C.( ) D.++9 对于自定义类型来说,下列运算符中,需要重载才能使用的是(b)A.= (赋值); B.[] (下标); C.&(取地址); D., (逗号) ;10 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:( b )A. AB AB::operator+(const AB&a,const AB & b)B.AB AB::operator+(const AB&a)C.AB::operator+(AB a)D.AB & AB::operator+()11 后缀--运算符的重载函数语法格式如下:函数类型operator--(形参,int){函数体}则下面关于第2 个虚参的叙述中,正确的说法是( c )(A)第2个参数必须给出参数名称(B)第2个参数不能给出参数名称(C)第2个参数必须是int型参数,其参数名可有可无(D)第2个参数也可以是long型参数12 设分数的类型定义如下:struct Fraction{intnume;intdeno;} ;则下面关于取自身的单目运算符“+”的运算符重载函数中,最合适是(a)。

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

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

国家二级C++机试(运算符重载)模拟试卷6(题后含答案及解析) 题型有:1. 选择题选择题1.有如下程序:#inc1ude<iostream>Using namespace std; Class Amount{ int amount; public; Amount(int n=0): amount(n){} Int getAmount( )const {retum amount;} Amount &operator+=(Amount a){ amount+=a.amount; retum ; } };int main( ){ Amount x(3),y(7);x+=y;cout<<x.getAmount( )<<end1; retum 0;} 已知程序的运行结果是10,则下划线处缺失的表达式是( )。

A.*thisB.thisC.&amountD.amount正确答案:A解析:此题考查的是“+”运算符重载和this指针。

语句amount+=a.amount;实现3和7的求和得到amount=10,要使程序的输出结果为10,又因为函数的返回值类型为Amount&,所以横线处填入*this。

知识模块:运算符重载2.如果表达式a>=b中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为( )。

A.a.operator>=(b)B.b.operatotr>=(a)C.operator>=(a,b)D.operator>=(b,a)正确答案:C解析:运算符函数作为非成员函数时,没有隐含的this指针,因此所有的操作数必须出现在参数表中,对于二元运算符,参数表中有两个参数,分别代表第一操作数和第二操作数,且顺序不能改变。

知识模块:运算符重载3.已知表达式++a中的“++”是作为成员函数重载的运算符,则与++a等效的运算符函数调用形式为( )。

A.a.operator++(1)B.operator++(a)C.operator++(a,1)D.a.operator++( )正确答案:C解析:本题主要是对运算符霞载的考查。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<
运算符
>(<
参数

<
参数
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);
};
答案:
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
{.
f r i e n d C o m o p e r a t o r+(......);
};
答案:
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.。

相关文档
最新文档