第7章 运算符重载-习题
运算符重载练习题.

运算符重载一.单项选择题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课后题答案

第一章:面向对象程序设计概述[1_1]什么是面向对象程序设计?面向对象程序设计是一种新型的程序设计范型。
这种范型的主要特征是:程序=对象+消息。
面向对象程序的基本元素是对象,面向对象程序的主要结构特点是:第一:程序一般由类的定义和类的使用两部分组成,在主程序中定义各对象并规定它们之间传递消息的规律。
第二:程序中的一切操作都是通过向对象发送消息来实现的,对象接受到消息后,启动有关方法完成相应的操作。
面向对象程序设计方法模拟人类习惯的解题方法,代表了计算机程序设计新颖的思维方式。
这种方法的提出是软件开发方法的一场革命,是目前解决软件开发面临困难的最有希望、最有前途的方法之一。
[1_2]什么是类?什么是对象?对象与类的关系是什么?在面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体。
对象可以认为是:数据+操作在面向对象程序设计中,类就是具有相同的数据和相同的操作的一组对象的集合,也就是说,类是对具有相同数据结构和相同操作的一类对象的描述。
类和对象之间的关系是抽象和具体的关系。
类是多个对象进行综合抽象的结果,一个对象是类的一个实例。
在面向对象程序设计中,总是先声明类,再由类生成对象。
类是建立对象的“摸板”,按照这个摸板所建立的一个个具体的对象,就是类的实际例子,通常称为实例。
[1_3]现实世界中的对象有哪些特征?请举例说明。
对象是现实世界中的一个实体,其具有以下一些特征:(1)每一个对象必须有一个名字以区别于其他对象。
(2)需要用属性来描述它的某些特性。
(3)有一组操作,每一个操作决定了对象的一种行为。
(4)对象的操作可以分为两类:一类是自身所承受的操作,一类是施加于其他对象的操作。
例如:雇员刘名是一个对象对象名:刘名对象的属性:年龄:36 生日:1966.10.1 工资:2000 部门:人事部对象的操作:吃饭开车[1_4]什么是消息?消息具有什么性质?在面向对象程序设计中,一个对象向另一个对象发出的请求被称为“消息”。
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。
运算符重载自考习题

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.写出下面程序的输出结果。
类和对象与运算符重载 - 答案

选择题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指针的说法正确的是()。
二级复习题7 运算符重载

