私有继承限制基类接口
当需要限制类的公共接口时,私有继承很有用:
class A {
public:
int move();
int turn();
};
class B : private A {
public:
using A::turn;
};
B b;
b.move(); // compile error
b.turn(); // OK
此方法通过强制转换为 A 指针或引用来有效地阻止对 A 公共方法的访问:
B b;
A& a = static_cast<A&>(b); // compile error
在公共继承的情况下,这种转换将提供对所有 A 公共方法的访问,尽管在派生 B 中防止这种方法的替代方法,如隐藏:
class B : public A {
private:
int move();
};
或私人使用:
class B : public A {
private:
using A::move;
};
那么对于这两种情况都有可能:
B b;
A& a = static_cast<A&>(b); // OK for public inheritance
a.move(); // OK