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

第7章练习题

同步练习7.1

一、选择题

1.在下列运算符中,不能重载的是()。 (A)!

(B)sizeof

(C)new

(D)delete

2.在下列关于运算符重载的描述中,()是正确的。 (A)可以改变参与运算的操作数个数 (C)可以改变运算符原来的结合性 (A)构造函数 (A)operatorop (A)->和. 【解答】

B

D

3.运算符函数是一种特殊的()或友元函数。

(B)析构函数 (B)op

(C)成员函数 (C)函数标识符 (C)=和&

(D)重载函数 (D)函数标识符op (D)new和delete

4.设op表示要重载的运算符,那么重载运算符的函数名是()。

5.用于类运算的运算符通常都要重载。但有两个运算符系统提供默认重载版本,它们是()。

(B)++和-- C

A

C

(B)可以改变运算符原来的优先级 (D)不能改变原运算符的语义

同步练习7.2

一、选择题

1.在下列函数中,不能重载运算符的函数是()。 (A)成员函数 (A)= (A)=

(B)构造函数 (B)== (B)[]

(C)普通函数 (C)<= (C)<<

(D)友元函数 (D)++ (D)() (D)友元函数

2.在下列运算符中,要求用成员函数重载的运算符是()。 3.在下列运算符中,要求用友元函数重载的运算符是()。

4.如果希望运算符的操作数(尤其是第一个操作数)有隐式转换,则重载运算符时必须用()。 (A)构造函数

定义为()。

(A)构造函数 【解答】

二、程序练习

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 );

B

A

(B)析构函数 C

D

C

(C)成员函数

(D)友元函数

(B)析构函数

(C)成员函数

5.当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数一般

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; }

int main()

{ T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3; int a, b, c;

obj3 = obj1 * obj2; obj3.get( a, b, c );

cout<<\(obj2*obj3).get( a, b, c );

cout<<\} 【解答】

2.阅读程序,写出运行结果。

#include using namespace std; 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 << \private: int x, y; };

int main()

{ Vector v1( 1, 2 ), v2( 3, 4 ), v3; cout << \v1.display(); cout << \v2.display(); v3 = v1 + v2;

cout << \

v3.display(); } 【解答】

同步练习7.3

一、选择题

1.设有类A的对象Aobject,若用成员函数重载前置自增表达式,那么++Aobject被编译器解释为()。 (A)Aobject.operator++() (C)++(Aobject) (A)+和= (C)=和[]

(B)operator++(Aobject) (D)Aobject :: operator++() (B)[]和后置++ (D)前置++和[] (B)(表达式表)对象 (D)对象(表达式表)

2.运算符++,=,+和[]中,只能用成员函数重载的运算符是()。

3.在C++中,如果在类中重载了函数调用运算符(),那么重载函数调用的一般形式为()。 (A)(表达式)对象 (C)对象(表达式)

()。

(A)Aobject.operator-- () (C)-- (Aobject,0)

以表示为()。

(A)operator*(j.operator++(),k) (C)operator++(j).operator*(k) (A)(constA&)

(B)operator*(operator++(j),k) (D)operator*(operator++(j),) (B)(ostream&)

(D)(ostream&, constA&)

(B)operator-- (Aobject,0) (D)-- (Aobject,0)

4.设有类A的对象Aobject,若用友元函数重载后置自减表达式,那么Aobject--被编译器解释为

5.如果表达式++j*k中的++和*都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可

6.如果类A要重载插入运算符<<,那么重载函数参数表的形式一般定义为()。 (C)(constA&, ostream&)

【解答】

A C D B B D

同步练习7.4

一、选择题

1.类型转换函数只能定义为一个类的()。 (A)构造函数

(B)析构函数

(C)成员函数

(D)友元函数

2.具有一个非默认参数的构造函数一般用于实现从()的转换。 (A)该类类型到参数类型 (C)参数类型到基本类型

(B)参数类型到该类类型 (D)类类型到基本类型

3.假设ClassX是类类型标识符,Type为类型标识符,可以是基本类型或类类型,Type_Value为Type

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4