一:继承与派生类
(一)继承
1.继承是一个进程,通过继承,一个对象可以获得另一个对象的属性,也就是说,一个对象可以继承属性的集合,并可向其中加入属于自己的一些特征。
2.继承允许一个对象支持多层分类的概念。
(二)派生类
1.类继承可以从一个类即基类中继承该基类的成员,并增加新的成员;
例:
class A//定义基类A
{int i;
public:
void f1(int a);
int f2();
};
class B:public A//根据基类A定义派生类B
{int j;
public:
void g1(int a);
int g2();
};
注:基类A的所有公有成员也是派生类的公有成员,但基类A的所有私有成员仍属于A类,不被派生类继承;
2.一个类可以有直接基类和间接基类;
二:单继承
从一个基类派生的继承称为单继承,即派生类只有一个直接基类;
单继承声明语句的常用形式为:
class 派生类名:访问控制关键字 基类名
{数据成员和成员函数声明
};
三:访问控制关键字
若访问控制关键字为public,则称派生类从基类公有继承,也称公有派生;若访问控制关键字为private,则称派生类从基类私有继承,也称私有派生;
1.公有继承
公有继承不改变访问级别,派生类的对象可以直接使用基类所有的公有方法,除非这些方法在派生类中又重新定义;注意派生类的成员不能直接访问基类中的私有属性,基类的保护成员在派生类中仍是保护成员;
2.私有继承
a.在私有继承情况下,基类的所有成员都变成派生类的私有成员,注意积累的私有成员被继承后,派生类仍不能访问它,这说明不能通过派生类的对象访问基类的任何成员;
b.私有继承表明派生类对象不能直接访问基类的公有成员,派生类的函数可以访问基类的公有成员;
3.保护成员
有时希望派生类能够访问基类的成员,但又不想把基类的这些成员声明为公有,最好的方法是在基类的定义中使用保护访问控制关键字protected;
(1)在定义类时,使用关键字protected声明类的成员函数为保护成员:
class A
{protected:
int a;
};
注:a是保护的成员,保护成员具有私有成员和公有成员的双重角色。
(2)在基类保护部分定义的任何成员在派生类中都可以看做是公有成员,而在程序的其他部分是私有的,即基类的保护成员在派生类中是公有成员,在派生类之外是私有成员;
四:多继承与继承链
1.多继承
(1)从多个