运算符重载1.以下程序的执行结果是( )#include <iostream.h>class Sample{ int n;public:Sample( ) {}Sample(int i){ n=i;}Sample & operator=(Sample);void disp( ){cout<< “n=”<<n<<endl;}};Sample &Sample::operator=(Sample s){Sample::n=s.n;return *this;}void main( ){Sample s1(10),s2; s2=s1;s2.disp( );}A.n=8B.n=10C.12D.n=52.以下不属于运算符重载应注意的问题是( )A.重载的运算符应保持其原有的基本语义B.重载的运算符应尽可能保持其原有的特性C.运算符的重载尽量不配套D.使用引用参数还是非引用函数3以下程序的执行结果是________.#include <iostream.h>int add(int x,int y){return x+y;}int add(int x,int y,int z){return x+y+z;}void main( ){ int a=4,b=6,c=10;cout<<add(a,b)<< “,”<<add(a,b,c)<<endl;}4.运算符如果作为成员函数重载时不得重载为静态函数,但( )除外.A.=和[ ]B.new和=C.new和deleteD.->和>5.以下程序的执行结果( )#include <iostream.h>class Sample{ int n;public:Sample(int i){n=i;}operator ++( ){n++;return n;} //前缀重载运算符operator ++(int) {n+=2;return n;} //后缀重载运算符void disp( ){cout<< "n="<<n<<endl;}};void main( ){ Sample A(2),B(2);A++;//调用后缀重载运算符++B;//调用前缀重载运算符A.disp( );B.disp( );}A.n=4B.n=1C.n=3D.n=5n=3 n=2 n=4 n=66.以下程序的执行结果________.#include <iostream.h>class Sample{ int n;public: Sample( ){}Sample(int i){n=i;}friend Sample operator – (Sample &,Sample &); friend Sample operator + (Sample &,Sample &); void disp( ){cout<< “n=”<<n<<endl;}};Sample operator – (Sample &s1,Sample &s2){int m=s1.n-s2.n;return Sample(m);}Sample operator+(Sample &s1,Sample &s2){int m=s1.n+s2.n;return Sample(m);}void main( ){ Sample s1(10),s2(20),s3;s3=s2-s1;s3.disp( );s3=s1+s2;s3.disp( );}。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》习题班级:学号:姓名:名单序号:成绩:第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. 下列运算符中哪些是不能够被重载的()。
A. .,.*,sizeof,::,?:B. ++,--,new,= =C. new,delete,>=,[ ]D. +,-,=,delete10. 在名为BigNumber类的类体中对运算符函数double进行如下声明:operator double(BigNumbe);函数声明中有一个明显的错误,这个错误就是()。
A.参数表中不应该有任何参数B.缺少对函数返回类型的说明C.参数声明中缺少参数变量D.函数声明中缺少函数体11. 下列关于运算符重载的描述中,正确的是()。
A. 运算符重载成为成员函数时,若参数表中无参数,重载是一元运算符B. 一元运算符只能作为成员函数重载C. 二元运算符重载成为非成员函数时,参数表中有一个参数D. C++中可以重载所有的运算符12. 在语句“cout<<’A’”中,cout是()。
A. 类名B. 函数名C. 对象名D. C++的关键字13.下面是重载为非成员函数的运算符的函数原型,其中错误的是()。
A.Fraction operator +(Fraction, Fraction)B.Fraction& operator =(Fraction&, Fraction)C.Fraction operator -(Fraction,Fraction)D.Fraction& operator *(Fraction, Fraction)14. 下列关于运算符重载的描述中,错误的是()。
A. 运算符重载不能改变操作数的个数、优先级、结合性和运算符的语法结构B. 所有的运算符都可以重载C. 运算符函数的调用必须使用关键字operatorD. 在C++语言中不可以通过运算符重载创造出新的运算符15. 如果表达式a>=b,中的“>=”是作为非成员函数重载的运算符,则可以等效地表示为()。
A. a.operator>=(b)B. a.operator>=(a)C. operator>=(a, b)D. a.operator>=(b, a)16. 下列有关运算符函数的描述中,错误的是()。
A. 运算符函数的名称总是以operator为前缀的B. 运算符函数的参数可以是对象C. 运算符函数只能定义为类的成员函数D. 在表达式中使用重载的运算符相当于调用运算符重载函数17. 将前缀运算符“--”重载为非成员函数,下列原型中,正确的是()。
A. Decr &operator- - (int);B. Decr operator- - (Decr &, int);C. friend Decr &operator- - (Decr &, int);D. friend Decr &operator- - (Decr &); 18.下列关于C++预定义流对象的叙述中,正确的是()。
A.cin是C++预定义的标准输入流对象B.cin是C++预定义的标准输入流类C.cout是C++预定义的标准输入流对象D.cout是C++预定义的标准输入流类19.有如下类定义class MyClass{ public:________________________private:int data;};若要为MyClass类重载流输入运算符“>>”,使得程序中可以用“cin>>obj;”的形式改变MyClass 类的对象obj中数据成员data的值,则在下划线处的声明语句应为()。
A.friend istream& operator>>(istream& is, MyClass &a);B.friend istream& operator>>(istream& is, MyClass a);C.istream& operator>>(istream& is, MyClass &a);D.istream& operator>>(istream& is, MyClass a);20.若要在Viz类中将*重载为一元运算符,下列重载函数声明中肯定有错的是()。
A.Viz operator *();B.Viz operator *(Viz);C.int operator *(Viz);D.Viz operator *(Viz, Viz);21.已知一运算符函数没有参数,下列关于该运算符函数的表述中错误的是()。
A.该运算符函数是成员函数B.该运算符是一元运算符C.由于无参数,使用该运算符时不需要操作数D.该运算符不是后缀++或后缀--22.现需要将Matrix类对象使用的关系运算符“==”重载为成员函数,用于判断两个对象是否相等,以下正确且合理的函数声明是()。
A.Matrix& operator==(const Matrix &a);B.Matrix operator==(const Matrix &a);C.bool& operator==(const Matrix &a);D.bool operator==(const Matrix &a);23. 关于赋值运算符=的重载,下列表述中错误的是()。
A.=的重载函数必须且只能有一个参数B.一个类即使没有重载=,也可以用=为该类的对象赋值C.为了实现像“x=y=z;”这样的连续赋值,=的重载函数的返回值必须声明为引用D.=可以重载为一个类的友元函数24.下列运算符中,可以重载为类的友元函数的运算符是()。
A.= B.( ) C.. D.<<25.有如下类的定义:class MyClass{public:MyClass(double d=0.0):val(d){ }//类型转换运算符double的定义private:double val;};若要使下列语句序列能够正常运行,下划线处的语句应为()。
MyClass x(2.1);cout<<double(x);A.operator double() const {return val;}B.friend operator double() const {return val;}C.double operator () const {return val;}D.friend double operator () const {return val;}26.若为类MyClass重载运算符“+”,下列声明中,错误的是()。
A.friend MyClass operator+(double, double);B.friend MyClass operator+(double, MyClass);C.friend MyClass operator+(MyClass, double);D.friend MyClass operator+(MyClass, MyClass);27.下列关于运算符重载的叙述中,正确的是()。
A.运算符重载的作用是使已有的运算符作用于类的对象B.通过运算符重载机制可以为C++语言扩充新的运算符C.重载运算符的操作类型可以全部为基本类型D.C++中已有的任何运算符都可以重载28. 运算符重载时以下性质一定会保持的是()。
A.返回值类型、操作数类型B.操作数类型、优先级C.优先级、操作数个数D.返回值类型、结合性29.下列关于运算符重载的描述中错误的是()。
A.不能通过运算符重载在C++中创建新的运算符B.赋值运算符=只能重载为成员函数C.运算符函数重载为类的成员函数时,第一操作数是该类对象D.重载类型转换运算符时,应声明返回值为void30.重载流插入运算符<<时,下列做法不合理的是()。
A.将运算符函数的返回值类型设为ostream &B.将运算符函数的第一个参数设为ostream &C.为运算符函数设置两个参数D.将运算符定义为类的成员函数二、填空题(共28分,每空1分)1.利用成员函数对二元运算符重载,其左操作数为,右操作数为。
2.对双目运算符而言,成员运算符函数带有参数,而友元运算符函数带有参数;对单目运算符而言,成员运算符函数参数,而友元运算符函数带参数。
3.重载运算符的函数不能有参数,否则就改变了运算符参数的个数。
4.对于用户自定义的类类型与其他数据类型之间的转换,通常有两种方法:通过进行类型转换;通过进行类型转换。
5.运算符重载函数一般采用两种形式:一是;二是。