C + + 中的公共继承是两种类型的混合,你可以得到接口继承,也可以得到代码继承。私有继承是一种不同的野兽,你得到的是 只有代码继承,你的派生类的用户不能使用它来代替基类,并且从用户的角度来看,基类和派生类没有任何关系。
struct Base {};
struct PublicDerived : public Base {};
struct PrivateDerived: private Base {};
Base * base; PublicDerived * public_derived; PrivateDerived * private_derived;
base = public_derived; //good
base = private_derived; //compilation error.
因为您希望更改接口,所以 不应该使用公共继承,通过更改接口,您实际上表明这两个类具有不同的行为,不能互换使用。因此,您真正需要的是私有继承,然后使所有您想要的方法为 public 和 而不是反过来。