文档详情

C++运算符重载与友元.ppt

发布:2017-05-04约8.43千字共70页下载文档
文本预览下载声明
面向对象程序设计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=++
显示全部
相似文档