c++ - 私有(private)继承中的对象切片

标签 c++ object-slicing private-inheritance

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

最佳答案

将派生类分割成它的私有(private)基类没有任何意义。想一想“私有(private)”的含义。这意味着外界不应该关心它。允许切片(类型转换)到私有(private)基地意味着外界会关心。

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

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

这样,转换发生在 Derived 内部,其中 Base 是可访问的。您从 static_cast 得到的错误是因为它在 Derived 范围之外使用,其中 Base 不可访问。

关于c++ - 私有(private)继承中的对象切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19075517/

相关文章:

c++ - 具有多态性的 std::bind 和 std::function,基类

c++ - 指向不同派生类的指针数组

c++ - 对象切片有用吗?

c++ - private继承的直接基类阻止派生类定义间接基类的对象

c++ - 为什么 auto_ptr 似乎违反了 Visual C++ 上的私有(private)继承?

c++ - 对已实现所有虚函数的 vtable 的 undefined reference

c++ - 如何在带有 qmlscene(或 qmlviewer5)的 .qml 上使用 Qt Quick 2 扩展插件

c++ - 如何为自己的类(class)专门设计标准概念?

c++ - 如何优雅地切割物体

c++ - 什么是私有(private)继承,它解决了哪些问题?