如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
1.类的继承与派生继承与派生举例继承与派生的目的派生类对象结构继承方式公有继承(公有派生)私有继承(私有派生)保护继承(保护派生)不同继承方式的影响主要体现在:派生类成员函数对基类成员的访问权限派生类对象对基类成员的访问权限公有继承举例//fileMain.h#include"Rectangle.h"#include"Cuboid.h"#include<iostream>usingnamespacestd;voidmain(){Cuboidcub;cub.InitC(2,3,20,10,30);cub.Move(3,2);//派生类对象访问基类公有成员cout<<cub.GetX()<<","<<cub.GetY()<<","<<cub.GetL()<<","<<cub.GetW()<<","<<cub.GetH()<<"\n";}私有继承(private)私有继承举例//fileMain.h#include"Rectangle.h"#include"Cuboid.h"#include<iostream>usingnamespacestd;voidmain(){Cuboidcub;cub.InitC(2,3,20,10,30);cub.Move(3,2);cout<<cub.GetX()<<","<<cub.GetY()<<","<<cub.GetL()<<","<<cub.GetW()<<","<<cub.GetH()<<"\n";}保护继承(protected)类Cuboid三种继承方式下,基类成员被继承后,在派生类中的特性表现protected成员的特点与作用protected成员举例3.成员隐藏在派生类中可以重新定义与基类中同名的成员,此时基类中同名的成员便隐藏起来,使得编译器在派生类的作用域看不见基类中同名的成员。所谓基类中同名的成员被隐藏,并非这些继承来的成员消失了,它们仍被继承下来,且也是派生类成员的一部分,只是为了避免混淆,编译器便将它们隐藏起来。但如果指定了明确的作用域,仍可以访问这些隐藏的成员。对于成员函数的隐藏,是指在派生类中重新定义基类中已存在的函数(该函数必须与基类中的函数同名),而函数的参数表和返回类型可同可不同。成员函数的隐藏,并非成员函数重载。成员函数重载是指在同一个类内,多个函数,名称相同而参数表不同。举例4.派生类的构造与析构派生类构造函数的一般格式如下:派生类名::派生类名(派生类构造函数总参数表):基类名(参数表1),类成员名(参数表2){本类一般成员初始化赋值语句;};派生类构造函数的调用顺序如下:·基类的构造函数·类成员的构造函数(如果有的话)·派生类本身的构造函数注意:派生类构造函数的定义中可以省略对基类构造函数的调用,其条件是在基类中必须有默认的构造函数或者根本没有定义构造函数(此时编译器会调用系统缺省生成的构造函数)。析构函数当对象被删除时,派生类的析构函数被执行。由于析构函数也不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是:先执行派生类本身的析构函数,再执行类成员的析构函数(如果有的话),最后执行基类的析构函数,其顺序与执行构造函数时的顺序正好相反。构造析构举例classB:publicA{Ccom;//类成员intb;public:B(int,int,int);~B(){cout<<"B析构:b="<<b<<endl;}voidprint(){A::print();com.print();cout<<"Bb="<<b<<endl;}};classD:publicB{Ccomd;//类成员intd;public:D(int,int,int,int,int);~D(){cout<<"D析构:d="<<d<<endl;}voidprint(){B::print();comd.print();cout<<"Dd="<<d<<endl;}};5.继承与组合使用的规则组合:若在逻辑上A是B的“一部分”(apartof),则不允许B从A派生,而是要用A和其它东西组合出B。例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成。继承:若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。一个公有派生类的对象