《第章继承和派生ppt课件》由会员分享,可在线阅读,更多相关《第章继承和派生ppt课件(18页珍藏版)》请在金锄头文库上搜索。
1、第第11章章 继承和派生继承和派生11.1 继承继承 一个类继承另一个类的过程成为派生一个类,派生出来的类称为派生类或子类。而被继承的类称为基类或父类,类的派生过程可以无限进行下去。11.1.1 单一继承单一继承 基类只有一个。 格式:class private public private : ; public : ; protected : ; 说明: 1 继承可以部分继承,也可以在派生类中增加新的成员。 2派生分两类:私有和公有。11.1.2公有派生公有派生 公有派生时,访问基类成员的权限在派生类中保持不变。即从类外可以访问从基类中派生下来的公有成员。例11-1:定义一个B类,从B类公有
2、派生D类,并在D类中在增加一个私有数据成员Z和三个公有函数。程序:class B int x,y; public : void Setx(int a) x=a; void Sety(int b) y=b; int Getx()return x; int Gety()return y; ;class D: public B int z; public: void Setz(int c) z=c; int Getz() return z; int Sum() return(Getx()+Gety()+Getz(); ; #include iostream.h void main() D d; d.
3、Setx(1); /由于是公有派生,类外可访问直接访问 d.Sety(2); /继承后可以用d调用b类中的成员 d.Setz(3); coutx=d.Getx()endl; couty=d.Gety()endl; coutz=d.Getz()endl; coutsum=d.Sum()endl; 说明:1. 派生类D的定义与主函数放在一个程序。2. 赋值与使用成员均在类内部进行。3. 对类中的成员的访问均通过函数成员进行。4. 派生出来的公有成员仍通过派生类的对象名访问。5. 在派生类中不能访问基类的私有成员。11.1.3 私有派生私有派生 基类成员在派生类中进行封装说明,在派生类外部(如函数)
4、均不可见,而使用的是封装后的函数名(成员名)。例11-2:从B类私有派生D类,然后进行输入和输出。class B int x,y; public : void Setx(int a) x=a; void Sety(int b)y=b; int Getx()return x; int Gety()return y; ; #include iostream.h class D: private B /私有派生 int z; public : void Setz(int c) z=c; void Setbase(int a, int b) Setx(a); Sety(b); int Getbx()
5、return Getx(); /私有派生时,基类中的公有成员不能直接被访问(Getx()() int Getby() return Gety(); int Getz() return z; int Sum() return(z+Getx()+Gety(); ;void main() D d; d.Setbase(1,2); /私有派生时,基类中的公有成员不能直接访问 d.Setz(3); coutx=d.Getbx()endl; couty=d.Getby()endl; coutz=d.Getz()endl; coutsum=d.Sum()endl; ;11.1.4 保护成员保护成员 对于派生
6、类,它是公有的;对于外部程序,它是私对于派生类,它是公有的;对于外部程序,它是私有的有的,即在派生过程中,保护成员不用封装。例11-3class B protected : int x,y; public : void Setx(int a) x=a; void Sety(int b)y=b; int Getx()return x; int Gety()return y; ; #include iostream.h class D: private B int z; public : void Setz(int c) z=c; void Setbase(int a, int b) x=a; /
7、对于派生类对于派生类,仍是公有仍是公有 y=b; int Getbx() return Getx(); int Getby() return Gety(); int Getz() return z; int Sum() return(z+x+y); ;void main() D d; d.Setbase(1,2); /对于外部程序,它是私有的, 成员不能直接访问 d.Setz(3); coutx=d.Getbx()endl; couty=d.Getby()endl; coutz=d.Getz()endl; coutsum=d.Sum()endl; 11.1.2 多重继承多重继承利用多个基类派生
8、的类。格式: class private , private , public , public private : ; public : ; protected : ; 例: 11-4 class A protected : /保护成员 int w; public : void Setw(int a) w=a; int Getw()return w; ; class B protected : int x,y; public : void Setx(int a) x=a; void Sety(int b)y=b; int Getx()return x; int Gety()return y;
9、 ; class D: public A,B int z; public : void Setz(int c) z=c; void Setbase(int a, int b,int c) x=a; /x,y,w仍是公有 y=b; w=c; int Getbx() return x; int Getby() return y; int Getbw() return w; int Getz() return z; int Sum() return(z+x+y+w); ;#include iostream.hvoid main() D d; d.Setbase(1,2,3); d.Setz(4); coutx=d.Getbx()endl; couty=d.Getby()endl; coutz=d.Getbw()endl; coutz=d.Getz()endl; coutsum=d.Sum()endl; 输出结果是:程序说明:1. 从类 A, B中派生出了类D2. 仅继承私有成员(数据成员)3. 其中 setw() 不该封装,直接使用即可.