面向对象程序设计第十五讲.pptVIP

  • 1
  • 0
  • 约3.68千字
  • 约 20页
  • 2018-05-05 发布于天津
  • 举报
面向对象程序设计第十五讲

注意事项 运算符重载函数operator@()可以返回任何类型,甚至可以使void类型,但通常返回类型与它所操作的类的类型相同,这样可使重载运算符用在复杂的表达式中。例如:复数的连续加、减。 在重载运算符时,运算符函数所作的操作不一定要保持C++中该运算符原有的含义,但这样容易造成混乱。所以保持原含义,容易被接受,也符合人们的习惯。 在C++中,用户不能定义新的运算符,只能从C++已有的运算符中选择一个恰当的运算符重载。 C++编译器根据参数的个数和类型来决定调用哪个重载函数。因此,可以为同一个运算符定义几个运算符重载函数来进行不同的操作。 运算符重载属于静态联编 友元运算符重载 在C++中,可以把运算符函数定义成某个类的友元函数,称为友元运算符函数。 友元运算符函数在类的内部的声明格式: friend type operator@(参数表); 定义格式: type operator@(参数表) { //函数体 } 与成元运算符不同,友元运算符函数是不属于任何类对象的,它没有this指针。 若重载的是双目运算符,则参数表中有两个操作数; 若重载的是单目运算符,则参数表中只有一个操作数 运算符重载为类的友元函数,就可以自由地访问该类的任何数据成员。这时,运算所需要的操作数都需要通过函数的形参来传递,在参数表中形参从左到右的顺序就是运算符操作数的顺序。 友元函数的双目运算符重载 对于双目运算符B,如果它的一个操作数为A类的对象,就可以将B重载为A类的友元函数,该函数有两个形参,其中一个形参的类型是A类。 重载后的使用方式: aa @ bb; operator @(aa,bb); 例子 #include iostream.h class complex { public: complex(double r=0.0,double i=0.0) {real=r;imag=i;} friend complex operator+(complex c1,complex c2); friend complex operator-(complex c1,complex c2); void display(); private: double real; double imag; }; void complex::display() {coutreal.imagendl;} complex operator+(complex c1,complex c2) {return complex(c2.real+c1.real,c2.imag+c1.imag);} complex operator-(complex c1,complex c2) {return complex(c1.real-c2.real,c1.imag-c2.imag);} void main() { complex c1(5,4),c2(2,10),c3; c1.display(); c2.display(); c3=c1+c2; c3.display(); c3=c1-c2; c3.display(); } 友元函数的单目运算符重载 对于前置单目运算符U,如果要实现表达式 U oprd,其中oprd为A类的对象,则U可以重载为A类的友元函数,函数的形参为A类的对象oprd。 对于后置单目运算符“++”和“—”,如果要实现表达式oprd++或oprd--,其中oprd为A类的对象,那么运算符就可以重载为A类的友元函数,这时函数的形参有两个,一个是A类的对象oprd,另一个是整型(int)形参。 成员运算符函数与友元运算符函数的比较 对双目运算符而言,成员运算符函数带有一个参数,而友元运算符函数带有两个参数;对单目运算符而言,成员运算符不带参数,而友元运算符函数带一个参数。 双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但有些情况,必须使用友元函数。 nclass nclass::operator +(int x) { nclass temp; temp.a=a+x; temp.b=b+x; return temp; } nclass ob; ob=ob+100; ob=100+ob;(error,? 如何实现?) 成员运算符函数和友元运算符都可以用习惯方式调用,也可以用他们专用的方式调用。 C++的大部分运算符即可说明为成员运算符,又可说明为友元运算符函数,究竟选择哪一种运算符函数好一些,没有定论,这主要取决于实际情况和程序员的习惯。 一般而言,对于双目运算符,将它重载为一个友元运算符函数比重载为一个成员运算符函数便于使用。若一个运算符的操作需要修改类对象的状态,则选择成员

文档评论(0)

1亿VIP精品文档

相关文档