C面向对象程序第11章.ppt_第1页
C面向对象程序第11章.ppt_第2页
C面向对象程序第11章.ppt_第3页
C面向对象程序第11章.ppt_第4页
C面向对象程序第11章.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+ 面对对象程序设计 授课老师: 第11章 友元与运算符重载 本章要点 11.1 友元 11.2 运算符重载 11.3 多态性与虚函数 本章要点 友元的概念 运算符重载的概念 运算符重载函数的应用 多态技术的概念及实现 虚函数的概念及使用 11.1.1友元函数 友元函数的特点是能够访问类中的私有成员的非成员 函数。友元函数从语法上看,它与普通函数一样,即 在定义上和调用上与普通函数一样。友元函数要在类 定义时声明,声明时要在其函数名前加上关键字friend 。该声明可以放在公有部分,也可以放在私有部分。 友元函数的定义既可以在类内部进行,也可以在类外 部进行。 定义普通友元函数的格式为: friend (形参表) 【例11-1】 友元函数的应用 #include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ #include “math.h“ class Point public: Point(double xx,double yy) x=xx; y=yy; void Getxy(); friend double Distance(Point /定义友元函数 private: double x,y; ; void Point:Getxy() cout; /友元类类名 【例11-2】友元类示例 #include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ class TwoValues int a, b; public: TwoValues(int i,int j) a=i; b=j; friend class Min; ; class Min public: void min(TwoValues x); ; void Min:min(TwoValues x) cout operator () 11.2.2运算符重载应用示例 在C+语言中,只有取成员运算符“.”、指针取内容运算符“*” 、作用域分辨符“:”、条件运算符“?:”和“sizeof”运算符 不能进行重载,其余运算符都能进行重载。 运算符的重载形式有两种,重载为类的成员函数和重载为 类的友元函数。 (1)运算符重载为类的成员函数的一般语法形式为: operator () ; (2)运算符重载为类的友元函数的一般语法形式为: friend operator () ; 【例11-3】 单目运算符重载应用举例 #include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ class MySample int n; public: MySample(int x) n=x; operator +() n+; operator +(int) n+=2; void Display() cout (参数 表) 虚函数就是在基类中被关键字virtual说明,并在 派生类中重新定义的函数。在派生类中重新定义 时,其函数原型,包括返回类型、函数名、参数 个数与参数类型的顺序,都必须与基类中的原型 完全相同。 2.定义虚函数注意事项 (1) 虚函数是非静态的、非内联的成员函数,而 不能是友元函数,但虚函数可以在另一个类中被 声明为友元函数。 (2) 虚函数声明只能出现在类定义的函数原型声 明中,而不能在成员函数的函数体实现的时候声 明。 (3) 一个虚函数无论被公有继承多少次,它仍然 保持其虚函数的特性。 (4) 若类中一个成员函数被说明为虚函数,则该 成员函数在派生类中可能有不同的实现。 (5) 定义了虚函数后,程序中声明的指向基类的 指针就可以指向其派生类。 【例11-5】 虚函数应用举例 #include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ class parent protected: char version; public: parent() version=A; virtual void print() /定义虚函数 coutprint(); derived1 d1(3); op= op-print(); derived2 d2(15); op= op-print(); coutfunc1(); /调用 derived:func1() bp-func2(); /调用 base:func2() bp-func4(); /调用 base:func4() getchar(); 程序运行结果如下: derived funcl base func2 base func4- 4.多重继承与虚函数 多重继承可以视为多个单继承的组合。因此,多 重继承情况下的虚函数调用与单继承情况下的虚 函数调用有相似之处。 【例11-7】多重继承与虚函数应用举例。 #include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ class base1 public: virtual void fun() /定义fun()为虚函数 coutfun(); /此处的fun()为虚函数因此调用派 生类derived的fun() ptr2= ptr2-fun(); /此处的fun()为非虚函数,ptr2为base2 的指针,因此调用基类base2的fun() getchar(); 程序运行结果如下: derived base2 11.3.3纯虚函数和抽象类 纯虚函数 基类往往表示一种抽象的概念,它并不与具体的事物 相联系。 当在基类中不能为虚函数给出一个有意义的实现时, 可以将其声明为纯虚函数。纯虚函数是一个在基类中 说明的虚函数,它在该基类中没有定义,但要求在它 的派生类中定义自己的版本或重新说明为纯虚函数。 纯虚函数的作用是为派生类提供一个一致的接口。 纯虚函数的声明格式如下: virtual ()=0; 【例11-8】 纯虚函数应用举例 #include “stdafx.h“ #include “stdio.h“ #include “iostream.h“ class circle protected: int r; public: void setr(int x) r=x; virtual void show()=0; /纯虚函数 ; /接下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论