作业━━第 5 章(4)━━运算符重载.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 ;