私有派生

基类的私有派生指使用关键字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)、不管以公有还是私有的形式继承,基类的私有成员在派生类都是不可访问的。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值