这是在评论里卡多的答案时发布的摘录。
struct bar {
int b;
};
struct qux : bar {
int c;
};
struct foo {
bar a;
};
int main() {
qux q;
foo f;
f.a = q;
f.a.b = 7;
// f.a.c = 3;
}
这类事情可能适用于Python或JavaScript,但这是C ++。将qux
分配给bar
不会神奇地将bar
变成qux
。该f.a = q
被称为slicing。我不确定您到底想要什么,但我会做出一些猜测,也许我会偶然发现。
您可以使用模板。这意味着您可以使用“带有qux的foo”类型和“带有bar的foo”类型。
struct bar {
int b;
};
struct qux : bar {
int c;
};
template <typename T>
struct foo {
T a;
};
int main() {
qux q;
foo<qux> f;
f.a = q;
f.a.b = 7;
f.a.c = 3;
}
您可以使用多态。这意味着您可以拥有一个单一的foo
类型,该类型可以存储bar
的子类(例如qux
)。
#include <memory>
struct bar {
int b;
virtual void setC(int) = 0;
};
struct qux : bar {
int c;
void setC(const int value) override {
c = value;
}
};
struct foo {
std::unique_ptr<bar> a;
};
int main() {
qux q;
foo f;
f.a = std::make_unique<qux>(q);
f.a->b = 7;
f.a->setC(3);
}
我希望这会有所帮助!
,
您可以以与类相同的方式对结构使用继承。
C ++中的结构具有与类相同的功能,唯一的区别是它们的成员(声明)和基(继承)默认情况下是公共的,而对于类,它们默认情况下是私有的。
本文链接:https://www.f2er.com/3155350.html