
第五章继承与派生 5.1继承与派生的概念 5.2派生类的声明方式 5.3派生类的构成 5.4派生类成员的访问属性 5.5派生类的构造函数和析构函数 5.6多重继承 5.7基类与派生类的转换 5.8继承与组合 5.9继承在软件开发中的重要意义 0
0 5.1 继承与派生的概念 5.2 派生类的声明方式 5.3 派生类的构成 5.4 派生类成员的访问属性 5.5 派生类的构造函数和析构函数 5.6 多重继承 5.7 基类与派生类的转换 5.8 继承与组合 5.9继承在软件开发中的重要意义 第五章 继承与派生

5.1继承与派生的概念 一、为什么需要?(why) 类之间往往具有某种关系,“继承与派生”就是类间 的一种常用关系。 例如,人→学生→小学生 形状→点一→圆 又例如,公司四种雇员档案的管理: employee(员工):姓名、年龄、工资; manager(经理):姓名、年龄、工资、行政级别; engineer(工程师):姓名、年龄、工资、专业、学位; director(高级主管):姓名、年龄、工资、专业、学位、 职务 代码重复?
5.1 继承与派生的概念 一 、为什么需要?(why) 类之间往往具有某种关系, “继承与派生”就是类间 的一种常用关系。 例如,人 → 学生 → 小学生 形状 → 点 →圆 又例如,公司四种雇员档案的管理: employee(员工): 姓名、年龄、工资; manager(经理): 姓名、年龄、工资、行政级别; engineer(工程师): 姓名、年龄、工资、专业、学位; director(高级主管):姓名、年龄、工资、专业、学位、 职务 代码重复? 1

5.1继承与派生的概念 C++提供了继承与派生的功能,能很好地解决上 述问题(使代码可重用,避免重复!)。 二、相关概念: 1、继承与派生 所谓继承,就是根据一个已存在的类建立一个新的类。 已存在的类叫“基类”或“父类”,新建立的类叫“派生 类”或“子类”。 新建立的子类从基类那里获得基类的特性,称为类的继 承;由基类产生新的子类,叫派生
C++提供了继承与派生的功能,能很好地解决上 述问题(使代码可重用,避免重复!)。 5.1继承与派生的概念 二、相关概念: 1、继承与派生 所谓继承,就是根据一个已存在的类建立一个新的类。 已存在的类叫“基类”或“父类”,新建立的类叫“派生 类”或“子类” 。 新建立的子类从基类那里获得基类的特性,称为类的继 承;由基类产生新的子类,叫派生。 2

5.1继承与派生的概念 2、单继承: 人 学生 员工 小学生 大学生 经理 工程师 图5-1一个基类派生多级子类示意图 约定:箭头方向表示继承的方向,由派生类指向基类。 一个派生类只从一个基类派生,称为单继承;此种继承关 系所形成的层次是一个树形结构。 3
3 人 学生 员工 小学生 大学生 经理 工程师 图5-1 一个基类派生多级子类示意图 约定:箭头方向表示继承的方向,由派生类指向基类。 一个派生类只从一个基类派生,称为单继承;此种继承关 系所形成的层次是一个树形结构。 2、单继承: 5.1继承与派生的概念

5.1继承与派生的概念 3、多继承 基类: 研究生 职工 派生类: 在职研究生 图5-2多个基类派生一个子类示意图。 一个派生类有两个或多个基类的称为多重继承
4 5.1 继承与派生的概念 3、多继承 研究生 职工 在职研究生 基类: 派生类: 图5-2 多个基类派生一个子类示意图。 一个派生类有两个或多个基类的称为多重继承

5.1继承与派生的概念 4、多层次继承: 派生类可以作为基类再继续派生出更新的类,依此 类推形成一个层次结构。直接参与派生出某类称为直 接基类,而基类的基类,以及更深层的基类称为间接 基类。 学生 员工 小学生 大学生 经理 工程师
派生类可以作为基类再继续派生出更新的类,依此 类推形成一个层次结构。直接参与派生出某类称为直 接基类,而基类的基类,以及更深层的基类称为间接 基类。 4、多层次继承: 5.1 继承与派生的概念 人 学生 员工 小学生 大学生 经理 工程师 5

5.1继承与派生的概念 5、类族: CObject 令 CCmdTarget CWinThread CWnd CDocument CHinApp CFrameWnd CView CDialog 好 CIDIFrameWnd CIDIChildWnd C题inFrameWnd 6
5、类族: 一个基类可以派生出多个派生类。这样形成了一个 相互关联的类族。MFC就是这样的类族。 5.1 继承与派生的概念 6

5.2派生类的声明方式 一、声明方式 class派生类名:继承方式基类名 private: 成员表1; public: 成员表2: protected: 成员表3; }; 基类名是已定义的类。在派生类的类体中定义的成员称为 派生类成员,它们是新增加成员,给派生类添加了不同于基 类的新的属性和功能。 7
7 5.2 派生类的声明方式 一、声明方式 class 派生类名:继承方式 基类名 { private: 成员表1; public: 成员表2; protected: 成员表3; }; 基类名是已定义的类。 在派生类的类体中定义的成员称为 派生类成员,它们是新增加成员,给派生类添加了不同于基 类的新的属性和功能

二、例5.1把student类定义为person类的派生类 ① class student:public person ② {public: ② #include #include ③ void get_st() ③ using namespace std; ④ cin>>stu_id; ④ class person ⑤ ∥引用派生类私有成员 ⑤ {public: ⑥ void student_display() ⑥ void get_value()】 ⑦ cout>num>>name; ⑧ <stu_id<<endl; ⑧ void person_display() ⑨ private: ⑨ {cout<<"id:"<<num<<endl; 四 int stu_id; ⑩ cout<<"name:" ① } ① <<name<<endl; ② ② void main() private: ⑧ int num; student zhangsan; 四 string name; ④ zhangsan.get_value(); ; ⑤ zhangsan.person_display(); 16 zhangsan.get_st(); ⑩ zhangsan.student_display(); 1⑧
① #include ② #include ③ using namespace std; ④ class person ⑤ {public: ⑥ void get_value( ) ⑦ { cin>>num>>name; } ⑧ void person_display( ) ⑨ {cout>stu_id; } ⑤ //引用派生类私有成员 ⑥ void student_display( ) ⑦ { cout<<"stu_id:" ⑧ <stu_id<<endl; } ⑨ private: ⑩ int stu_id; ⑪ }; ⑫ void main( ) ⑬ { student zhangsan; ⑭ zhangsan.get_value(); ⑮ zhangsan.person_display( ); ⑯ zhangsan.get_st(); ⑰ zhangsan.student_display( ); ⑱ } 二、例5.1 把student 类定义为person类的派生类 8

5.2派生类的声明方式 三、练习: 把点类point定义为形状类shapel的派生 类;把圆类circle定义为类shapel的派生 类。 9
三、练习: 把点类point定义为形状类shape的派生 类;把圆类circle定义为类shape的派生 类。 5.2 派生类的声明方式 9