C++运算符重载与友元.ppt
文本预览下载声明
面向对象程序设计C++ ——第6章 运算符重载与友元;主要内容;提出问题;分析问题;思考;说明;重新设计复数类Complex;完成复数与复数相加
Complex Complex::add(Complex c)
{
Complex temp;
temp.real = real + c.real;
temp.image = image + c.image;
return temp;
} ;完成复数与实数相加
Complex Complex::add(double d)
{
Complex temp;
temp.real = real + d;
temp.image = image;
return temp;
} ;int main()
{
Complex c1(2, 2.5);
Complex c2(3, 1.4);
Complex c3, c4;
c3=c1.add(c2);
c4=c1.sub(c2);
coutc3= c3.Real() +i c3.Imag()endl;
coutc4= c4.Real() +i c4.Imag()endl;?
return 0;
};用函数的方式将复数的加减运算表示出来远不如用运算符“+”、“-”直观
如果复数的运算能够用已有的运算符表示出来,则程序的易读性会大大增强,同时更符合人的思维习惯
C++提供了运算符重载机制,使得系统预定义的运算符能够完成用户自定义数据类型的运算 ;运算符重载;运算符重载;重载为类的成员函数;在复数类中重载运算符;运算符重载为成员函数时最多有一个形参
运算符重载的实质就是函数重载,只不过函数名换成了关键字operator和具体要重载的运算符
运算符重载的函数参数就是该运算符涉及的操作数,因此运算符重载在参数个数上是有限制的,这是它不同于函数重载之处。;class A
{ int i;
public:A(int a=0) { i=a; }
void Show(void){ couti=iendl; }
void AddA(A a, A b) //利用函数进行类之间的运算
{ i=a.i+b.i; }
};
int main()
{ A a1(10),a2(20),a3;
a1.Show ();
a2.Show ();
// a3=a1+a2; //不可直接运算
a3.AddA(a1,a2); //调用专门的功能函数
a3.Show ();
return 0; };class A
{ int i;
public:A(int a=0){ i=a; }
void Show(void){ couti=iendl; }
void AddA(A a, A b) //利用函数进行类之间的运算
{ i=a.i+b.i; }
A operator +(A a) //重载运算符+
{ A t; t.i=i+a.i; return t; }
};
int main()
{ A a1(10),a2(20),a3;
a1.Show ();
a2.Show ();
a3=a1+a2; //重新解释了加法,可以直接进行类的运算
a3.AddA(a1,a2); //调用专门的功能函数
a3.Show ();
return 0;};重载运算符与一般成员函数的比较:;A operator +(A a)
{ A t;
t.i=i+a.i;
return t;
};运算符重载的规则;运算符重载的规则;不能重载的运算符;单目运算符的重载;++为前置运算时,它的运算符重载函数的一般格式为:
type operator ++( )
++为后置运算时,它的运算符重载函数的一般格式为:
type operator ++(int) ;class A
{ float x, y;
public:
A(float a=0, float b=0){ x=a; y=b; }
A operator ++( ){A t; t.x=++ x; t.y=++y; return t;}
A operator ++(int) { A t; t.x=x++; t.y=y++; return t;}
};
int main()
{ A a(2,3), b;
b=++a;
b=a++;
return 0; };A operator ++( )
{ A t;
t.x=++
显示全部