第8章继承性和派生性8.1基类和派生类8.2单继承8.3多继承8.4虚基类8.1基类和派生类1、基类与派生类基类(父类):已存在的用来派生新类的类;派生类(子类):由已存在的类派生出的新类;2、单继承与多继承单继承:从一个基类派生的继承;多继承:从多个基类派生的继承;基类派生类ABACB单继承多继承8.1.1派生类的定义格式1、单继承class<派生类名>:<继承方式><基类名>{<派生类新定义成员>};2、多继承class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>...{<派生类新定义成员>};8.1.1派生类的定义格式(续)3、继承方式public:公有继承;private:私有继承;protected:保护继承;作用:控制基类中声明的成员在多大的范围内能被派生类的用户访问;私有成员公有成员保护成员私有成员公有成员保护成员基类部分新定义部分派生类派生类成员派生类的构成8.1.1派生类的定义格式(续)8.1.2派生类的三种继承方式基类派生类派生类基类实例派生类实例继承方式:publicprivateprotected(J)水平访问(H)垂直访问(V)直接继承(P)8.1.2派生类的三种继承方式(续)表:继承对基类成员的访问能力公有继承私有继承保护继承JPHVJPHVJPHV私有成员公有成员√√√√√√√√√保护成员√√√√√(私)(私)(保)8.1.2派生类的三种继承方式(续)私有成员不参与继承的访问控制;说明:基类实例(J):与继承方式无关,遵循访问控制权限的定义;直接继承(P):可以访问基类中的公有成员和保护成员,但成员的权限随继承方式而改变;水平访问(H)=P+J;垂直访问(V)=P+P;保护成员:在垂直访问(V)时相当于公有成员,在水平访问(H)时相当于私有成员;保护继承:在垂直访问(V)时相当于公有继承,在水平访问(H)时相当于私有继承;8.1.2派生类的三种继承方式(续)例8.1:分析下列程序中的访问权限。classLocation{public:voidInitL(intxx,intyy);voidMove(intxOff,intyOff);intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};voidLocation::InitL(intxx,intyy){X=xx;Y=yy;8.1.2派生类的三种继承方式(续)}voidLocation::Move(intxOff,intyOff){X+=xOff;Y+=yOff;}classRectangle:publicLocation{public:voidInitR(intx,inty,intw,inth);intGetH(){returnH;}intGetW(){returnW;}private:intH,W;};voidRectangle::InitR(intx,inty,intw,inth)公有继承8.1.2派生类的三种继承方式(续){InitL(x,y);W=w;H=h;}#includevoidmain(){Rectanglerect;rect.InitR(2,3,20,10);rect.Move(3,2);cout<voidmain(){Rectanglerect;rect.InitR(2,3,20,10);rect.Move(3,2);cout<