4.6运算符重载.ppt
文本预览下载声明
版本号:V2006.12;运算符重载
特殊运算符的重载; 运算符的重载就是赋予已有的运算符多重含义。C++中通过重新定义运算符,使它能够用于特定的对象、执行特定的功能,从而增强C++的语言的扩充能力。
运算符重载函数定义的一般格式为:
type className::operator @(Arg);
Type: 为函数返回值的类型;
ClassName: 为运算符重载函数所在的类名;
@:为要重载的运算符;
Arg: 函数的参数列表;
Operator:是关键字,说明其后的运算符为重载运算符,便于编译器识别;;运算符的重载函数有两种形式
1. 重载为类的成员函数
2. 重载为类的友员函数;#includeiostream.h
class Complex{
float Real, Image;
public:
Complex(float r=0, float i=0){Real=r; Image=i;}
float GetR( ){ return Real;}
float GetI( ){ return Image;}
void Show( )
{ coutReal=Real\tImage=Image\n;}
Complex operator +(Complex ); //重载+运算符
Complex operator +(float); //重载+运算符
void operator +=(Complex ); //重载+=运算符
void operator =(Complex ); //重载=运算符
};;Complex Complex::operator +(Complex c)
{
Complex t;
t.Real=Real+c.Real;
t.Image=Image+c.Image;
return t;
}
Complex Complex::operator+(float s)
{
Complex t;
t.Real=Real+s;
t.Image=Image;
return t;
};void Complex::operator+=(Complex c)
{
Real=Real+c.Real;
Image=Image+c.Image;
}
void Complex::operator=(Complex c)
{
Real=c.Real;
Image=c.Image;
};void main(void) {
Complex c1(25, 50), c2, c3(100,200);
Complex c, c4(200,400);
c1.Show();
c2=c1; //c2.operator=(c1)
c2.Show();
c=c1+c3;
c.Show();
c+=c1; //c.operator+=(c1);
c.Show();
c4+=c1+c2; //A
c4.Show();
c4=c4+200; //B
c4.Show();
};说明:程序中出现的表达式
c1+c2
编译程序将其解释为:
c1.operator+(c2);
其中,c1和c2是complex类的对象,而operator+( )是运算符“+”的重载函数。
同理
c1-c2
解释为:
c1.operator-(c2);
因此:A行 c4+=c1+c2; 被解释为:
c4.operaotr+=(c1.operaotr+(c2));
;对应于二元运算c1+c2,运算符重载函数operaotr+(complex c)仅有一个参数c,可见,当重载为类的成员函数时,双目运算符仅有一个参数,对单目运算符,重载为成员函数时,则不需要带参数。;运算符的重载的几点注意:;; 运算符重载函数还可以为友元函数。当重载为友元函数时,由于友元函数不是类的成员函数,尽管它可以访问类的 所有成员(包括私有成员),但必须通过类的对象才能实现这种访问,因此当运算符重载为友元函数时,对于双目运算,友元函数必须有2个参数,对于单目运算符,友元函数也必须有一个参数。
注意,有些运算符不能重载为友元函数,它们是:
=,(),[ ]和-。;重载一元运算符的友元函数的格式为:
type operator @(参数)
参数:对于“++”,“--”一元运算符来说为类对象的引用,对于“-”一元运算符来说,可以为对象的引用也可为对象;
重载二元运算符的友元函数的格式为:
type operator @(参数1, 参数2)
两个参数中至少一个是类的对象;
;例:用友元运算符实现复数的运算,包括二元运算符+,一元运算符-,用成员函数实
显示全部