使用private继承后,编译器不会将一个private继承的派生类转换为基类
class Base
{
}
class Derived:private Base
{
}
Base* pBasePointer = new Derived(); // 错误,Derived已经不是一个Base,不能转换为基类
private意味着根据某物实现, 意义主要是在实现层面,而没有设计层面的意义。 继承实现,不继承接口
具有和composite类似的功能,但perfer composite than private inherit。
class compute
{
public:
int add(int num1, int num2);
int plus(int num1, int num2);
}
// bookStatics 要使用compute的add和plus
// 但bookStatics不是一个compute,用private继承实现如下
class bookStatics:private compute
{
public:
bookStatics()
{
};
int statics()
{
add( book1, book2);
};
privateL
int book1;
int book2;
}使用composite实现
class bookStatics
{
public:
bookStatics( compute aCompute)
: m_compute(aCompute)
{
};
int statics()
{
return compute->add( book1, book2);
};
privateL
int book1;
int book2;
compute* m_compute;
}
什么时候需要考虑使用private继承:
1. 需要改写虚函数(或用composite,导入一个私有类去改写虚函数),或想访问基类的protected函数;
2. 某些极端情况考虑内存。空类(没有虚函数,没有non-static成员变量),大小为零之独立(非附属)对象,的size不为0,通常为1(由编译器决定),composite的话会多使用内存,但private继承则不会
class Empty
{
};
class Hold
{
private:
int x;
Empty y;
}
这时候
sizeof( Hold ) > sizeof(int)
因为面对大小为零的之独立非附属对象,通常C++编译器都会安插一个char到空对象中去,齐位可能导致不止1。对内存要求很严的时候,private可以避免这种情况
本文深入探讨了C++中private继承的概念、作用及其应用场景,包括如何通过private继承实现特定功能,以及何时考虑使用private继承。文章详细解释了private继承与composite的区别,并提供了实例说明如何在实际开发中合理利用private继承特性,同时强调了其在内存管理方面的优势。
309

被折叠的 条评论
为什么被折叠?



