运算符重载作业

运算符重载作业
运算符重载作业

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

运算符重载基础概念练习题 1、下列运算符中, ()运算符在C++中不能重载。 A = B () C :: D delete 2、下列运算符中, ()运算符在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、友元运算符obj>obj2被C++编译器解释为()。 A operator>(obj1,obj2) B >(obj1,obj2) C obj2.operator>(obj1) D obj1.oprator>(obj2) 8、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。 A operator+有两个参数,operator*有两个参数 B operator+有两个参数,operator*有一个参数 C operator+有一个参数,operator*有两个参数 D operator+有一个参数,operator*有一个参数 9、重载赋值操作符时,应声明为()函数。 A 友元 B 虚 C 成员 D 多态 10、在一个类中可以对一个操作符进行()重载。 A 1种 B 2种以下 C 3种以下 D 多种 11、在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。

C++期末复习--1.练习题_选择

面向对象程序设计综合练习(单选题) 单选题 1.C++源程序文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 2.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分 隔符。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车 3.关于封装,下列说法中不正确的是()。 A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体 B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见) C. 通过封装,每个对象都成为相对独立的实体 D. 通过封装,对象的属性都是不可见的 4.面向对象软件开发中使用的OOA表示()。 A. 面向对象分析 B. 面向对象设计 C. 面向对象语言 D. 面向对象方法 5.面向对象软件开发中使用的OOD表示()。 A. 面向对象分析 B. 面向对象设计 C. 面向对象语言 D. 面向对象方法 6.在一个类的定义中,包含有()成员的定义。 A. 数据 B. 函数 C. 数据和函数 D. 数据或函数 7.在类作用域中能够通过直接使用该类的()成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何 8.在关键字public后面定义的成员为类的()成员。 A. 私有 B. 公用 C. 保护 D. 任何 9.在关键字private后面定义的成员为类的()成员。 A. 私有 B. 公用 C. 保护 D. 任何 10.假定AA为一个类,a为该类公有的数据成员,x为该类的一个对象,则访问x对象 中数据成员a的格式为()。 A. x(a) B. x[a] C. x->a D. x.a 11.假定AA为一个类,a()为该类公有的成员函数,x为该类的一个对象,则访问x对象 中成员函数a()的格式为()。 A. x.a B. x.a() C. x->a D. x->a() 12.假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访 问px所指对象中数据成员a的格式为()。 A. px(a) B. px[a] C. px->a D. px.a 13.假定AA为一个类,a为该类私有的数据成员,GetValue()为该类公有成员函数,它 返回a的值,x为该类的一个对象,则访问x对象中数据成员a的格式为()。 A. x.a B. x.a() C. x->GetValue() D. x.GetValue() 14.假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定 义,则函数头为()。 A. int AA::a() B. int AA:a() C. AA::a() D. AA::int a() 15.假定AA为一个类,a为该类公有的数据成员,若要在该类的一个成员函数中访问它,

运算符重载练习题.

运算符重载 一.单项选择题 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); }; 答案: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. 设有以下类定义,其中说明了“+”运算符重载函数的原型。这是一个友元函数,当类

运算符重载知识题

. 《面向对象程序设计》习题 班级:学号:姓名:名单序号:成绩: 第7章运算符重载和多态性 一、选择题(共30分,每题1分) 1.下列运算符中,()运算符在C++中不能重载。 A.?: B.[] C. new D.++ 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. +,-,=,delete 10. 在名为BigNumber类的类体中对运算符函数double进行如下声明: operator double(BigNumbe); 函数声明中有一个明显的错误,这个错误就是()。 A.参数表中不应该有任何参数 B.缺少对函数返回类型的说明 C.参数声明中缺少参数变量 D.函数声明中缺少函数体 11. 下列关于运算符重载的描述中,正确的是()。 A. 运算符重载成为成员函数时,若参数表中无参数,重载是一元运算符 B. 一元运算符只能作为成员函数重载 C. 二元运算符重载成为非成员函数时,参数表中有一个参数

C++运算符重载

