8.1类的派生与继泵 吸收基类的成员不论是数据成员,还是函数成定 ●●● 除构造函数与析构函数外全盘接收。 编制 声明一个和某基类成员同名的新成员派 派生改造基类成员生类中的新成员就屏蔽了基类同名成员 类时 称为同名覆盖( override) 可分 四步发展新成派生类新成员必须与基类成员不同名,它 的加入保证派生类在功能上有所发展。 重写构造函数与析构函数 算法和编程的步骤必须规范化地编程 第二步:新成员如是成员函数,参数表也必须一样,否则是 重载。 第三步:独有的新成员才是继承与派生的核心特征。 第四步:是重写构造函数与析构函数,派生类不继承这两种 函数
编制 派生 类时 可分 四步 吸收基类的成员 改造基类成员 发展新成员 重写构造函数与析构函数 8.1.1 类的派生与继承 不论是数据成员,还是函数成员, 除构造函数与析构函数外全盘接收 声明一个和某基类成员同名的新成员派 生类中的新成员就屏蔽了基类同名成员 称为同名覆盖(override) 派生类新成员必须与基类成员不同名,它 的加入保证派生类在功能上有所发展。 算法和编程的步骤必须规范化地编程: 第二步:新成员如是成员函数,参数表也必须一样,否则是 重载。 第三步:独有的新成员才是继承与派生的核心特征。 第四步:是重写构造函数与析构函数,派生类不继承这两种 函数
8.2公有派生与私有派生 ●●●●● 继承方式,亦称为访问控制,是对基类成员的引用作进一步的限制。。 继承方式也有三种:公有( public)方式,保护( protected)方式和。。 私有( private)方式,亦称公有继承、保护继承和私有继承 ●●●● 在派生类的定义中,基类前所加的继承方式有两方面含义:派生类成员 (新增)函数对基类(继承来的)成员的访问权限,和从派生类对象之外对 派生类对象中的基类成员的访问权限。一般来说,公有派生是绝对主流。 1.公有继承( public)。 公有继承的特点是基类的公有成员和保护成员作为派生类的 成员时,它们都保持原有的状态,而基类的私有成员仍然是私有 的 2.私有继承( private)。 私有继承的特点是基类的公有成员和保护成员作为派生类的 私有成员,并且不能被这个派生类的子类访问 3.保护继承( protected) 保护继承的特点是基类的所有公有成员和保护成员都成为派 生类的保护成员,并且只能被它的派生类成员函数或友元访问 基类的私有成员仍然是私有的
8.1.2 公有派生与私有派生 继承方式,亦称为访问控制,是对基类成员的引用作进一步的限制。 继承方式也有三种:公有(public)方式,保护(protected)方式和 私有(private)方式,亦称公有继承、保护继承和私有继承。 在派生类的定义中,基类前所加的继承方式有两方面含义:派生类成员 (新增)函数对基类(继承来的)成员的访问权限,和从派生类对象之外对 派生类对象中的基类成员的访问权限。一般来说,公有派生是绝对主流。 1. 公有继承(public)。 公有继承的特点是基类的公有成员和保护成员作为派生类的 成员时,它们都保持原有的状态,而基类的私有成员仍然是私有 的。 2. 私有继承(private)。 私有继承的特点是基类的公有成员和保护成员作为派生类的 私有成员,并且不能被这个派生类的子类访问。 3. 保护继承(protected)。 保护继承的特点是基类的所有公有成员和保护成员都成为派 生类的保护成员,并且只能被它的派生类成员函数或友元访问, 基类的私有成员仍然是私有的
8.2公有派生蜀私有派生 派生方式基类中的在派生类中对在派生类对象外 访问限定基类成员的访访问派生类对象 可限定 的基类成员 公有派生 public public 可直接访问 protected protected 不可直接访问 private不可直接访问不可直接访间 私有派生 public private 不可直接访问 protected private 不可直接访问 private不可直接访间不可直接访问 (1)在公有继承时,派生类的对象可以访问基类中的公有成 员;派生类的成员函数可以访问基类中的公有成员和保护成员。 这里,一定要区分清楚派生类的对象和派生类中的成员函数对 基类的访问是不同的。 (2)在私有继承时,基类的成员只能由直接派生类访问,而 无法再往下继承
8.1.2 公有派生与私有派生 private 不可直接访问 不可直接访问 protected private 不可直接访问 私有派生 public private 不可直接访问 private 不可直接访问 不可直接访问 protected protected 不可直接访问 公有派生 public public 可直接访问 在派生类对象外 访问派生类对象 的基类成员 在派生类中对 基类成员的访 问限定 基类中的 访问限定 派生方式 (1)在公有继承时,派生类的对象可以访问基类中的公有成 员;派生类的成员函数可以访问基类中的公有成员和保护成员。 这里,一定要区分清楚派生类的对象和派生类中的成员函数对 基类的访问是不同的。 (2)在私有继承时,基类的成员只能由直接派生类访问,而 无法再往下继承
8.2公有派生蜀私有派生 ●●●●● 情况相同。两者的区别仅在于对派生类的成员而言,对基 类成员有不同的可访问性。 (4)如果派生类定义了与基类同名的成员,称派生类的成 员覆盖了基类的同名成员,若要在派生类中使用基类同名 成员,可以显式地使用类名限定符: 类名::成员 (5)派生类不能访问基类私有成员 基类 派生类 基类 派生类 基类 派生类 public public public -public Protected protectedprotected protectedproteced private private private private 不可见 不可见 不可见 private派生 protected派生 public派生
8.1.2 公有派生与私有派生 (3)对于保护继承方式,这种继承方式与私有继承方式的 情况相同。两者的区别仅在于对派生类的成员而言,对基 类成员有不同的可访问性。 (4)如果派生类定义了与基类同名的成员,称派生类的成 员覆盖了基类的同名成员,若要在派生类中使用基类同名 成员,可以显式地使用类名限定符: 类名 :: 成员 (5)派生类不能访问基类私有成员 基类 派生类 基类 派生类 基类 派生类 public public public public Protected protected protected protected proteced private private private private 不可见 不可见 不可见 private 派生 protected 派生 public 派生
8.2公有派生蜀私有派生 ●●●●● 派生继承的例子: ●●●● ●●0 class Base t ●●● ●●●● private int b39 protected int b2: public. int b1 Si class D1: public Base t publica void testo {b1=10;∥/可以,b1为 public b2=20}//可以,b2为 proteced b3=30}//不可以,b3为 private
8.1.2 公有派生与私有派生 派生继承的例子: class Base { private: int b3; protected: int b2; public: int b1; }; class D1:public Base { public: void test() { b1 = 10; // 可以,b1为public b2 = 20; // 可以,b2为proteced b3 = 30; // 不可以,b3为private } }