私有继承到底解决什么问题
私有继承只为复用实现、隐藏基类接口,不表达“是一个”。派生类内部可用 Base 的 public/protected 成员,外部不能把派生类当 Base。
class Base {
public:
void baseMethod();
};
class Derived : private Base {};| 属性 | 说明 |
|---|---|
| 接口 | 默认不暴露 |
| 目的 | 实现复用 |
| 适用 | 非多态替代 |
什么情况下适合使用私有继承
适合:复用实现、访问 protected、编译期策略复用、隐藏内部能力;否则优先组合。
class Logger {
protected:
void log(const std::string& message) {
std::cout << "Logging: " << message << std::endl;
}
};
class DatabaseConnection : private Logger {
public:
void connect() { log("Connecting to database"); }
};高级技巧:私有继承为什么常出现在模板代码里
常见于 CRTP、能力注入、封装窄接口。

template <typename Derived>
class BasePolicy {
protected:
void executePolicy() {
static_cast<Derived*>(this)->specificImplementation();
}
};
class ConcretePolicy : private BasePolicy<ConcretePolicy> {
public:
void runStrategy() { executePolicy(); }
private:
void specificImplementation() {
std::cout << "Custom policy implementation" << std::endl;
}
};最后怎么判断该不该用
- 需要多态和类型替代:公有继承
- 只是持有对象能力:组合
- 要复用实现、隐藏接口、访问
protected:私有继承














