第八章继与多态 继承( inheritance)机制是面向对象程序设计使代 码可以复用的最重要的手段,它允许程序员在保持原有类 特性的基础上,调整部分成员的特性,也可以增加一些新 成员。 多态性( polymorphism)也是面向对象程序设计的 标志性特征。多态性是考虑在不同层次的类中,以及在同 类中,同名的成员函数之间的关系问题。函数的重载, 运算符的重载,都属于多态性中的编译时的多态性。运行 时的多态性,这是以虚基类为基础的多态性
第八章 继承与多态 继承(inheritance)机制是面向对象程序设计使代 码可以复用的最重要的手段,它允许程序员在保持原有类 特性的基础上 ,调整部分成员的特性,也可以增加一些新 成员。 多态性(polymorphism)也是面向对象程序设计的 标志性特征。多态性是考虑在不同层次的类中,以及在同 一类中,同名的成员函数之间的关系问题。函数的重载, 运算符的重载,都属于多态性中的编译时的多态性。运行 时的多态性,这是以虚基类为基础的多态性
第八章继与多态 8.1继承与派生的概念 8.5MFC基础类及其层次结构 8.2多重继承与派生类成员标识 8.6多态性与虚函数 8.3虚基类 8.7MFC的消息映射与命令传递 8.4派生类应用讨论
第八章 继承与多态 8.1 继承与派生的概念 8.3 虚基类 8.2 多重继承与派生类成员标识 8. 5 MFC基础类及其层次结构 8. 7 MFC的消息映射与命令传递 8. 6 多态性与虚函数 8.4 派生类应用讨论
1继景派的念 层次概念是计算机的重要概念。对类( class)分 层,提供类型/子类型的关系,这是通过继承 ( inheritance)的机制获得的。C++通过类派生 ( class derivation)的机制来支持继承。被继承的 类型称为基类( base class)或超类( superclass) 而新产生的类为派生类( derived class)或子类 subclass),反映了事物之间的联系,事物的共性 与个性之间的关系。从工作量上看,工作量少,重复 的部分可以从基类继承来,不需要单独编程
8.1 继承与派生的概念 层次概念是计算机的重要概念。对类(class)分 层,提供类型/子类型的关系,这是通过继承 (inheritance)的机制获得的。C++通过类派生 (class derivation)的机制来支持继承。被继承的 类型称为基类(base class)或超类(superclass), 而新产生的类为派生类(derived class)或子类 (subclass),反映了事物之间的联系,事物的共性 与个性之间的关系。从工作量上看,工作量少,重复 的部分可以从基类继承来,不需要单独编程
1继景派的念 81.1类的派生与继承 8.1.2公有派生与私有派生 8.1.3派生类的构造函数与析构函数
8.1 继承与派生的概念 8.1.1 类的派生与继承 8. 1.2 公有派生与私有派生 8. 1.3 派生类的构造函数与析构函数
8.1.1类的派生与继最 由基类派生出派生类的定义的一般形式为 cass派生类名:访问限定符基类名1《,访问限定符基类名 2 访问限定符基类名n》 《 private:》 成员表1;》//派生类增加或替代的私有成员 《 public: 成员表2;》/派生类增加或替代的公有成员 《 protected: 成员表3;》//派生类增加或替代的保护成员 其中基类1,基类2,…是已声明的类
8.1.1 类的派生与继承 由基类派生出派生类的定义的一般形式为 class 派生类名:访问限定符 基类名1《,访问限定符 基类名 2,……,访问限定符基类名n》 { 《 《private: 》 成员表1;》//派生类增加或替代的私有成员 《public: 成员表2;》//派生类增加或替代的公有成员 《protected: 成员表3;》//派生类增加或替代的保护成员 } 其中基类1,基类2,……是已声明的类
8.1.1类的派生与继最 派生出来的新类同样可以作为基类再继续派生出更新 的类,依此类推形成一个层次结构。直接参与派生出某类 称为直接基类,而基类的基类,以及更高层的基类称为间 接基类 在派生类的声明中,还有访问控制,亦称为继承方式 是对基类成员进一步的限制。访问控制也是三种:公有 ( public)方式,保护( protected)方式和私有 rivate)方式,亦称公有继承、保护继承和私有继承。 如不显式给出访问控制关键字,则默认为私有继承 。首先吸收基类的成员;第二 步是改造基类成员,称为同名覆盖( override)。第 步发展新成员;第四步是重写构造函数与析构函数
8.1.1 类的派生与继承 派生出来的新类同样可以作为基类再继续派生出更新 的类,依此类推形成一个层次结构。直接参与派生出某类 称为直接基类,而基类的基类,以及更高层的基类称为间 接基类。 在派生类的声明中,还有访问控制,亦称为继承方式, 是对基类成员进一步的限制。访问控制也是三种:公有 (public)方式,保护(protected)方式和私有 (private)方式,亦称公有继承、保护继承和私有继承。 如不显式给出访问控制关键字,则默认为私有继承 编制派生类时可分四步。首先吸收基类的成员;第二 步是改造基类成员,称为同名覆盖(override)。第三 步发展新成员;第四步是重写构造函数与析构函数
8.1.2公有派生与私有派生 在派生类的定义中,基类前所加的访问限定符,对由 基类继承来的成员的访问作了进一步的限制。有两方面含 义:派生类成员成员的访问,及从派生类对象之外对派生 类对象中的基类成员的访问。 公有派生基类的公有和保护成员的访问属性在派生 类中不变,而基类的私有成员不可访问。公有派生是 最常用的派生方式。 基类中的公有成员和保护成员在派生类中 成为私有成员
8.1.2 公有派生与私有派生 在派生类的定义中,基类前所加的访问限定符,对由 基类继承来的成员的访问作了进一步的限制。有两方面含 义:派生类成员成员的访问,及从派生类对象之外对派生 类对象中的基类成员的访问。 1.公有派生 .基类的公有和保护成员的访问属性在派生 类中不变,而基类的私有 成员不可访问。公有派生是 最常用的派生方式。 2.私有派生。基类中的公有成员和保护成员在派生类中 成为私有成员 3.保护派生
8.1.2公有派生与私有派生 派生方式基类中的访问限定在派生类中对基类成员在派生类对象外访问派 的访问限定 生类对象的基类成员 p public 可直接访问 公有派生 protected protected 不可直接访问 private 不可直接访问 不可直接访问 public prva 不可直接访问 私有派生 protected rivate 不可直接访问 prvate 不可直接访问 不可直接访问 表81公有派生和私有派生
8.1.2 公有派生与私有派生 派生方式 基类中的访问限定 在派生类中对基类成员 的访问限定 在派生类对象外访问派 生类对象的基类成员 公有派生 public public 可直接访问 protected protected 不可直接访问 private 不可直接访问 不可直接访问 私有派生 public private 不可直接访问 protected private 不可直接访问 private 不可直接访问 不可直接访问 表8.1 公有派生和私有派生
1.3派皱的构造画飘与析构画 派生类的构造函数的定义形式为: 派生类名::派生类名(参数总表):基类名1(参数表 1)《,基类名2(参数表2),…,基类名n(参数表 n)》,《成员对象名1(成员对象参数表1), 成 员对象名m(成员对象参数表m)》{ /派生类新增成员的初始化; 冒号后的基类名,成员对象名的次序可以随意,这里 的次序与调用次序无关。在创建派生类对象时,系统会首 先使用各参数表中列出的参数,调用基类和成员对象的构 造函数
8.1.3 派生类的构造函数与析构函数 派生类的构造函数的定义形式为: 派生类名::派生类名(参数总表):基类名1(参数表 1)《,基类名2(参数表2),……,基类名n(参数表 n)》,《成员对象名1(成员对象参数表1),……,成 员对象名m(成员对象参数表m)》{ ……//派生类新增成员的初始化; } 冒号后的基类名,成员对象名的次序可以随意,这里 的次序与调用次序无关。在创建派生类对象时,系统会首 先使用各参数表中列出的参数,调用基类和成员对象的构 造函数
心u 813派类的构造画数与析构画数 派生类构造函数各部分的执行次序为: 1.调用基类构造函数,按它们在派生类定义的先后顺序, 顺序 调用。 2.调用成员对象的构造函数,按它们在类定义中声明的先后 顺序,顺序调用。 3.派生类的构造函数体中的操作。 在派生类构造函数中,只要基类不是缺省构造函数都要显式给出 基类名和参数表,除非基类使用默认的构造函数。 析构函数的功能是作善后工作,派生类析构函数只要把派生类新 增一般成员处理好就可以了。 析构函数各部分执行次序与构造函数相反,首先对派生类新增 般成员析构,然后对新增对象成员析构,最后对基类成员析构
8.1.3 派生类的构造函数与析构函数 派生类构造函数各部分的执行次序为: 1. 调用基类构造函数,按它们在派生类定义的先后顺序, 顺序 调用。 2. 调用成员对象的构造函数,按它们在类定义中声明的 先后 顺序,顺序调用。 3. 派生类的构造函数体中的操作。 在派生类构造函数中,只要基类不是缺省构造函数都要显式给出 基类名和参数表,除非基类使用默认的构造函数。 析构函数的功能是作善后工作,派生类析构函数只要把派生类新 增一般成员处理好就可以了。 析构函数各部分执行次序与构造函数相反,首先对派生类新增一 般成员析构,然后对新增对象成员析构,最后对基类成员析构