c++ - 没有成员函数的结构的继承

标签 c++ inheritance

这个问题很可能是“C++ 标准怎么说”的问题,但我的 Google 搜索没有给我正在寻找的答案。

我知道当你有类,并且你有一个类继承自另一个类时,你就进入了虚函数表的世界,因为代码需要找出哪个类包含你试图调用的函数。

但是只包含数据的结构之间的继承呢?例如,如果您有一个小部件结构,然后您想要该结构的一个特殊版本,它有一些额外的变量,但您仍然希望能够将其原始数据传递给处理小部件的函数,这样会更简单从原始小部件结构继承,而不是让您的代码处理两种类型的小部件结构。只涉及数据的继承有没有开销?专用小部件仍然是一个简单的结构(就内存布局而言),结合了两种数据,还是原始小部件数据与新数据分开存储?

最终,我想让我的数据保持简单和连续,就像基本结构一样,我不知道继承数据是否会破坏它。

最佳答案

在 C++ 内存模型中,对象始终位于连续内存中。如果你想拥有非连续的内存,你需要使用指向这个对象之外的数据的成员。也就是说,如果您继承任何类,无论它是结构体还是具有虚函数,实际对象始终是连续的。关于可能感兴趣的类型,几乎没有其他含义:如果一个类是标准布局类型,您可以例如memcpy() 对象。我不确定 C++2011 对继承和标准布局类型的看法,但我很确定 C++2003 不允许继承而 C++2011 允许继承。

关于c++ - 没有成员函数的结构的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761867/

相关文章:

c++ - 我的聚合、关联和组合关系在这个 C++ 程序中不起作用?

c++ - 需要帮助在 Windows 上正确设置 CLANG

C++ 继承和隐藏不需要的继承函数

c++ - 我将如何制作这个非常复杂的继承树

带有数据存储库的 C++ Bazel 项目

c++ - 如何标记@ref 引用的结尾?

c++ - 为什么可以将一个数组赋值给一个char指针?

c++ - 虚函数重载

inheritance - 为代数结构声明记录类型的推荐约定

c++ - 根据继承更改对象类型