作业━━第 5 章(4)━━运算符重载.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运算符重载

【学习要点】

1.理解多态性的概念和实现。

①编译时多态性是通过函数重载、运算符重载实现的。

②运行时多态性是通过类的继承+虚函数实现的。

2.掌握运算符重载的作用和规则。

①在C++中可根据需要对运算符赋予多种含义,以配合用户自定义的类类型。

②运算符重载是通过定义运算符重载函数 operator运算符(实现的。

3.掌握双目、单目运算符重载为成员函数的方法。

4.掌握双目、单目运算符重载为友元函数的方法。

5.掌握重载为成员函数、重载为友元函数的区别:

①友元函数与成员函数不同,它不是类的成员,没有this指针。

②运算符 =、()、[ ]、—> 不能重载为友元函数,只能重载为成员函数。

③运算符插入”<<”、提取”>>” 只能重载为友元函数。

6.掌握几个特殊运算符“++”、“--”、“=”、“[ ]”、“<<”、“>>”的重载。

7.掌握类型转换函数。

8.掌握自定义字符串类。

9.掌握C++标准库中的string类的使用。

------------------------------------------------------------------------------------------------------------------------------------------------

【例题分析】

1.下面程序中的错误有几处?

#include

class C

{ int x , y ;

public:

C ( { }

C ( int a , int b : x( a , y( b { }

C operator@ ( C a

{ C temp ; temp.x=x+a.x ; temp.y=y+a.y ; return temp ; }

int operator# ( C a

{ return ( x * y ; }

friend C operator= ( C a

{ x=a.x ; y=b.y ; return *this ; }

void show(

{ cout << "x=" << x <<"\ty=" << y << endl ; }

};

void main(

{ C a( 2 , 3 , b( 2 , 3 , c ;

(a+b.show( ; c=a ; c.show( ;

}

【答案】3

【解析】

①函数C operator@ (C a ; 运算符重载是允许用户重新定义运算符的含义,但此运算符必须是C++系统预定义的,而“@”不是C++预定义的运算符,应换成“+”。

②函数int operator# (C a ; 符号#不允许重载,应换成“*”,另外形参C a也不需要。

③函数friend C operator = (C a ; 赋值运算符“=”只能重载为成员函数,不能重载为友元函数,故将friend删去。其次,返回类型最好是 C & 。

2.编写程序:存放在my Vector.cpp文件中,包含内容如下:

①定义向量类Vector。私有成员数据有:存放向量在三条坐标轴上投影值的x、y、z。公有成员函数有:可设置向量中x、y、z值的成员函数void set( float a=0, float b=0, float c=0 ;可输出向量中x、y、z值的成员函数void show( ;构造函数Vector ( float a=0 , float b=0 , float c=0 ;构造函数Vector( float v[ 3 ] ;两个赋值运算符“=”重载成员函数Vector & operator=( Vector v 、Vector & operator=( float v[ 3 ] 。

②将实现两个向量之间加、减、乘运算的三个独立函数声明为Vector类的友元函数:

friend Vector operator+( Vector v1 , Vector v2 ;

friend Vector operator-( Vector v1 , Vector v2 ;

friend float operator*( Vector v1 , Vector v2 ;

③编写main(函数去测试,完成向量间的运算。

【提示】若向量a在三条坐标轴上的投影为a x , a y , a z,则表达式a = { a x , a y , a z } 称为向量a的坐标表达式。设有两个向量a和b,它们之间的加、减、乘的运算公式为:

a +

b = { ax +bx , ay +by , az+bz }

a -

b = { ax -bx , ay -by , az-bz }

a *

b = ax *bx + ay *by + az *bz

将运算符“+”、“-”、“*”和“=”重载,实现向量间的加、减、乘、赋值运算。

【答案】编写程序如下:

#include

#include

class Vector

{ float x , y , z;

public:

Vector( float a=0 , float b=0 , float c=0

{ x=a ; y=b ; z=c ; }

Vector( float v[ 3 ]

{ x=v[0] ; y=v[1] ; z=v[2] ; }

void set( float a=0 , float b=0 , float c=0

{ x=a ; y=b ; z=c ; }

void show(

{ cout << x << 'i' ;

cout << ( (y<0 ? '-' : '+' << fabs(y << 'j' ;

cout << ( (z<0 ? '-' : '+' << fabs(z << 'k' << endl ; }

Vector & operator=( Vector v ;

相关文档
最新文档