我觉得私有继承在设计模式中也有作用。
私有继承的子类一般不希望被其它的类所继承。有一种设计原则: 能够被继承的类都应该是虚类;能够实例化的类都不应该被继承。而私有类恰恰能够很好的实现该原则。
转一个帖子:
http://www.4ucode.com/Study/Topic/977313
正文
昨晚阅读Gof的设计模式时,提到Adapter(适配器)有两种,分别为类适配器和对象适配器。其中表明类适配器采用多重继承适配接口。类适配器的关键是用一个分支继承接口,而用另外一个分支继承接口的实现部分。C++中作出这一个区分的方法是:用公共方式继承接口;用私有方式继承接口实现。就借此机会复习一下C++中的私有继承吧!
通过在基类表中去掉public或者显示的声明private,可以私有的继承基类。当私有继承时,创建的新类有基类的所有数据和功能,但是这些功能是隐藏的所以它只是内部实现部分。该类的对象访问不到这些内部功能,并且一个对象不被看作这个基类的成员。当私有继承时,基类的所有public成员都变成了private。如果希望它们中的任何一个是可视的,只有用派生类的public选项申明它们的名字即可。
class base1
{
public:
char f() const { return 'a';} //内联函数,const成员函数
int g() const {return 2;}
float h() const {return 3.0;}
};
class derived : private base1
{
public:
base1::f; //将私有继承成员公有化
};
int main(void)
{
derived d;
d.f(); //可以调用,因为被该私有成员被公有化了
//d.h(); //不能调用,因为是私有函数,不能通过对象来调用
return 0;
}
private 继承
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
c++纯手工实现带括号计算器(转换成逆波兰式计算)
IAmAStudentForever
2020-06-22 03:48:48
c++_学习笔记0822
sysu_strange
2020-06-21 05:11:48
android的binder机制研究二
landerluu
2020-06-19 06:59:43
C语言病毒
The_King_Cloud
2020-06-17 17:36:57
函数的参数为对象本身和对象的引用【函数参数为引用】
shirley
2020-06-17 11:59:44
详解Android电源管理API
landerluu
2020-06-03 14:32:40
使用Microsoft Visual Studio和Rational Purify进行运行时调试(一)
wyingquan
2020-02-24 16:52:46
Visual C++ 6 调试之Debug选项(001)
wyingquan
2020-02-24 16:52:46
使用Microsoft visual Studio和Rational Purify进行运行时调试(二)
wyingquan
2020-02-24 16:52:35
“default”标签跳过“ ”的初始化操作问题解决
卡尼_Hu
2020-02-23 12:43:19
Linux下C++的多线程编程---(转载)
The_King_Cloud
2020-02-22 20:18:03
linux下添加链接与删除链接(ln命令的用法)
shirley
2020-02-22 02:34:18
C++ string 详解。各类函数等
shirley
2020-02-22 02:34:18