2)》 私有继承(private inheritance) 基类的公用成员和保护成员在派生类中成了私有成员。 其私有成员仍为基类私有。 class A class B:private A {public: {public: void get_xy() int get_s(){return s;} {cin>>x>>y;}; void make_s() void put xy() {get_xy(); {cout<<“x=“<<x<“ s=x*y;} cout<“y=“<y<<endl;} protected:int s; protected:int x,y: }; B类的私有成员函数,类 Void main() 外不可见,不能在主函数 B objb; cout<<“It’ s object b:\n” 中调用,交给make_s完 objb.make_s() 成,通过this指针实现 cout<<“s=“<objb.get_s0;
(2) 私有继承(private inheritance) 基类的公用成员和保护成员在派生类中成了私有成员。 其私有成员仍为基类私有。 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: private A {public: int get_s(){return s;} void make_s() {get_xy(); s=x*y;} protected: int s; }; B类的私有成员函数,类 外不可见,不能在主函数 中调用,交给make_s完 成,通过this指针实现 Void main() {B objb; cout<<“It’s object b:\n”; objb.make_s() cout<<“s=“<<objb.get_s(); }
(3)保护继承(protected inheritance). 基类的公用成员和保护成员在派生类中成了保护成员,其 私有成员仍为基类私有。 保护成员的意思是:不能被外界引用,但可以被派生类的 成员引用,具体的用法将在稍后介绍。 保护继承和私有继承在程序设计上很少使用, 原因是继承的目的是为了软件的重用
(3)保护继承(protected inheritance) 基类的公用成员和保护成员在派生类中成了保护成员,其 私有成员仍为基类私有。 保护成员的意思是: 不能被外界引用,但可以被派生类的 成员引用,具体的用法将在稍后介绍。 保护继承和私有继承在程序设计上很少使用, 原因是继承的目的是为了软件的重用
11.4.1公用继承 定义:将基类的继承方式指定为c的,称为公用继承 公用派生类Ipublic dorivedelass】,用公用继承方式建立的派生类 其基类称为公用基类(public base class) 公用成员 公用成员 保护成员 公用继承 保护成员 公用继承 派生类中并没有成为派 私有成员 生类的私有成员,它仍 然是基类的私有成员 只有基类的成员函数可以引用它,而不能被派生类的成 员函数引用,因此就成为派生类中的不可访问的成员
11.4.1 公用继承 定义:将基类的继承方式指定为public的,称为公用继承 公用派生类(public derivedclass),用公用继承方式建立的派生类 其基类称为公用基类(public base class) 公用成员 保护成员 私有成员 公用成员 保护成员 公用继承 派生类中并没有成为派 生类的私有成员,它仍 然是基类的私有成员 公用继承 只有基类的成员函数可以引用它,而不能被派生类的成 员函数引用,因此就成为派生类中的不可访问的成员
例11.1访问公有基类的成员 private 下面写出类的声明部分: //基类私有成员 Class Student,//声明基类 int num; {public:/基类公用成员 string name; void get_value() char sex; cin>>num>>name>>sex;} void display() {cout<<"num:<<num<<endl; cout<"name:”〈<name<endl; cout<<"sex:"<<sex<<endl; class Student1:public Student //以public方式声明派生类Student1
例11.1 访问公有基类的成员 下面写出类的声明部分: Class Student//声明基类 {public: //基类公用成员 void get_value( ) {cin>>num>>name>>sex;} void display( ) {cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl;} private : //基类私有成员 int num; string name; char sex; }; class Student1: public Student //以public方式声明派生类Student1
public: void c display_.1() {cout<<" num:"<<num<<endl; /企图引用基类的私有成员, 错误 cout←" name; "<<name<<endl; /企图引用基类的私有成员,错误 cout<<" sex:"<<sex<<endl; /企图引用基类的私有成员,错误 cout<<" age:”<Kage<<endl; //引用派生类的私有成员,正确 cout<<" address:"<<addr<<endl; /引用派生类的私有成员,正确 pri 由于基类的私有成员对派生类来说 是不可访问的,因此在派生类中的 display_1函数中直接引用基类的私 有数据成员num,name和sex是不允 许的。只能通过基类的公用成员函 数来引用基类的私有数据成员
{public: void display_1( ) {cout<<″ num: ″<<num<<endl; //企图引用基类的私有成员,错误 cout<<″ name: ″<<name<<endl; //企图引用基类的私有成员,错误 cout<<″ sex: ″<<sex<<endl; //企图引用基类的私有成员,错误 cout<<″ age: ″<<age<<endl; //引用派生类的私有成员,正确 cout<<″ address: ″<<addr<<endl;} //引用派生类的私有成员,正确 private: int age; string addr; }; 由于基类的私有成员对派生类来说 是不可访问的,因此在派生类中的 display_1函数中直接引用基类的私 有数据成员num,name和sex是不允 许的。只能通过基类的公用成员函 数来引用基类的私有数据成员