运算符重载练习1
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中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
运算符重载知识题
.《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第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. 下列运算符中哪些是不能够被重载的()。
运算符重载和友元作业
1、重新编写所有的Time类范例,使用友元函数来实现所有的重载操作符号。
2、复数由两个部分组成:实数部分和虚数部分。
复数的一种书写方式是:(3.0, 4.0),其中,3.0是实数部分,4.0是虚数部分。
假设a=(A,Bi),c=(C,Di),则下面是一些复数运算:A、加法:a+c = (A + C,(B+D)i)B、减法:a-c = (A - C,(B-D)i)C、乘法:a*c = (A *C – B*D,(A*D + B*C)i)D、乘法:x * c=( x*C, x*Di), 其中x 为实数E、共轭:~a = (A, -Bi)请定义一个复数类,以便下面的程序可以使用它来获得正确的结果:#include <iostream>Using namespace std;#include “complex0.h”Int main(){Complex a(3.0, 4.0); // 初始化一个复数Complex c;Cout << “Enter a Complex number (q to quit): \n”;While (cin >> c){Cout << “ c is ” << c<< ‘\n’;Cout << “C omplex conjugate is” << -c << ‘\n’;Cout << “a is” << a<< ‘\n’;Cout << “a + c is” << a + c<< ‘\n’;Cout << “a - c is” << a - c<< ‘\n’;Cout << “a * c is” << a * c<< ‘\n’;Cout << “2 * c is” << 2 * c<< ‘\n’;Cout << “Enter a Complex number (q to quit): \n”;}Cout << “Done!” << endl;Return 0;}注意,必须重载<< 和>> 操作符。
4--运算符重载
运算符重载习题一、选择题1、下面关于运算符重载的说法中,错误的是()。
A、可以对C++所有运算符进行重载B、运算符重载保持固有的结合性和优先级顺序C、运算符重载不能改变操作数的个数D、在运算符函数中,不能使用缺省的参数值2、下列运算符能被重载的是()。
A、::B、?:C、.D、%3、下列叙述正确的是()。
A、运算符重载函数只能是一个成员函数B、运算符重载函数既可以是一个成员函数,也可以是友元函数C、运算符重载函数只能是一个非成员函数D、运算符重载函数只能是友元函数4、下列叙述不正确的是()。
A、利用成员函数重载二元运算符时,参数表中的参数必须为两个B、利用成员函数重载二元运算符时,成员函数的this指针所指向的对象作为运算符的左操作数C、利用成员函数重载二元运算符时,参数表中的参数作为此运算符的右操作数D、运算符重载时不能改变运算符的语法结构5、为了区分一元运算符的前缀和后缀运算,在后缀运算符进行重载时,额外添加一个参数,其类型是()。
A、voidB、charC、intD、float6、下列能正确重载运算符的友元函数原型是()。
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;r.a=a+x;r.b=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行都没有错误8、下列叙述正确的是()。
国家二级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。
4 运算符重载【VIP专享】
r.b=b+x;
return r;
{ B x(3,5), y(8,4), z1, z2;
}
z1=x+5;
z2=10+y; //B
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
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 运算符重载
实验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 的形式上看,这是利用________函数实现__________运算符的重载。
作业3-运算符重载
作业3
1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。
参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。
例如:c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。
编程序,分别求两个复数之和、整数和复数之和。
2.有两个矩阵a和b,均为2行3列。
求两个矩阵之和。
重载运算符“+”,使之能用于矩阵相加。
如:c=a+b。
3.在第2题的基础上,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。
4.请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。
定义Complex(复数)类,在成员函数中包含重载类型转换运算符:operator double( ){return real;}
1。
第11章 运算符重载 习题解答
第11章运算符重载一.单项选择题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. 以下类中分别说明了“+=”和“++”运算符重载函数的原型。
4运算符重载复习题1
运算符重载复习题11.概念填空题1.1运算符重载是对已有的运算符赋予含义,使同一个运算符在作用于对象时导致不同的行为。
运算符重载的实质是,是类的特征。
1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。
但是这种类型转换函数只能定义为一个类的函数而不能定义为类的友元函数。
类类型转换函数既没有,也不显式给出。
类类型函数中必须有的语句返回函数值。
一个类可以定义类类型转换函数。
1.3运算符重载时其函数名由构成。
成员函数重载双目运算符时,左操作数是,右操作数是。
2.简答题2.2简述运算符重载的规则。
2.2简述重载单目运算符++、--,前置和后置时的差别。
2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数?2.4 构造函数作为类型转换函数的条件是什么。
3.选择题3.1在下列运算符中,不能重载的是( )A.!B. sizeofC. newD. delete3.2 不能用友员函数重载的是( )。
A.=B.==C.<=D.++3.3下列函数中,不能重载运算符的函数是( )。
A.成员函数B.构造函数C.普通函数D.友员函数3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()。
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;下列关于这个函数的叙述中,错误的是()。
A.这是运算符-的重载运算符函数B.这个函数所重载的运算符是一个一元运算符C.这是一个成员函数D.这个函数不改变数据成员的值3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。
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,包含年、⽉、⽇三个数据成员友元函数重载⾃增运算符(++),实现⽇期的⾃增。
运算符重载练习题1
运算符重载一.单项选择题1.下列运算符中,运算符在C++中不能重载。
A.?: B.+ C. D.<=2.下列运算符中,运算符在C++中不能重载。
A.&& B.[] C.:: D.new3.下列关于运算符重载的描述中,是正确的。
A.运算符重载可以改变操作数的个数B.运算符重载可以改变优先级C.运算符重载可以改变结合性D.运算符重载不可以改变语法结构4.友元运算符objl>obj2被C++编译器解释为。
A.operator>(objl,obj2) B.>(obj1,obj2)C.obj2.operator:>(obj1) D.objl.operator>(obj2) 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++解释为: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);};7. 在第6题中,当执行语句d+=m; 时,C++编译器对语句作如下解释:A. d=operator+=(m);B. m=operator+=(d);C. d.operator+=(m);D. m.operator+=(d);8. 设有以下类定义,其中说明了“+”运算符重载函数的原型。
Counter类(运算符重载练习)word版本
Description
编写一个计算器Counter类,对其重载运算符“+”。用下面的主程序测试,使测试结果正确。
int main()
{
Counter varOne(2), varTwo(4), varThree;
varThree = varOne + varTwo;
counter类运算符重载练习精品文档收集于网络如有侵权请联系管理员删除problemcounter类运算符重载练习timelimit
Counter类(运算符重载练习)
Problem A: Counter类(运算符重载练习)
Time Limit:1 SecMemory Limit:128 MB
Submit:739Solved:516
return 0;
}
Counter operator+ (const Counter &v)
{
return Counter(itsVal + v.ge:
double itsVal;
};
int main()
{
Counter varOne(2), varTwo(4), varThree;
varThree = varOne + varTwo;
cout << "varOne: " << varOne.getValue()<< endl;
cout << "varTwo: " << varTwo.getValue() << endl;
cout << "varThree: " << varThree.getValue() << endl;
运算符重载、继承、派生程序题与答案
1. (10分)栈类——类模板题目描述用类模板方式设计一个链栈类stack<T>,其中有两个私有数据成员:Node<T> *head(链首指针,即栈顶元素指针),int num(栈里结点数)以及3个公有成员函数:push(元素入栈)、pop(元素出栈)和stackempty(判断栈是否为空),并建立一个整数栈和一个字符栈。
template <class T>class stack{};注意:为了能够生成结点类型不同的链式栈,结点类的设计也需要用类模板。
template<class T>class Node{};输入描述输入整数栈的数据元素和字符栈的数据元素输出描述输出整数栈的数据元素出栈序列和字符栈的数据元素出栈序列输入样例4 8 3 2a db c输出样例2 3 8 4c bd a我的代码:#include<iostream>using namespace std;template <class T>class stacktemplate <class T1>class Node{T1 a ;Node<T1> *next ;public:Node(T1 x):a(x){}void show(){cout << a << endl ;}friend class stack<T1> ;};Node<T> *head ;int num ;public:stack(){num = 0 ;head = NULL ;}void push(T x){Node<T> *p = new Node<T>(x) ;p->next = head ;head = p ;num++ ;}T pop(){Node<T> *p = head ;head = head->next ;T t = p->a ;delete p ;num-- ;return t ;}bool stackempty(){if( head == NULL )return true;elsereturn false;}};int main(){stack<int> a ;stack<char> b ;int x ;char y ;for(int i = 0 ; i < 4 ; i ++ ){cin >> x ;a.push(x) ;}for( int i = 0 ; i < 4 ; i ++ ){cin >> y ;b.push(y);}for( int i = 3 ; i >= 0 ; i -- ) {a.stackempty() ;cout << a.pop() << " " ;}cout << endl ;for( int i = 3 ; i >= 0 ; i -- ) {b.stackempty();cout << b.pop() << " " ;}cout << endl ;return 0 ;}2. (10分)二进制类(1)——运算符重载题目描述将一个16位二进制数表示成0和1的字符序列,即用一个字符数组来存放这个二进制数。
运算符重载综合练习题
运算符重载练习题一、选择题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、在成员函数中进行双目运算符重载时,其参数表中应带有()个参数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第10章运算符重载一、选择题1.在下列运算符中,不能重载的是( )。
(a) ! (b) sizeof (c) new (d) delete2. 在下列运算符中,不能重载的是( )。
(a) <= (b) >> (c) && (d) &=3.下列关于运算符重载的描述中,( )是正确的。
(a) 可以改变参与运算的操作数个数 (b) 可以改变运算符原来的优先级(c) 可以改变运算符原来的结合性(d) 不能改变原运算符的语义4.下列函数中,能重载运算符的函数是( b,c )。
(a) 成员函数(b) 构造函数(c) 析构函数 (d) 友员函数5.不能用友员函数重载的是( a )。
(a) = (b) == (c) += (d) !=6.下面描述中,错误的是( b )。
(a) 只有系统预先定义的运算符才可能被重载(b) 使用类型转换函数不能把一个类转换为另一个类(c) 使用类型转换函数可以把类转换为基本类型(d) 类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数二、阅读下列程序,写出执行结果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" ;cout << "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 )6.3 编程题1.分别使用成员函数和友员函数编程序重载运算符“+”,使该运算符能实现两个字符串的连接。
解答:略。
2.设向量X = ( x1 ,x2 ,x3) 和 Y = ( y1 , y2 ,y3 ),则它们之间的加、减和积分别定义为:X + Y = ( x1 + y1 , x2 + y2 , x3 + y3 )X - Y = ( x1 - y1 , x2 - y2 , x3 - y3 )X * Y = x1 * y1 + x2 * y2 + x3 * y3编程序对运算符“+”、“-”和“*”重载,实现向量之间的加、减、乘运算。
解答:略。
3. 定义一个类nauticalmile_kilometer,它包含两个数据成员kilometer (千米)和meter(米)。
还包含一个构造函数对数据成员初始化;成员函数print 用于输出数据成员kilometer和meter的值;类型转换函数double()实现把千米和米转换为海里(1海里=1.852千米)。
编写main函数,测试类nauticalmile_kilometer。
解答:#include <iostream.h>const double n = 1.852; // 定义海里与千米和米的转换系数(1海里=1.852千米)class nauticalmile_kilometer{ public:nauticalmile_kilometer( int km,double m ){ kilometer = km; meter = m; }void print(){ cout<<"kilometer="<<kilometer<<'\t'<<"meter="<<meter<<endl; } operator double();private:int kilometer;double meter;};nauticalmile_kilometer::operator double(){ return ( meter / 1000 + double( kilometer )) / n; }void main(){ nauticalmile_kilometer obj( 100,50 );obj.print();cout << "nauticalmile=" << double( obj ) << endl;}三、定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。
将运算符函数重载为非成员、非友元的普通函数。
编写程序,求两个复数之和。
1.定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加、减、乘、除。
运算符重载函数作为Complex类的成员函数。
编程序,分别求两个复数之和、差、积和商。
2.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。
参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。
例如: c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。
编程序,分别求两个复数之和、整数和复数之和。
3.有两个矩阵a和b,均为2行3列。
求两个矩阵之和。
重载运算符“+”,使之能用于矩阵相加。
如: c=a+b。
4.在第4题的基础上,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。
5.请编写程序,处理一个复数与一个double数相加的运算,结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。
定义Complex(复数)类,在成员函数中包含重载类型转换运算符: operator double( ){return real;}6.定义一个Teacher(教师)类和一个Student(学生)类,二者有一部分数据成员是相同的,例如num(号码),name(姓名),sex(性别)。
编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。
可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。