【发布时间】:2026-01-15 04:05:01
【问题描述】:
【问题讨论】:
【问题讨论】:
私有继承:
基类的所有 Public 成员变为派生类的 Private 成员 &
基类的所有Protected 成员都成为派生类的Private 成员。
代码示例:
Class Base
{
public:
int a;
protected:
int b;
private:
int c;
};
class Derived:private Base //Not mentioning private is OK because for classes it defaults to private
{
void doSomething()
{
a = 10; //Allowed
b = 20; //Allowed
c = 30; //Not Allowed, Compiler Error
}
};
class Derived2:public Derived
{
void doSomethingMore()
{
a = 10; //Not Allowed, Compiler Error, a is private member of Derived now
b = 20; //Not Allowed, Compiler Error, b is private member of Derived now
c = 30; //Not Allowed, Compiler Error
}
};
int main()
{
Derived obj;
obj.a = 10; //Not Allowed, Compiler Error
obj.b = 20; //Not Allowed, Compiler Error
obj.c = 30; //Not Allowed, Compiler Error
}
如果您想了解继承和访问说明符,您可以在 this 上查看我很久以前发布的答案。
【讨论】:
私有继承通常用作组合的一种形式。它与拥有继承类型的成员变量没有太大区别。
它的意思是“按照...实现”
在一些罕见的边缘情况下,它可能比使用成员变量更有效。
我知道的最常见的私有继承用法是boost::noncopyable
【讨论】: