结构原型中的继承
inheritance in structs prototypes
是否可以用 C++ 表示:
struct foo {
int x;
int y;
struct A derived;
};
struct A {
int val;
};
struct B : A {
int baz[10];
};
struct C : A {
int baz[20];
};
其中 derived
可以是 A(B 或 C)的任何继承结构,但不能是 A,而不更改原型 struct foo
?
例如,是否可以执行以下操作?
void func(void)
{
struct B b;
struct foo foo;
foo.derived = b;
}
struct A {
int val;
virtual ~A() = 0; // so nobody can instantiate A alone.
};
inline
A::~A() = default; // the destructor HAS to be defined.
struct foo {
int x;
int y;
std::unique_ptr<A> derived;
};
然后其余部分相同...并使用:
foo foo_v; foo_v.derived = std::make_unique<B>();
请注意,我已经删除了 C 语言元素并使其成为纯 C++。我也会清理这些并使它们更具凝聚力。在上面的代码中 x 和 y 未初始化是否有意义?可能不是,所以应该有一个构造函数强制提供它们,将它们设置为初始值,或两者兼而有之。
是否可以用 C++ 表示:
struct foo {
int x;
int y;
struct A derived;
};
struct A {
int val;
};
struct B : A {
int baz[10];
};
struct C : A {
int baz[20];
};
其中 derived
可以是 A(B 或 C)的任何继承结构,但不能是 A,而不更改原型 struct foo
?
例如,是否可以执行以下操作?
void func(void)
{
struct B b;
struct foo foo;
foo.derived = b;
}
struct A {
int val;
virtual ~A() = 0; // so nobody can instantiate A alone.
};
inline
A::~A() = default; // the destructor HAS to be defined.
struct foo {
int x;
int y;
std::unique_ptr<A> derived;
};
然后其余部分相同...并使用:
foo foo_v; foo_v.derived = std::make_unique<B>();
请注意,我已经删除了 C 语言元素并使其成为纯 C++。我也会清理这些并使它们更具凝聚力。在上面的代码中 x 和 y 未初始化是否有意义?可能不是,所以应该有一个构造函数强制提供它们,将它们设置为初始值,或两者兼而有之。