私有继承中的对象切片

时间:2013-09-29 07:22:21

标签: c++ object-slicing private-inheritance

为什么在私有继承中不会发生对象切片? Static_cast在这种情况下会出错吗? 我知道私有继承在其继承类之间不存在“is - a”关系。这是否与切片有关,因为派生的类型不是基类,因此编译器强制不进行隐式转换?

1 个答案:

答案 0 :(得分:3)

将派生类切片到其私有基类没有任何意义。暂时考虑一下“私人”意味着什么。这意味着外界不应该关心它。允许切片(施放)到私人基地意味着外界会关心。

如果你真的想要这种行为(我很想听听你的理由),你可以解决它:

class Base { };
struct Derived : private Base 
{
    Base asBase() { return static_cast<Base>(*this); }
};

这样,强制转换发生在Derived中,Base可以访问。您从static_cast获得的错误是因为它在Derived范围之外使用,其中Base无法访问。