c++ - 结构原型中的继承
问题描述
是否可以在 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 是否有意义?可能不会,所以应该有一个构造函数来强制提供它们,将它们设置为初始值,或两者兼而有之。
推荐阅读
- android - 在 Firebase 上保存坐标后,活动会自动刷新吗?
- visual-studio - SQL Azure 数据库构建失败 - 必须在数据库范围凭据之前创建主密钥
- github-actions - 如何在 Windows Server 上的 GitHub 操作中设置环境变量?
- flutter - 如何在http get请求中传递参数?
- javascript - 灰度图像 URL
- reactjs - React Native Expo:下拉按钮/拆分按钮
- whmcs - 在 whmcs 中接受订单后如何获取客户信息并将数据发送到 veeam 以创建帐户自动化
- video - 时间码计算
- c# - “无法加载文件或程序集”错误。每次我需要从 VS 中删除并重新添加项目来修复它
- traefik - 使用 Treafik v2.2 设置 StatsD Metrics