第十章 运算符重载 复习题

合集下载

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

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

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

A=B()C::Ddelete2、下列运算符中,()运算符在C++中不能重载。

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

Aoperator>(obj1,obj2)B>(obj1,obj2)Cobj2.operator>(obj1)Dobj1.oprator>(obj2)8、在表达式某+y某z中,+是作为成员函数重载的运算符,某是作为非成员函数重载的运算符。

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

Aoperator+有两个参数,operator某有两个参数Boperator+有两个参数,operator某有一个参数Coperator+有一个参数,operator某有两个参数Doperator+有一个参数,operator某有一个参数9、重载赋值操作符时,应声明为()函数。

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

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

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

运算符重载练习题.

运算符重载练习题.

运算符重载一.单项选择题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 期末考试第十章运算符的重载复习提纲ppt课件

C  期末考试第十章运算符的重载复习提纲ppt课件
}; 定义重载运算符“++”函数 {
x++; y++; 用this来接受该对象的返回值 this的用法参照315页 }
第五页,编辑于星期五:十三点 二十分。
定义作为友元函数的重载函数
{ 赋值
pt.x++; _____运算_______________
8C、om用p于lerxe类(dt对uour象bnl的epr运,td;算ou符ble一i)般{re必a须l=r重; i载ma,g=但I;有} 两//构个造例重外载,函运数算符“=”和“&”不必用户重载 void C}omplex::display()
void dis{play();
//定义输出函数
详细讲解Po请i看nt书p上13(1m9-,3m20)页,p2(m+1,m+1),p3;
Cvooidmdpilse(px+lac+1yp(()3;1,4)).,pc2r(i5n,-t1(0));,c3;
//定义输出函数
print(); p3 = p2++;
例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的: Complex operator +(Complex &c1, Complex &c2); 下面就请来看个具体例子:
此例子是书上316页例题10.2
#include<iostream> using namespace std; class Complex
2、return *this;
3、 Point operator ++(Point &p,int)

运算符重载自考习题

运算符重载自考习题

2000.1019、重载的运算符仍然保持其原来的优先级、结合性和____________。

25、下面程序希望产生的输出为4+3i,但是运行输出是3+3i,请指出错误并改正#include <iostream.h>class complex {int real; // 实部int imag; // 虚部public:complex(int r=0,int i=0): real(r),imag(i) {}void show() { cout<<real<<"+"<<imag<<"i"<<endl;}complex operator++() { real++; return * this; }};void main() {complex c(2,3);++++c;c.show();}Key:complex &operator++() { real++; return * this; }2001.1029.下面是类fraction(分数)的定义,其中重载的运算符<<以分数形式输出结果,例如将三分之二输出为2/3。

在横线处填上适当字句。

class fraction{int den; //分子int num; //分母friend ostream& operator<<(ostream&,fraction);…};ostream& operator <<(ostream& os,fraction fr){_________;return _________;}29.os<<fr.den<<′/′<<fr.num os2002.106.如果表达式++i*k中的“++”和“*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为( )A.operator*(i.operator++(),k)B.operator*(operator++(i),k)C.i.operator++().operator*(k)D.k.operator*(operator++(i))33.写出下面程序的输出结果。

运算符重载题目

运算符重载题目

二、运算符重载(运算符重载的基本概念、运算符重载方法、运算符重载规则、特殊运算符重载和类型转换)单选题10道:1、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )。

A. AB operator+(AB& a,AB& b)B. AB operator+(AB& a)C. operator+(AB a)D. AB &operator+( )2、关于运算符重载,下面的叙述错误的是()。

A.运算符预定义的操作数个数不能改变B.重载不能改变运算符的优先级顺序C.参数的类型没有限制D.尽量使其与原意保持一致3、在一个类中可以对一个操作符进行(D )重载。

A. 1种B. 2种以下C. 3种以下D. 多种4、重载赋值操作符时,应声明为(C )函数。

A. 友元B. 虚C. 成员D. 多态5、要在类对象使用运算符,以下不必被重载的运算符是( A )。

A. []B. =C. ++D. --6、下列运算符中,不能重载的是(C )A.new B.() C.::D.&&7、在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。

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

A)operator+有两个参数,operator*有两个参数B)operator+有两个参数,operator*有一个参数C)operator+有一个参数,operator*有两个参数D)operator+有一个参数,operator*有一个参数8、友元运算符obj1>obj2被C++编译器解释为()。

