私有繼承限制基類介面
當需要限制類的公共介面時,私有繼承很有用:
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