C++程序设计教程 第12讲:虚函数(I)
C++程序设计教程 第12讲: 虚函数(II)
多态性 多态性( polymorphism) Shape TwoDimShape ThreeDim Shape Circle Sphere Square Cube Triangle Tetrahedron
多态性 多态性(polymorphism) Shape TwoDimShape ThreeDimShape Circle Square Triangle Sphere Cube Tetrahedron
多态性的特性 利用虚函数和多态性,程序员可以处理普遍性而让执行环 境处理特殊性。 多态性提高了可扩展性:处理多态性行为的软件可用与接 攸消息的对象无关的方式编写。(利用动态联编的特性) :插件技术 抽象类为类层次结构中的各个成员定义接口。 纯虚函数没有实体 纯虚函数必须在派生类中实现。 尽管不能实例化抽象基类的对象,但却可以声明抽象基类 的指针。例:如果 Shape是抽象基类 ●不能: Shape ob; 但可以: Shape*pOb; 多态性特别适合于实现分层的软件系统
多态性的特性 利用虚函数和多态性,程序员可以处理普遍性而让执行环 境处理特殊性。 多态性提高了可扩展性:处理多态性行为的软件可用与接 收消息的对象无关的方式编写。(利用动态联编的特性) 如:插件技术 抽象类为类层次结构中的各个成员定义接口。 纯虚函数没有实体; 纯虚函数必须在派生类中实现。 尽管不能实例化抽象基类的对象,但却可以声明抽象基类 的指针。例: 如果 Shape 是抽象基类, 不能:Shape Ob; 但可以: Shape* pOb; 多态性特别适合于实现分层的软件系统
纯虚函数 例研究:工资单系统 class Employeei virtual earnings( const =0: 1 必须重载并实现 class Boss: public Emplovee I virtual earnings( const; 1 class CommissionWorker: public Employee I virtual earnings( const; 3 class PieceWorker: publI 重载函数可以各 I virtual earnings( const; 3 不相同 class HourlyWorker public Emplovee I virtual earnings( const; 3 见FG61
实例研究:工资单系统 class Employee { virtual earnings() const = 0; } class Boss : public Employee { virtual earnings() const; } class CommissionWorker : public Employee { virtual earnings() const; } class PieceWorker : public Employee { virtual earnings() const; } class HourlyWorker : public Employee { virtual earnings() const; } 纯虚函数 必须重载并实现 重载函数可以各 不相同 见FIG6_1
输出代码 Rmp1。yee*ptr;//基类指针 Boss b John"Smith"800.00) ptr=6b;//指向派生类对象的基类指针 ptr->printo)i /动态绑定 cout < Wearned s"<< ptr->earnings()i /动态绑定 b printo)i //静态绑定 cout< Wearned郭″<<b, earnings); /静态绑定
输出代码 Employee* ptr; // 基类指针 Boss b ( “John”,”Smith”,800.00); ptr = &b; // 指向派生类对象的基类指针 ptr->print(); // 动态绑定 cout << “earned $” << ptr->earnings(); // 动态绑定 b.print(); // 静态绑定 cout << “earned $” << b.earnings(); // 静态绑定