第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
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
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