文档库 最新最全的文档下载
当前位置:文档库 › 第6章 运算符重载

第6章 运算符重载

第6章运算符重载

6.1 选择题

1.在下列运算符中,能重载的是( a,c,d )。

(a) ! (b) sizeof (c) new (d) delete

2. 在下列运算符中,不能重载的是( c )。

(a) <= (b) >> (c) && (d) &=

3.下列关于运算符重载的描述中,( d )是正确的。

(a) 可以改变参与运算的操作数个数(b) 可以改变运算符原来的优先级

(c) 可以改变运算符原来的结合性(d) 不能改变原运算符的语义

4.下列函数中,能重载运算符的函数是( b,c )。

(a) 成员函数 (b) 构造函数(c) 析构函数 (d) 友员函数

5.不能用友员函数重载的是( a )。

(a) = (b) == (c) += (d) !=

6.下面描述中,错误的是( b )。

(a) 只有系统预先定义的运算符才可能被重载

(b) 使用类型转换函数不能把一个类转换为另一个类

(c) 使用类型转换函数可以把类转换为基本类型

(d) 类型转换函数只能定义为一个类的成员函数,不能定义为类的友员函数

6.2 阅读下列程序,写出执行结果

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;

}

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 )

6.3 编程题

1.分别使用成员函数和友员函数编程序重载运算符“+”,使该运算符能实现两个字符串的连接。

解答:略。

2.设向量X = ( x1 ,x2 ,x3) 和 Y = ( y1 , y2 ,y3 ),则它们之间的加、减和积分别定义为:

X + Y = ( x1 + y1 , x2 + y2 , x3 + y3 )

X - Y = ( x1 - y1 , x2 - y2 , x3 - y3 )

X * Y = x1 * y1 + x2 * y2 + x3 * y3

编程序对运算符“+”、“-”和“*”重载,实现向量之间的加、减、乘运算。

解答:略。

3. 定义一个类nauticalmile_kilometer,它包含两个数据成员kilometer(千米)和meter(米)。还包含一个构造函数对数据成员初始化;成员函数print用于输出数据成员kilometer和meter的值;类型转换函数double()实现把千米和米转换为海里(1海里=1.852千米)。编写main函数,测试类nauticalmile_kilometer。

解答:

#include

const double n = 1.852; // 定义海里与千米和米的转换系数(1海里=1.852千米)

class nauticalmile_kilometer

{ public:

nauticalmile_kilometer( int km,double m )

{ kilometer = km; meter = m; }

void print()

{ cout<<"kilometer="<

private:

int kilometer;

double meter;

};

nauticalmile_kilometer::operator double()

{ return ( meter / 1000 + double( kilometer )) / n; }

void main()

{ nauticalmile_kilometer obj( 100,50 );

obj.print();

cout << "nauticalmile=" << double( obj ) << endl; }

相关文档