选择题
1.在下列运算符中,能重载的是( )。
(a) ! (b) sizeof (c) new (d) delete
2.在下列运算符中,不能重载的是( )。
(a) <= (b) >> (c) ::(d) &=
3.下列关于运算符重载的描述中,( )是正确的。
(a) 可以改变参与运算的操作数个数(b) 可以改变运算符原来的优先级
(c) 可以改变运算符原来的结合性(d) 不能改变原运算符的语义
4.下列函数中,能重载运算符的函数是( )。
(a) 成员函数(b) 构造函数(c) 析构函数(d) 友员函数
5.不能用友员函数重载的是( )。
(a) = (b) = = (c) += (d) !=
6.下面描述中,错误的是( )。
(a) 只有系统预先定义的运算符才可能被重载
(b) 使用类型转换函数不能把一个类转换为另一个类
(c) 使用类型转换函数可以把类转换为基本类型
(d) 类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数
1、a,c,d
2、c
3、d
4、b,c
5、a
6、b
阅读下列程序,写出执行结果
1.#include〈iostream.h〉
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;
}
void main( )
{ T obj1( 1,2,3 ), obj2( 5,5,5 ), obj3;
int a , b , c;
obj3 = obj1 * obj2;
obj3.get( a, b, c );
cout << "( obj1 * obj2 ): \t"
<< "a = " << a << ’\t’ << "b = " << b<< ’\t’ << "c = " << c<< ’\t’ << endl;
( obj2 * obj3 ).get( a, b, c );
cout << "( obj2 * obj3 ): \t "
<< "a = " << a << ’\t’ << "b = " << b << ’\t’ << "c = "<< c << ’\t’ << endl;
}
【答案】
( obj1 * obj2 ): a = 5 b = 10 c = 15
( obj2 * obj3 ): a = 25 b = 50 c = 75
2.#include〈iostream.h〉
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 << "( " << x << ", " << y << ") "<< endl ; }
private:
int x , y ;
};
void main( )
{ vector v1( 1, 2 ), v2( 3, 4 ), v3 ;
cout << "v1 = " ;
v1.display( ) ;
cout << "v2 = " ;
v2.display( ) ;
v3 = v1 + v2 ;
cout << "v3 = v1 + v2 = " ;
v3.display( ) ;
}
【答案】
v1 = ( 1, 2 )
v2 = ( 3, 4 )
v3 = v1 + v2 = ( 4, 6 )。