11.4派生类成员的访问属 派生类生 基类成员 公有 私有 增加成员 保护 基类的私 并不是简单 派生类的 有公有保 地直接作为火 私有公有 护成员 派生类 保护成员 基类成员和派生类自己增加的成员是按 不同的原则处理的
基类成员和派生类自己增加的成员是按 不同的原则处理的。 11.4 派生类成员的访问属 派生类性 基类成员 增加成员 公有 私有 保护 基类的私 有公有保 护成员 并不是简单 地直接作为 派生类 派生类的 私有公有 × × 保护成员
在讨论访问属性时,要考虑以下几种情况: (1)基类的成员函数 基类成员 访问 (2)派生类的成员函数 派生类成员 基类的成员函数可以访问基类成员 派生类的成员函数可以访问派生类成员 私有数据成员只能被同一类中的成员函数访问 公用成员可以被外界访问。 (3)基类的成员函数 访问 派生类成员 基类的成员函数只能访问基类的成员,而不能 访问派生类的成员
基类的成员函数可以访问基类成员 派生类的成员函数可以访问派生类成员 私有数据成员只能被同一类中的成员函数访问 公用成员可以被外界访问。 (1) 基类的成员函数 基类成员 在讨论访问属性时,要考虑以下几种情况: (2) 派生类的成员函数 派生类成员 (3) 基类的成员函数 派生类成员 基类的成员函数只能访问基类的成员,而不能 访问派生类的成员 访问 访问 ×
(4)派生类外函数一→派生类成员 在派生类外可以访问派生类的公用成员,而不能访 问派生类的私有成员。 (5)派生类的成员函数?基类成员 (6 派生类外函数?基类成员 基类成员 确定基类的 两个因素共 所声明的 同决定基类 成员在派生 考虑 访问属性 成员在派生 类中的访问 类中的访问 属性 派生类所声 属性 明的对基类 的继承方式
(5) 派生类的成员函数 基类成员 (6) 派生类外函数 基类成员 (4) 派生类外函数 派生类成员 在派生类外可以访问派生类的公用成员,而不能访 问派生类的私有成员。 确定基类的 成员在派生 类中的访问 属性 考虑 基类成员 所声明的 访问属性 派生类所声 明的对基类 的继承方式 两个因素共 同决定基类 成员在派生 类中的访问 属性 ? ?
public(公用的) 不同的继承方式 决定了基类成员 基类的继承方式 private(私有的) 在派生类中的访 protected(保护的) 问属性。 (1) 公用继承(public inheritance) 基类的公用成员和保护成员在派生类中保持原有访问属性, 其私有成员仍为基类私有。 class A class B:public A (public: {public: void get_xy() int get_s(){return s; {cin>>x>>y;}; void make_s() void put_xy() {s=x*y;} {cout<<“x=“<x<K“ 66, protected:int s; cout<<“y=“<y<<endl; } protected:int x,y;
(1) 公用继承(public inheritance) 基类的公用成员和保护成员在派生类中保持原有访问属性, 其私有成员仍为基类私有。 基类的继承方式 public(公用的) private(私有的) protected(保护的) 不同的继承方式 决定了基类成员 在派生类中的访 问属性。 class A {public: void get_xy() {cin>>x>>y;}; void put_xy() {cout<<“x=“<<x<<“ “; cout<<“y=“<<y<<endl;} protected: int x,y; }; class B:public A {public: int get_s(){return s;} void make_s() {s=x*y;} protected: int s; };
Void main() 类有和y [A obja;B objb; cout<<“It's object a”; B类公有继承有$ obja.get_xy();obja.put xy(); 继承A类的和y,都 cout<<“It’s object b:\n” 将成为B类的保护 objb.get_xy();objb.make_s() 成员 cout<<“s=“<objb.get_s0; It’s object a:12 object a的数据成员 X=1y=2 obja.x obja.y It's object b:3 4 object bl的数据成员 S=12 objb.x objb.y objb.s obja.get_xy();obja.x,obja.y objb.get_xy();objb.x,objb.y
Void main() {A obja;B objb; cout<<“It’s object a”; obja.get_xy(); obja.put_xy(); cout<<“It’s object b:\n”; objb.get_xy(); objb.make_s() cout<<“s=“<<objb.get_s(); } It’s object a:1 2 X=1 y=2 It’s object b:3 4 S=12 object a的数据成员 obja.x obja.y object b的数据成员 objb.x objb.y objb.s A类有x和y B类公有继承有s 继承A类的x和y,都 将成为B类的保护 成员 obja.get_xy(); 读obja.x,obja.y objb.get_xy(); 读objb.x,objb.y