人民邮电出版3 第十七章类的继承
人民邮电出版社 第十七章 类的继承
人民邮电出版3 171继承 172继承机制中的初始化 173多重继承 174虚基类
人民邮电出版社 17.1 继 承 17.2 继承机制中的初始化 17.3 多重继承 17.4 虚基类
人民邮电出版3 171继承 1711继承与派生类 如果要为每一种数据结构都从头定义,无疑会 浪费时间。面向对象技术提供了一种机制,使程序 冷YB设计者能够重用其它类的定义,构成自己的特有的 类。在这个新的类中继承了被重用类的特性,又含 有自己的特性。这种机制称为继承
人民邮电出版社 17.1 继 承 17.1.1 继承与派生类 如果要为每一种数据结构都从头定义,无疑会 浪费时间。面向对象技术提供了一种机制,使程序 设计者能够重用其它类的定义,构成自己的特有的 类。在这个新的类中继承了被重用类的特性,又含 有自己的特性。这种机制称为继承
人民邮电出版3 从已有的类(基类)派生出一个新类(派生类) 的格式是: class类名1,访问控制类名2 private 成员说明列表 protected 成员说明列表 public 成员列表说明 其中类名1是派生类名,类名2是基类名。“访 问控制”用于规定基类成员在派生类中的访问权限 ,即基类成员在派生类中是公有的还是私有的
人民邮电出版社 从已有的类(基类)派生出一个新类(派生类) 的格式是: class 类名1 , 访问控制 类名2 { privare: 成员说明列表 protected: 成员说明列表 public: 成员列表说明 ); 其中类名1是派生类名,类名2是基类名。“访 问控制”用于规定基类成员在派生类中的访问权限 ,即基类成员在派生类中是公有的还是私有的
人民邮电出版3 访问控制使用 publicE时,说明基类是派生类的公 有成员,称类名1从类名2公有派生,类名2是类名1的 公有基类。访问控制使用 privatel时,说明基类是派 生类私有成员,称类名1从类名2私有派生,类名2是 类名1的私有基类。如果访问控制说明被省略,则隐 冷Y②S含为pria 无论是公有派生还是私有派生,基类的私有成员 在派生类中仍是私有。访问控制只是影响基类的公有 成员和保护成员
人民邮电出版社 访问控制使用public时,说明基类是派生类的公 有成员,称类名1从类名2公有派生,类名2是类名1的 公有基类。 访问控制使用private时,说明基类是派 生类私有成员,称类名1从类名2私有派生, 类名2是 类名1的私有基类。如果访问控制说明被省略,则隐 含为private。 无论是公有派生还是私有派生,基类的私有成员 在派生类中仍是私有。访问控制只是影响基类的公有 成员和保护成员
人民邮电出版3 1712公有派生 在公有派生的情况下,基类的所有 public成员被 继承为派生类的 public成员,在派生类之外可以访问 它们。基类中被说明为 private的成员,派生类的成员 函数不能访问它们。 基类中的 protected成员,在派生类中也是 protected成员。这些成员可以供派生类的成员访问, 八以但对其它类和函数则是私有的
人民邮电出版社 17.1.2 公有派生 在公有派生的情况下,基类的所有public成员被 继承为派生类的public成员,在派生类之外可以访问 它们。基类中被说明为private的成员,派生类的成员 函数不能访问它们。 基类中的 protected 成 员 , 在 派 生 类 中 也 是 protected成员。这些成员可以供派生类的成员访问, 但对其它类和函数则是私有的
人民邮电出版3 例1711从类 point(点)公有派生类 cercle(圆) 首先,定义一个类 point,它有两个私有数据成员: )点的横坐标和纵坐标y四个公有的成员函数,用于操作 数据成员x和y。类poin的定义如下: class point private intx Int y, public void set x(int num) int get x( void) void set y(int num) int get y(void)
人民邮电出版社 例 17.1.1 从类point( 点 )公有派生类cercle(圆) 首先,定义一个类point,它有两个私有数据成员: 点的横坐标x和纵坐标y。四个公有的成员函数,用于操作 数据成员x和y。类point的定义如下: class point { private: int x; int y; public: void set_x(int num); int get_x(void); void set_y(int num); int get_y(void); };
人民邮电出版3 我们用这个类派生出一个类 cercle。其数据成员 为圆的半径。因为,圆除了半径还需要一个点作为自 己的圆心而类“ point”中已经有了这方面内容,所以, 可以把类“ point”作为基类,加以继承。于是定义类 cercle(圆)如下: class circle: public point private int radius public int get radius( void void set radius(int num void show( void)
人民邮电出版社 我们用这个类派生出一个类cercle。其数据成员 为圆的半径。因为,圆除了半径还需要一个点作为自 己的圆心,而类“point”中已经有了这方面内容,所以, 可以把类“point”作为基类,加以继承。于是定义类 cercle(圆)如下: class circle : public point { private: int radius; public: int get_radius(void); void set_radius(int num); void show(void); };
人民邮电出版3 这个例子选用 public派生,所以,基类的所有 public元素,就好象在 point类中说明过一样。然 而,派生类中的成员函数不能访问基类的私有部 分。 如果把类 point中的 private改为 protected,则 派生类就能访间它们了。这就是说,proe成 员可以被继承
人民邮电出版社 这个例子选用public派生,所以,基类的所有 public元素,就好象在point 类中说明过一样。然 而,派生类中的成员函数不能访问基类的私有部 分。 如果把类point中的private改为protected,则 派生类就能访问它们了。这就是说,protected成 员可以被继承
人民邮电出版 1713私有派生 当访问控制选用 private时,即私有派生时, 基类的所有 public成员和 protected成员被继承为 派生类的 private成员。即派生类的成员可以把它 们作为自己私有成员来访问。派生类之外不能访 问它们。在基类被说明为 private成员,派生类 的成员也不能访问它们。即派生类不能继承基类 的 private成员
人民邮电出版社 17.1.3 私有派生 当访问控制选用private时, 即私有派生时, 基类的所有public成员和protected成员被继承为 派生类的private成员。即派生类的成员可以把它 们作为自己私有成员来访问。派生类之外不能访 问它们。在基类被说明为private的成员,派生类 的成员也不能访问它们。即派生类不能继承基类 的private成员