基类的私有派生指使用关键字private。例如:
#include <iostream>
using namespace std ;
class Father
{
public:
void room() { cout << "父亲的大房子我可以享受!\n" ;}
};
class Son : private Father // 从Father中私有派生的
{
};
int main()
{
Son a ; // 子类对象
a.room() ; // 用子类对象调用room函数
return 0 ;
}
上面的程序编译时,会出现一个错误:这个错误的大概意思是说不能访问在Father类中声明的公有成员room。这也体现了私有继承不能支持基类的公有接口的特点。那么,为什么不能访问在Father类中声明的公有成员room?这是因为以私有方式继承后,基类的公有成员变成了私有成员(所谓的私有成员是相对于派生类来说,即相当于继承的基类的公有成员是放在了派生类的私有区域),派生类对象要想访问这个私有成员,必须定义一个公有函数作为接口(类的私有数据成员只有类的成员函数或类的友元可以直接访问)。而基类的私有成员变成了不可访问的成员。当然,上面的程序基类没有私有成员,只有一个公共成员函数room。接下来,我们修改原先的程序:
#include <iostream>
using namespace std ;
class Father
{
public:
void room() { cout << "父亲的大房子我可以享受!\n" ;}
};
class Son : private Father // 从Father中私有派生的
{
void enjoy() { room();}
};
int main()
{
Son a ; // 子类对象
a.enjoy() ; // 用子类对象调用enjoy函数
return 0 ;
}
程序运行成功。输出了“父亲的大房子我可以享受!”。
最后,我们要记住以下几点:
(1)、以私有方式派生出的子类,父类的公有成员和受保护的成员在子类中是私有的,而基类的私有成员则是不可访问的
(2)、由于私有派生不利于继续派生,所以实际中用的不多
(3)、不管以公有还是私有的形式继承,基类的私有成员在派生类都是不可访问的。