从基创建派生结构

  • 本文关键字:结构 派生 创建 c++
  • 更新时间 :
  • 英文 :


我有一个POD结构,它来自一个包含许多数据字段的库:

struct A {
    int foo1;
    float foo2;
    ...
};

现在我想扩展它以添加一些自定义数据,并考虑到这一点:

struct B : public A {
    int bar1;
    bool bar2;
};

A的实例创建B的实例的好方法是什么?这不起作用:

A a;
B b = a;

(编辑:删除了添加构造函数B(A const &)的建议,OP的更新建议不应修改给定的结构。)

您可以创建一个B,然后使用编译器生成的A::operator=(A&):

A a = { whatever };
B b = { whatever };
static_cast<A &>(b) = a;

如果不坚持继承,从A开始就可以了
内存布局没有变化。

对于继承,分两步进行:

  1. 创建派生:B b;
    • 而是使用0-init:B b = {0};
  2. 复制所有成员:(A&)b = a

编译器应该能够对此进行优化。

无论如何,如果可能的话,从派生的开始,而不是复制。

使结构B包含类型a的成员。

试试这个:

b = dynamic_cast<B*>(a);

最新更新