vc第八章多态性课件(编辑修改稿)内容摘要:

B oprd 等同于 operator B(oprd )  后置单目运算符 ++和 重载后, 表达式 oprd B 等同于 operator B(oprd,0 ) 运算符重载 28 例 83  将 +、 (双目)重载为复数类的友元函数。  两个操作数都是复数类的对象。 运算符重载 include class plex //复数类声明 { public: //外部接口 plex(double r=,double i=) { real=r。 imag=i。 } //构造函数 friend plex operator + (plex c1,plex c2)。 //运算符 +重载为友元函数 friend plex operator (plex c1,plex c2)。 //运算符 重载为友元函数 void display()。 //显示复数的值 private: //私有数据成员 double real。 double imag。 }。 plex operator +(plex c1,plex c2) //运算符重载友元函数实现 { return plex(+, +)。 } plex operator (plex c1,plex c2) //运算符重载友元函数实现 { return plex(, )。 } // 思考:程序中的运算符函数应该采用什么形式重载。 应该如何优化这些函数的参数。 31 两种重载形式的比较  单目运算符一般被重载为成员函数,但双目运算符多数被重载为友员函数 –考虑 x + 27. 5( x为 plex类的一个对象 ) 若重载为友员函数: operator + ( x , 27. 5 ) operator + ( x , plex(27. 5) ) 若重载为成员函数: x. operator + (27. 5) x. operator + (plex(27. 5)) –再考虑 27. 5 + x 若重载为友员函数: operator + ( 27. 5 , x ) operator + ( plex(27. 5) , x ) 若重载为成员函数: 27. 5. operator + (x) // error 运算符重载 32 两种重载形式的比较 –但有些情况下,某些双目运算符不能被重载为友员函数,例如:各种赋值运算符 将赋值运算符‘ =’重载为 plex类的一个友员函数plex operator = (plexamp。 c1, const plex amp。 c2) { c1. real = c2. real。 c1. image = c2. image。 return c1。 }  x = y。 // operator = (x,y)。 right  27. 5 = x。 // operator = (plex(27. 5),x) error 运算符重载 33 复杂运算符的重载  下标运算符 [ ] –只能被重载为类的成员函数,且重载时只能显式声明一个参数 –举例:  函数调用运算符() –可以将函数调用运算符看作下标运算符 [ ]的扩展,可以带有零个或多个参数 –举例:利用重载函数调用运算符实现 f(x,y)=x*y+5 运算符重载 34 静态联编与动态联编  联编: –程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。  静态联编(静态束定) –联编工作出现在编译阶段,用对象名或者类名来限定要调用的函数。  动态联编 –联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。 例 例 多态的实现——联编 39 虚函数  虚函数是动态联编的基础。  是非静态的成员函数。  在类的定义中,在函数原型之前写 virtual。  virtual 只用来说明类定义中的原型,不能用在函数实现时。  具有继承性,基类中定义了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数。  本质:不是重载定义而是覆盖定义。  调用方式:通过基类指针或引用,执行时会 根据 指针指向的对象的类 ,决定调用哪个函数。 40 例 include class B0 //基类 B0声明 { public: //外部接口 virtual void display() {coutB0::display()endl。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。