C++程序设计教程第10章.pdfVIP

  • 19
  • 0
  • 约2.68万字
  • 约 28页
  • 2018-03-23 发布于河南
  • 举报
C++程序设计教程第10章.pdf

第 10章 多 态 性 教学提示:多态性是面向对象程序设计中最重要的特性之一。直观地讲,多态是指类 族中具有相似功能的不同函数使用同一名称来实现,从而可以使用相同的调用方式来调用 这些具有不同功能的同名函数。又称为“ 同一接口,多种方法”。从实现的角度来讲,多态 可以划分为两类:编译时的多态和运行时的多态。前者是在编译的过程中确定了同名操作 的具体操作对象,称为静态多态,如函数重载和运算符重载;而后者则是在程序运行过程 中才能动态地确定所针对的具体对象,称为动态多态。在C++面向对象程序设计中,动态 多态是通过虚函数来实现的,即在类等级的不同层次中,可以说明名字、参数特征和返回 值类型都相同的虚拟成员函数;而在不同层次的类中,虚函数的实现算法各不相同。虚函 数机制使得程序员能够在一个类等级中使用相同函数的多个不同版本,在运行时刻才根据 接收消息的对象所属的类,动态地决定具体执行哪个特定的版本,这称为动态联编。 多态性机制可以用同一个名字实现多个不同版本,增加了面向对象软件系统的灵活性, 进一步减少了冗余信息。同时当需要扩充程序增加所要处理的实体种类时,仅需定义新的 派生类并在新派生类中定义所需要的虚函数即可,显著提高了软件的可重用性和可扩充性。 本章主要学习运算符重载、虚拟函数实现和动态联编的实现机理等。 学习目标: 理解静态联编和动态联编的概念; 掌握运算符重载的实现方法; 了解虚拟函数和动态联编对实现动态多态的作用; 理解纯虚拟函数和抽象类的概念和实现方法; 了解虚拟析构函数的概念和作用,掌握其声明和使用方法; 理解动态联编的实现机理,学会使用动态多态特性解决实际问题。 10.1 静态联编与动态联编 所谓联编 Binding ,就是使计算机程序的不同部分彼此关联的过程,也就是把一个标 识符名和一个存储地址联系在一起的过程;用面向对象的术语讲,就是把一条消息和一个 对象的方法相结合的过程。根据联编工作所处的阶段不同,可以区分出两种不同的联编方 法,分别为静态联编和动态联编。 10.1.1 静态联编 联编工作在编译链接阶段完成,称为静态联编。因为所有联编过程都在程序开始运行 之前完成,因此也称为先前联编或早期联编。在编译链接过程中,编译器根据类型匹配等 特征确定程序中操作调用与执行该操作的代码关系,即确定某一同名标识到底要调用哪一 第 10章 多态性 ·295 · 段程序代码,然后由链接器接管这些标识符,并用物理地址代替它们。静态联编的优点是 执行速度快,运行时的开销仅仅是传递参数、执行函数体、清除栈等。 在面向对象程序设计中,静态多态有普通成员函数重载和运算符重载,可以通过静态 联编解决。本节讨论普通成员函数重载的实现机理,运算符重载将在本章第2 节中详细讨论。 普通成员函数的重载有以下两种形式。 1. 在同一个类中重载 在同一个类中说明名字相同、参数特征不同的多个成员函数,如前面讲过的构造函数 的重载和成员函数的重载,编译时根据函数参数类型的不同或参数个数不同,能够确定调 用函数的代码。 2. 在派生类中重载基类的成员函数 在派生类中说明与基类同名,参数完全相同的成员函数。编译时通过以下两种形式区 分重载函数。 1 使用作用域分辨符加以区分,例如: Circle::area 调用Circle 类中的成员函数area Point:: area 调用Point类中的成员函数area 2 根据对象类型来区分。例如: c.area 调用 Circle::area p.area 调用 Point::area cptr- area 调用 Circle::area pptr- area 调用 Point::area 其中c 和p 分别是Circle 类和Point 类的对象,cptr 和pptr 分别是指向Circle 类和Point 类的指针。 【例10.1】 编译时的多态性 静态联编 的实现。 // ch10_1.cpp, 编译时的多态性 静态联编 的实现 #include class Point //类Point 的定义 public: Point double i 0, double j 0 x i, y j; double area //返回点的面积 0.0 cout 点的面积:; return 0.0; protected: double x,y; //点的坐标 ; const double pi 3.14159; class Circle : public Point //类Circle 的定义 public: Circle double i 0, double j 0, double r 1 : Point i,j radiu

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档