第7章 继承.ppt
《第7章 继承.ppt》由会员分享,可在线阅读,更多相关《第7章 继承.ppt(123页珍藏版)》请在麦多课文档分享上搜索。
1、第7章 继承,7.1 类之间的关系,7.2 基类和派生类,7.3 基类的初始化,7.4 继承的应用实例,7.5 多继承,小结,7.1 类之间的关系,has-A,uses-A 和 is-A has-A 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。 uses-A 一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 is-A 机制称为“继承”。关系具有传递性,不具有对称性。,7.1 类之间的关系,不具有对称性 不是所有植物都属于蕨类,传递性 高等植物、蕨类植物、芒萁都是植物,具有植物的共同特
2、征,植物,7.1 类之间的关系,继承 是类之间定义的一种重要关系一个 B 类继承A类,或称从类 A 派生类 B类 A 称为基类(父类),类 B 称为派生类(子类),A,C3,B1,B2 的基类,A 的派生类 C1,C2,C3 的基类,A 的派生类(单继承) C3的基类,B1,B2 的派生类(多继承),B1 的派生类,类继承关系的语法形式class 派生类名 : 基类名表数据成员和成员函数声明;,7.2 基类和派生类,类继承关系的语法形式class 派生类名 : 基类名表数据成员和成员函数声明;,7.2 基类和派生类,基类名表 构成访问控制 基类名1, 访问控制 基类名2 , , 访问控制 基类
3、名n,类继承关系的语法形式class 派生类名 : 基类名表数据成员和成员函数声明;,7.2 基类和派生类,基类名表 构成访问控制 基类名1, 访问控制 基类名2 , , 访问控制 基类名n,访问控制 表示派生类对基类的继承方式,使用关键字:public 公有继承private 私有继承protected 保护继承,派生类对基类成员的使用,与继承访问控制和基类中成员性质有关 公有继承 基类的公有成员派生类的公有成员基类的保护成员派生类的保护成员 私有继承 基类的公有成员和保护成员派生类的私有成员 保护继承 基类的公有成员和保护成员派生类的保护成员 不论种方式继承基类,派生类都不能直接使用基类的
4、私有成员,7.2.1 访问控制,7.2.1 访问控制,7.2.1 访问控制,1.公有继承,#include class A public :void get_XY() cout x y ; void put_XY() cout h ; int get_V() return v ; void make_V() make_S(); v = get_S() * h ; / 使用基类成员函数protected: int h, v; ;,例7-1 公有继承的测试,7.2.1 访问控制,#include class A public :void get_XY() cout x y ; void put_X
5、Y() cout h ; int get_V() return v ; void make_V() make_S(); v = get_S() * h ; / 使用基类成员函数protected: int h, v; ;,7.2.1 访问控制,例7-1 公有继承的测试,#include class A public :void get_XY() cout x y ; void put_XY() cout h ; int get_V() return v ; void make_V() make_S(); v = get_S() * h ; / 使用基类成员函数protected: int h,
6、 v; ;,保护数据成员 在类层次中可见,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;cout “V
7、 = “ objC.get_V() endl ; ,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;co
8、ut “V = “ objC.get_V() endl ; ,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V(
9、) ;cout “V = “ objC.get_V() endl ; ,x y,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();obj
10、C.make_V() ;cout “V = “ objC.get_V() endl ; ,x y,s,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.
11、get_H();objC.make_V() ;cout “V = “ objC.get_V() endl ; ,对 objA 的 数据成员操作,x y,s,h v,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is obj
12、ect_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;cout “V = “ objC.get_V() endl ; ,调用基类A成员函数 对 objB 的数据成员操作,x y,s,h v,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “
13、S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;cout “V = “ objC.get_V() endl ; ,调用派生类B成员函数 对 objB 的数据成员操作,x y,s,h v,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B
14、:n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;cout “V = “ objC.get_V() endl ; ,调用基类A成员函数 对 objC 的数据成员操作,x y,s,h v,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C objC ;cout “It is object_A :n“ ;objA.get_XY
15、() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;cout “V = “ objC.get_V() endl ; ,调用派生类C成员函数 对 objC 的数据成员操作,x y,s,h v,7.2.1 访问控制,例7-1 公有继承的测试,void main() A objA ;B objB ;C ob
16、jC ;cout “It is object_A :n“ ;objA.get_XY() ;objA.put_XY() ;cout “It is object_B :n“ ;objB.get_XY() ;objB.make_S() ;cout “S = “ objB.get_S() endl ;cout “It is object_C :n“ ;objC.get_XY() ;objC.get_H();objC.make_V() ;cout “V = “ objC.get_V() endl ; ,x y,s,h v,7.2.1 访问控制,例7-1 公有继承的测试,7.2.1 访问控制,2.私有继承
17、,#include class A public :void get_XY() cout x y ; void put_XY() cout “x = “ x “, y = “ y n ; protected: int x, y ; ; class B : private A public :int get_S() return s ; void make_S() get_XY(); s = x * y ; private: int s ; ; void main() B objB ; cout “It is object_B :n“ ;objB.make_S() ;cout “S = “ ob
18、jB.get_S() endl ;,例7-2 私有继承的测试,7.2.1 访问控制,#include class A public :void get_XY() cout x y ; void put_XY() cout “x = “ x “, y = “ y n ; protected: int x, y ; ; class B : private A public :int get_S() return s ; void make_S() get_XY(); s = x * y ; private: int s ; ; void main() B objB ; cout “It is ob
19、ject_B :n“ ;objB.make_S() ;cout “S = “ objB.get_S() endl ;,调用基类成员函数,7.2.1 访问控制,例7-2 私有继承的测试,#include class A public :void get_XY() cout x y ; void put_XY() cout “x = “ x “, y = “ y n ; protected: int x, y ; ; class B : private A public :int get_S() return s ; void make_S() get_XY(); s = x * y ; priv
20、ate: int s ; ; void main() B objB ; cout “It is object_B :n“ ;objB.make_S() ;cout “S = “ objB.get_S() endl ;,访问私有数据成员,7.2.1 访问控制,例7-2 私有继承的测试,#include class A public :void get_XY() cout x y ; void put_XY() cout “x = “ x “, y = “ y n ; protected: int x, y ; ; class B : private A public :int get_S() r
21、eturn s ; void make_S() get_XY(); s = x * y ; private: int s ; ; void main() B objB ; cout “It is object_B :n“ ;objB.make_S() ;cout “S = “ objB.get_S() endl ;,7.2.1 访问控制,例7-2 私有继承的测试,#include class A public: A() x=1; int out() return x ; void addX() x+; private: int x ; ; class B : public A public:
22、B() y=1; int out() return y ; void addY() y+; private: int y ; ; void main() A a ;B b ;b.addX() ; b.addY() ;cout “a.x=“ a.out() endl ;cout “b.x=“ b.A:out() endl ;cout “b.y=“ b.out() endl ; ,例7-3 私有数据成员的测试,基类的私有数据成员 不能在派生类中直接访问 但派生类对象建立私有数据空间,7.2.1 访问控制,#include class A public: A() x=1; int out() ret
23、urn x ; void addX() x+; private: int x ; ; class B : public A public: B() y=1; int out() return y ; void addY() y+; private: int y ; ; void main() A a ;cout “a.x=“ a.out() endl ;B b ;b.addX() ; b.addY() ;cout “b.x=“ b.A:out() endl ;cout “b.y=“ b.out() endl ; ,7.2.1 访问控制,例7-3 私有数据成员的测试,#include class
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承 PPT