A) operator>(obj1,obj2) B) >(obj1,obj2)C) obj1.operator>(obj2) D) obj2.operator>(obj1)9、已知某个类的友元函数重载了+=和-,a,b,c是该类的对象,则“a+=b-c”被C++编译器解释为()。

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++中不能重载。

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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运算符重载复习题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. 为满足运算符“+”的可交换性,必须将其重载为成员函数,重载的函数名是关键字加上运算符“+”。

operator12. 具有相同函数名但具有不同参数表的函数称为。

重载函数13. 拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是。

拷贝数据成员14.下列程序定义了一实部为mal,虚部为imag的复数类complex,并在类中重载了复数的+、-操作。

请将下列程序补充完整。

Class Complex{public:Complex(double r=0.0,double i=0.O){real=r;imag=i;}Complex operator +(Complex);friend Complex operator -(Complex,Complex);private:double real,imag;};Complex Complex:: operator +(Complex c){return *this;};operator -(Complex c1,Complex c2){return Complex( _);}33.this->real+=c.real,this->imag+=c.imag;Complexc1.real+c2.real,c1.imag+c2.imag15.设有类的定义:class Matrix //定义Matrix 类{public:Matrix(); //默认构造函数friend Matrix operator+(Matrix &,Matrix &); //重载运算符“+”void input(); //输入数据函数void display(); //输出数据函数int mat[2][3]; };实现两个矩阵A和B(均为2行3列)的和。

试写出成员函数Matrix( )实现构造函数初始化0值,友员函数Matrix operator+(Matrix &a,Matrix &b)实现重载运算符+,使之能用于该矩阵相加,如:C=A+B。

Matrix::Matrix() (1分) //定义构造函数{for(int i=0;i<2;i++) (1分)for(int j=0;j<3;j++) (1分)mat[i][j]=0; (1分)}Matrix operator+(Matrix &a,Matrix &b) (1分) //定义重载运算符“+”函数{Matrix c; (1分)for(int i=0;i<2;i++) (1分)for(int j=0;j<3;j++) (1分){c.mat[i][j]=a.mat[i][j]+b.mat[i][j];} (1分)return c; (1分)}16.仔细阅读程序,在题后写出其运行结果。

#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);void display();private:double real;double imag;};Complex Complex::operator + (Complex &c2){Complex c;c.real=real+c2.real;c.imag=imag+c2.imag;void Complex::display(){cout<<"("<<real<<","<<imag<<"i)";}int main(){Complex c1(3,4),c2(1,-2),c3;c3=c1+c2;c1.display(); cout<<'+';c2.display(); cout<<'=';c3.display();return 0;}运行结果:39. (3,4i)+(1,-2i)=(4,2i)17.仔细阅读程序,在题后写出其运行结果。

#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);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;}void Complex::display(){cout<<"("<<real<<","<<imag<<"i)";}int main(){Complex c1(2,3),c2(1,2),c3;c3=c1+c2;c1.display(); cout<<'+';c2.display(); cout<<'=';c3.display();return 0;}运行结果:39. (2,3i)+(1, 2i)=(4,5 i)18.写出下列程序的运行结果。

#include <iostream.h>class Coord{public:Coord(int i=0,int j=0){x=i;y=j;}void Print(){cout<<"x="<<x<<",y=”<<y<<endl;}friend Coord operator++(Coord op);private:int x,int y;};Coord operator ++(Coord op){++op.x; ++op.y;return op;}void main(){Coord obj(2,3); obj.Print();++obj; obj.Print();}运行结果:39. x=2,y=3 (2分)x=2,y=3 (3分)19. 下面程序是一个含有比较运算符和赋值运算符重载的程序,仔细阅读程序并将其补充完整。

#include <iosteam.h>class point{private:float x,y;public:point(float xx=0,float yy=0) { x=xx,y=yy;}point(point&);~point();bool operator==(point);bool operator!=(point);point& operator+=(point);float getx(){return x;}float gety(){return y;}};point::point(point& p){}bool point::operator==(point p){if((x==p.getx())&&(y==p.gety()) )Return 1;elseReturn 0;}bool point::operator!=(point p){if( )Return 1;elseReturn 0;}point& point::operator+=(point p){this->x+=p.getx();this->y+=p.gety();return}void main(){point p1(1,2),p2(3,4);p3(5,6);cout<<”p1==p2? ”<<(p1==p2)<<endl;cout<<”p1!=p2? ”<<(p1!=p2)<<endl;p3+=p1;cout<<”p3+=p1,p3: ”<<p3.getx()<<p3.gety()<<endl;x=p.getx(),y=p.gety() ;(x!=.getx())&&(y!=.gety())*this20.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。

相关文档
最新文档