继承的一般形式:
class <派生类名>:<派生方式><基类名>
{
派生类成员声明;
}
其中派生方式为private私有继承、public公有继承、protected保护继承
访问控制,看如下表:
从上表中可以看出:
1、基类中的私有成员在派生类中是隐藏的,只能在基类内部访问;
2、派生类中的成员不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员;
3、派生类从基类公有继承时,基类的公有成员和保护成员在派生类中仍为公有成员和保护成员;
4、派生类从基类私有继承时,基类的公有成员和保护成员在派生类中都改变为私有成员;
5、派生类从基类保护继承时,基类的公有成员在派生类中改变为保护成员,基类的保护成员在派生类中则仍为保护成员。
一、公有继承。
1、虽然派生类以公有的方式继承了基类,但并不是说派生类就可以访问基类的私有成员,基类无论怎样被继承,其私有成员对基类而言仍然保持私有性;
2、在派生类中声明的名字如果与基类中声明的名字相同,则派生类中的名字起支配作用。也就是说,若在派生类的成员函数中直接使用该名字的话,该名字是指在派生类中声明的名字。如果要使用基类中的名字,则在改名字前加“基类名::”。
二、私有继承
基类的公有成员和保护乘员在派生类中成为私有成员,它们能被派生类的成员函数直接访问,但不能被类外函数访问,也不能在类外通过派生类的对象访问。基类的私有成员派生类仍不能被访问。
三、保护继承
1、无论是公有派生还是私有派生,派生类都不能访问它的基类的私有成员,要想访问,只能通过调用基类成员函数的方式,但是对于频繁访问基类私有成员的派生类而言,这种方式不便。
2、若为公有派生,则基类中的保护成员在派生类中也为保护成员,可被派生类直接访问,但不能被外部函数直接访问,外部函数只能通过派生类的对象间接访问它们
3、若为私有派生,则基类中的保护成员在派生类中成为私有成员,派生类可以直接访问它们,但外部函数或在类外通过派生类的对象都不能访问它们。
派生类直接访问基类私有成员,必须使用基类的接口,实现的方法如下两种:
* 在基类的声明中增加保护成员,将基类中提供给派生类访问的私有成员定义为保护成员
* 将需要访问基类私有成员的派生类成员函数声明为友元。