一、运算符重载的规则 运算符重载规则如下: ①、C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。 ②、重载之后运算符的优先级和结合性都不会改变。 ③、运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 不能重载的运算符只有五个,它们是:成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、条件运算符“?:”。 运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。 运算符重载为类的成员函数的一般语法形式为: 函数类型 operator 运算符(形参表) { 函数体; } 运算符重载为类的友元函数的一般语法形式为: friend 函数类型 operator 运算符(形参表) { 函数体; } 其中,函数类型就是运算结果类型;operator是定义运算符重载函数的关键字;运算符是重载的运算符名称。 当运算符重载为类的成员函数时,函数的参数个数比原来的操作个数要少一个;当重载为类的友元函数时,参数个数与原操作数个数相同。原因是重载为类的成员函数时,如果某个对象使用重载了的成员函数,自身的数据可以直接访问,就不需要再放在参数表中进行传递,少了的操作数就是该对象本身。而重载为友元函数时,友元函数对某个对象的数据进行操作,就必须通过该对象的名称来进行,因此使用到的参数都要进行传递,操作数的个数就不会有变化。 运算符重载的主要优点就是允许改变使用于系统内部的运算符的操作方式,以适应用户自定义类型的类似运算。 一般说来,单目运算符最好被重载为成员;对双目运算符最好被重载为友元函数,双目运算符重载为友元函数比重载为成员函数更方便此,但是,有的双目运算符还是重载为成员函数为好,例如,赋值运算符。 二、运算符重载为成员函数 对于双目运算符B,如果要重载B为类的成员函数,使之能够实现表达式oprd1 B oprd2,其中oprd1为类A的对象,则应当把B重载为A类的成员函数,该函数只有一个形参,形参的类型是oprd2所属的类型。经过重载后,表达式oprd1 B oprd2 就相当于函数调用 oprd1.operator B(oprd2).

c++运算符重载习题

Task8-1 /* 1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和*/ #include 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<<"("<int) //这里编译器不会把2向上转换即(int->double) 这的强者类型转换 //呵呵恐怖吗你以为你在调用第二个函数结果调用的是第一个 system("pause"); }

程序设计教程课后习题答案第7章操作符重载.doc

