文档介绍:第九讲继承与多态
说明:一个类可以继承另一个类的属性。其中被继承的类叫基类(base class),继承后产生的类叫做派生类(Derived class)//[ diraiv ]
派生类从基类中继承所有的公共部分,并可增加数据成员和成员函数。
说明:任何类都可以作为基类,一个基类可以有一个或多个派生类,一个派生类依次成为另一个类的基类。
定义格式:class 派生类名:[访问属性] 基类名{…},(多个基类用逗号隔开)
关键字新类名(private,public,protected) 基类名列表(可以不止一个)//[ ‘praivit ]
当基类名只有一个时叫简单继承,当基类名有多个时叫做多重继承。
访问属性: 基类名:
private 属性
基类 protected 属性 protected 属性派生类继承
public属性 public 属性派生类继承
 
private 属性
基类 protected 属性{protected}属性派生类
public 属性
 
基类名
 
privated 属性
基类名 protected 属性{private 属性}派生类
public 属性
说明:c++只允许继承基类的公有部分,为了保持类的类据隐藏特性,c++不允许派生类自动的继承其基类的私有部分。只有在特别授权的情况下才能访问基类的私有部分。这种授权有以下两种方式:
1.  通过友元来继承。可以把整个派生类或派生类中的某些方法声明为基类的友元,这样就可以访问基类中的私有部分。
2.  利用类定义中的保护部分(protected)。在基类中声明为protected的类成员。可以被派生类继承。
说明:冒号用来将基类与派生类隔开,建立基类与派生类之间的层次关系。
例:class road_vehicle // [ vi:ikl ]
{int wheels, passengers;
public: void set_wheel(int num);
int get_wheel(void);
void set_pass(int num);
int get_pass(void);
} }
class track: public road_vehicle
{int cargo;
public:
void set_cargo(int size),
int get_cargo(void);
void show(void);
};
又如例:
enum bugcolor (red, green, blue,yellow,black);
class bug
{protected: int legs;
bugclor color;
public:
bug(int numlegs, bugcolor c);
void draw();
};
class humbug: public bug//派生类
{private: int frequency;
public:
humbug(int numlegs, bugcolor c, int freg);
void hum();
};上例类hum bug 定义为基类bug 的派生类, 以下的函数是合法的:
void func()
{bug b(6,blue);
humbug h(10, qreen,1000);
();
();
();
}
Class bug
Protected: public:
int legs; bug(int,bugcolor)
; void Draw()
Protected: classHum bug
Int legs public:
Bugcolor color; bug(int,bugcolor);
Private: void Draw();
Int frequency; Humbug(int,bugcolor,int)
Void Hum()
表9。1基类和派生类的访问控制
类成员
类本身
类对象
派生类
派生类对象
Private
允许
不允许
不允许
不允许
Protected
允许
不允许
允许
不允许
Public
允许
允许
允许
允许
说明:
1.  类定义本身可以存取任何量。
2.  一个类对象只能存取为public 的成员和成员函数。
3.  派生类只能存取在基类中声明为protected,public的数据成员或成员函数。
4.  派生类的对象只能存取在基类声明