c++ 中private继承

本文详细介绍了私有继承的概念、规则以及在软件实现过程中的应用。通过对比私有继承与公有继承的不同,解释了私有继承如何在不改变基类接口的情况下,利用基类的实现细节。同时,文章浓缩了关键信息,强调了私有继承在设计与实现阶段的区别,并提供了易于理解的示例。

~~~~我的生活,我的点点滴滴!!

私有继承的

第一个规则:和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象转换成基类对象。
第二个规则: 从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员。

私有继承的含义:私有继承意味着 "用...来实现"。
如果使类D私有继承于类B,这样做是因为你想利用类B中已经存在的某些代码,而不是因为类型B的对象和类型D的对象之间有什么概念上的关系。
因而,私有继承纯粹是一种实现技术。

私有继承意味着只是继承实现,接口会被忽略。如果D私有继承于B,就是说D对象在实现中用到了B对象,仅此而已。

私有继承在软件 "设计" 过程中毫无意义,只是在软件 "实现" 时才有用。


浓缩一下:

Derived还能调用Base中的public和protected的东西(成员函数)
但Derived对象不能调用Base中的任何东西。
要这样理解。
就像Base中的成员函数能调用其private的东西,
但Base对象却不能。


C++private继承具有以下特点: - **继承关系性质**:与public继承所代表的is - a关系不同,private继承意味着implemented - in - terms - of,即根据基类实现出派生类,它仅继承基类的实现部分,接口部分被略去,在软件设计层面无意义,仅在软件实现层面有意义[^1]。 - **成员访问权限**: - **基类私有成员**:派生类无法访问基类的私有成员,这与其他继承方式一致[^3]。 - **基类公有和保护成员**:基类的公有成员和保护成员被派生类继承后,在派生类中都变成私有成员。派生类的新增成员可以访问基类的公有成员和保护成员,但派生类的对象不能访问派生类继承基类的公有成员、保护成员和私有成员,只能访问派生类自身的公有成员(包括继承后变为私有但在派生类内实现了访问接口的成员)[^3]。 - **默认情况**:在C++里,class默认的继承方式是private继承,若成员未写明权限,也默认是private;而struct默认的是public继承[^2]。 - **使用场景示例**:当需要调用基类的protected函数时可以使用private继承。例如,基类Phone有一个protected函数doDial,派生类IPhone通过private继承Phone,在IPhone的公有成员函数makePhoneCall中可以调用Phone的protected函数doDial [^4]。 ```cpp #include <iostream> #include <string> using namespace std; class Phone{ protected: void doDial(string number) { cout << "Dial " << number << endl; } }; class IPhone : private Phone{ public: void makePhoneCall(string number) { doDial(number); // 需要调用Phone的protected函数doDial } }; int main(){ IPhone iPhone; iPhone.makePhoneCall("12345"); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值