5.4派生类成员的访问属性 三、不同的继承方式下,基类成员在派生类中的访问方式如下: 1、公用继承:基类的公用成员和保护成员在派生 类中保持原有的访问属性,其私有成员仍为基类的 私有,派生类新增成员不可访问它。 公用基类的成员 在公用派生类中的访问属性 公用成员 公用 保护成员 保护 私有成员 不可访问 15
15 5.4 派生类成员的访问属性 三、不同的继承方式下,基类成员在派生类中的访问方式如下: 1、公用继承:基类的公用成员和保护成员在派生 类中保持原有的访问属性,其私有成员仍为基类的 私有,派生类新增成员不可访问它。 公用基类的成员 在公用派生类中的访问属性 公用成员 保护成员 私有成员 不可访问 保护 公用
5.4派生类成员的访问属性 例:用如下示意图来说明公用继承的访问属性: 基类A 子类B 子类B public: public: public: int i,j; 公用继承 int i,j; int m,n,i,j; private: private: private: int k; int k; 实际派生类 int,p; public: 不可访问: 派生类新 int m,n; int k; 增成员 private: int p; 基类A中的公用成员引、j,私有成员k;被公用派生给子类B; 子类B自己新增公用成员m、n,私有成员p; 结果:子类B具有的公用成员为m、n、i、j,私有成员为p;基类 的私有成员k在子类B中不可访问。 16
16 5.4 派生类成员的访问属性 例:用如下示意图来说明公用继承的访问属性: 子类B public: int m,n,i,j; private: int,p; 不可访问: int k ; 基类A public: int i,j; private: int k; 子类B public: int i,j; private: int k; public: int m,n; private: int p; 公用继承 派生类新 增成员 实际派生类 基类A中的公用成员i 、j,私有成员 k;被公用派生给子类B; 子类B自己新增公用成员 m、n,私有成员p; 结果:子类B具有的公用成员为 m、n 、i、j ,私有成员为p;基类 的私有成员k 在子类B中不可访问
5.4派生类成员的访问属性 三、不同的继承方式下,基类成员在派生类中的访问方式: 2、私有继承:基类的公用成员和保护成员在派生 类中成为私有成员,其私有成员仍为基类私有, 派生类新增成员不可访问它。 私有基类的成员 在私有派生类中的访问属性 公用成员 私有 保护成员 私有 私有成员 不可访问 17
17 5.4 派生类成员的访问属性 2、 私有继承:基类的公用成员和保护成员在派生 类中成为私有成员,其私有成员仍为基类私有, 派生类新增成员不可访问它。 私有基类的成员 在私有派生类中的访问属性 公用成员 保护成员 私有成员 不可访问 私有 私有 三、不同的继承方式下,基类成员在派生类中的访问方式:
5.4派生类成员的访问属性 三、不同的继承方式下,基类成员在派生类中的访问方式: 3、保护继承:基类的公用成员和保护成员在派生 类中成为保护成员,其私有成员仍为基类的私 有,派生类新增成员不可访问它。 保护基类的成员 在保护派生类中的访问属性 公用成员 保护 保护成员 保护 私有成员 不可访问 18
3、保护继承:基类的公用成员和保护成员在派生 类中成为保护成员,其私有成员仍为基类的私 有,派生类新增成员不可访问它。 5.4 派生类成员的访问属性 三、不同的继承方式下,基类成员在派生类中的访问方式: 保护基类的成员 在保护派生类中的访问属性 公用成员 保护成员 私有成员 不可访问 保护 保护 18
四、例题5.2公用继承举例 #include <iostream.h> #include <string.h> 这段程序有错误吗?如果有请找出来 class person ④ {public: void get_value() 思考:应该如何修改使得程序能正常运行 ⑥ cin>>num>>name; void display() ⑧ cout<<"id:"<<num<<endl; ⑨ cout<<"name:"<<name<<endl; ⑩ private: int num;string name; class student:public person/派生类 ④ [public: void display() 6 {cout<<"id:"<<num<<endl; cout<<“name:”<<name<<endl;/错误,派生类中不能访问基类私有成员 ⑧ cout长<“stu_id:"<<stu_id<<endl;}/∥错误,派生类中不能访问基类私有成员 private: int stu_id; 21 ; 19
19 四、例题5.2 公用继承举例 ① #include <iostream.h> ② #include <string.h> ③ class person ④ {public: ⑤ void get_value( ) ⑥ { cin>>num>>name; } ⑦ void display( ) ⑧ { cout<<“id:”<<num<<endl; ⑨ cout<<“name:”<<name<<endl; } ⑩ private: ⑪ int num; string name; ⑫ }; ⑬ class student : public person // 派生类 ⑭ {public: ⑮ void display( ) ⑯ {cout<<“id:”<<num<<endl; ⑰ cout<<“name:”<<name<<endl; ⑱ cout<<“stu_id:”<<stu_id<<endl; } ⑲ private: ⑳ int stu_id; 21 }; 思考:应该如何修改使得程序能正常运行 // 错误, 派生类中不能访问基类私有成员 // 错误, 派生类中不能访问基类私有成员 这段程序有错误吗?如果有请找出来