第 7 章操作符重载 1、为什么要对操作符进行重载?是否所有的操作符都可以重载? 答:通过对C++操作符进行重载,我们可以实现用C++的操作符按照通常的习惯来对某些类 (特别是一些数学类)的对象进行操作,从而使得程序更容易理解。除此之外,操作符重载 机制也提高了 C++语言的灵活性和可扩充性,它使得 C++操作符除了能对基本数据类型和构造数 据类型进行操作外,也能用它们来对类的对象进行操作。 不是所有的操作符都可以重载,因为“. ”,“.* ”,“:: ”,“?: ”,sizeof 这五个操作符不能重载。 2、操作符重载的形式有哪两种形式?这两种形式有什么区别? 答:一种就是作为成员函数重载操作符;另一种就是作为全局(友元)函数重载操作符。 当操作符作为类的非静态成员函数来重载时,由于成员函数已经有一个隐藏的参数 this ,因此对于双目操作符重载函数只需要提供一个参数,对于单目操作符重载函数则不需 提供参数。 当操作符作为全局函数来重载时,操作符重载函数的参数类型至少有一个为类、结构、 枚举或它们的引用类型。而且如果要访问参数类的私有成员,还需要把该函数说明成相应类 的友元。对于双目操作符重载函数需要两个参数,对于单目操作符重载函数则需要给出一个参 数。操作符 =、 ( ) 、 [ ] 以及 -> 不能作为全局函数来重载。 另外,作为类成员函数来重载时,操作符的第一个操作数必须是类的对象,全局函数 重载则否。 3、定义一个时间类Time,通过操作符重载实现:时间的比较(==、 != 、 >、 >=、 <、<=)、 时间增加 / 减少若干秒( +=、-= )、时间增加 / 减少一秒( ++、-- )以及两个时间相差的秒数( - )。 解: class Time { private : int hour, minute, second; public : Time() { hour=minute=second=0; } Time(int h) { hour=h; minute=second=0; } Time(int h, int m) {hour=h;

运算符重载练习1

第10章运算符重载 一、选择题 1.在下列运算符中,不能重载的是( )。 (a) ! (b) sizeof (c) new (d) delete 2. 在下列运算符中,不能重载的是( )。 (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 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;

4运算符重载复习题2

运算符重载复习题2 1、下列运算符中, ()运算符在C++中不能重载。 A = B () C :: D delete 2、下列运算符中, ()运算符在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、友元运算符obj>obj2被C++编译器解释为()。 A operator>(obj1,obj2) B >(obj1,obj2) C obj2.operator>(obj1) D obj1.oprator>(obj2) 8、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是()。 A operator+有两个参数,operator*有两个参数 B operator+有两个参数,operator*有一个参数 C operator+有一个参数,operator*有两个参数 D operator+有一个参数,operator*有一个参数 9、重载赋值操作符时,应声明为()函数。 A 友元 B 虚 C 成员 D 多态 10、在一个类中可以对一个操作符进行()重载。

Counter类(运算符重载练习)

Problem A: Counter类(运算符重载练习) Time Limit: 1 Sec Memory Limit: 128 MB Submit: 739 Solved: 516 [Submit][Status][Web Board] Description 编写一个计算器Counter类,对其重载运算符“+”。用下面的主程序测试,使测试结果正确。 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; return 0; } Input Output varOne: 2 varTwo: 4 varThree: 6 源代码: #include using namespace std; class Counter { public: Counter(double Val=0.0) { itsVal=Val; }

double getValue()const { return itsVal; } Counter operator+ (const Counter &v) { return Counter(itsVal + v.getValue()); } private: double itsVal; }; int main() { Counter varOne(2), varTwo(4), varThree; varThree = varOne + varTwo; cout << "varOne: " << varOne.getValue()<< endl; cout << "varTwo: " << varTwo.getV alue() << endl; cout << "varThree: " << varThree.getValue() << endl; return 0; }

C++重载运算符的几类使用方法

1.非运算符重载实现复数的加法运算//非运算符重载实现复数的加法运算 //complex.h #include #ifndef COMPLEX_H #define COMPLEX_H class complex { public: complex(); doublegetreal(); doublegetimag(); voidsetreal(double); voidsetimag(double); void display(); private: double real; double image; }; #endif //complex.cpp #include #include"complex.h" complex::complex() { real = 0; image = 0; } void complex::setreal(double r) { real = r; } void complex::setimag(double i) { image = i; } double complex::getreal() { return real; }

double complex::getimag() { return image; } void complex::display() { cout<<"the result is\n"< #include"complex.h" complex add(complex comp1,complex comp2); complex sub(complex comp1,complex comp2); void main() { complex c1,c2,c3,c4; c1.setreal(2.0); c1.setimag(3.0); c2.setreal(1.0); c2.setimag(4.0); c3 = add(c1,c2); cout<<"c3 = c1 + c2 , "; c3.display(); c4 = sub(c1,c2); cout<<"c4 = c1 - c2 ,"; c4.display(); } complex add(complex comp1,complex comp2) { complex temp; temp.setreal(comp1.getreal() + comp2.getreal()); temp.setimag(comp1.getimag() + comp2.getimag()); return temp; } complex sub(complex comp1,complex comp2) { complex temp; temp.setreal(comp1.getreal() - comp2.getreal()); temp.setimag(comp1.getimag() - comp2.getimag()); return temp; } 2.运算符重载作为类的成员函数 //运算符重载作为类的成员函数

C选择题练习

继承练习 1.在派生类对基类继承的传递性中,C 是错误的。 (2分) A 在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员 B 在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员 C 在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员 D 不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可能见的。 2.下列有关继承和派生的叙述中,正确的是: C (2分) A 派生类不能访问通过私有继承的基类的保护成员 B 多继承的虚基类不能够实例化 C如果基类没有默认构造函数,派生类就应当定义带形参的构造函数 D 类的的析构函数和虚函数都不能够被继承,需要在派生类中重新实现 第一次上机课 3.设x和y均为bool量,则x&&y为真的条件是(A)。 (2分) A它们均为真 B其中一个为真 C它们均为假 D其中一个为假 4.设int x;,则经过(C)后,语句*px=0;可将x值置为0。 (2分) A int * px; B int const * px=&x; C int * const px=&x; D const int * px=&x; 第三次上机课

在以下哪种情形,复制构造函数会被调用。( B )(2分) A当一个对象采用引用方式,作为参数传递给一个函数 B当一个函数采用值方式,返回一个对象 C当一个对象赋值给另一个对象 D以上答案都不对 2-2 对于以下关于友元的说法(D) (2分) A如果函数fun被声明为类A的友元函数,则该函数成为A的成员函数 B如果函数fun被声明为类A的友元函数,则该函数能访问A的保护成员,但不能访问私有成员 C如果函数fun被声明为类A的友元函数,则fun的形参类型不能是A。 D以上答案都不对 2-3 对于类之间的友元关系:(D) (2分) A如果类A是类B的友元,则B的成员函数可以访问A的私有成员 B如果类A是类B的友元,则B也是A的友元。 C如果类A是类B的友元,并且类B是类C的友元,则类A也是类C的友元。 D以上答案都不对。 2-4 友元的作用是(A)(2分) A提高程序的运用效率 B加强类的封装性 C实现数据的隐藏性 D增加成员函数的种类

c++练习习题

C++练习题: 1、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是()。 A.面向过程B.面向对象 C.安全性 D.复用性 2、C++流中重载了运算符>>,它是一个()。 A.用于输出操作的非成员函数 B.用于输入操作的成员函数 C.用于输入操作的非成员函数 D.用于输出操作的成员函数 3、下列关于运算符重载的描述中,()是正确的。 A.运算符重载不可以改变语法结构 B.运算符重载可以改变优先级 C.运算符重载可以改变结合性 D.运算符重载可以改变操作数的个数 4、友元运算符obj1>obj2被C++编译器解释为()。 A.obj2.operator>(obj1) B.>(obj1,obj2) C.operator>(obj1,obj2) D.obj1.operator>(obj2) 5、在多继承中,公有派生和私有派生对于基类成员在派生类中的可访问性与单继承的规 则()。 A.部分相同,部分不同 B.完全不同 C.完全相同 D.以上都不对 6、下面关于C++流的叙述中,正确的是()。 A.cin是一个输入流对象B.可以用ifstream定义一个输出流对象 C.执行语句序列char *y="PQMN"; cout<

C++给学生习题第7章练习题

第7章练习题 同步练习 一、选择题 1.在下列运算符中,不能重载的是()。 (A)! (B)sizeof (C)new (D)delete 2.在下列关于运算符重载的描述中,()是正确的。 (A)可以改变参与运算的操作数个数(B)可以改变运算符原来的优先级 (C)可以改变运算符原来的结合性(D)不能改变原运算符的语义 3.运算符函数是一种特殊的()或友元函数。 (A)构造函数(B)析构函数(C)成员函数(D)重载函数 4.设op表示要重载的运算符,那么重载运算符的函数名是()。 (A)operator op (B)op (C)函数标识符(D)函数标识符op 5.用于类运算的运算符通常都要重载。但有两个运算符系统提供默认重载版本,它们是()。 (A)->和. (B)++和--(C)=和& (D)new和delete 【解答】 B D C A C 同步练习 一、选择题 1.在下列函数中,不能重载运算符的函数是()。 (A)成员函数(B)构造函数(C)普通函数(D)友元函数 2.在下列运算符中,要求用成员函数重载的运算符是()。 (A)= (B)== (C)<= (D)++ 3.在下列运算符中,要求用友元函数重载的运算符是()。 (A)= (B)[] (C)<< (D)() 4.如果希望运算符的操作数(尤其是第一个操作数)有隐式转换,则重载运算符时必须用()。 (A)构造函数(B)析构函数(C)成员函数(D)友元函数 5.当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数一般定义为()。 (A)构造函数(B)析构函数(C)成员函数(D)友元函数【解答】 B A C D C 二、程序练习 1.阅读程序,写出运行结果。 #include using namespace std; 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:

相关文档
最新文档