在我的代码中,我有两个几乎相同的结构,我在这里简化了这些结构:
struct foo {
struct bar {
int b;
} a;
};
struct foo2 {
struct qux {
int b;
int c;
} a;
};(这里唯一的区别是qux有一个成员c,而bar没有)。
我的问题是,是否有一种方法可以让qux继承bar,而不必创建两个foo? --这可以很容易地用类完成,但是我想知道是否可以用结构来实现它。在我的想象中,它看起来会是这样的:
struct bar {
int b;
};
struct qux : bar {
int c;
};
struct foo {
bar_or_qux a;
};发布于 2019-11-06 22:58:23
下面是里卡多回答的评论中的片段。
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。我不知道你到底想要什么,但我要做一些猜测,也许我会无意中发现它。
你可以使用模板。这意味着您可以有一个"foo与qux“类型和一个"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);
}我希望这能帮到你!
发布于 2019-11-06 02:23:38
您可以以与类相同的方式对结构使用继承。
C++中的结构具有与类相同的功能,唯一的区别是它们的成员(声明)和基(继承)在默认情况下是公共的,而对于类,它们默认是私有的。
https://stackoverflow.com/questions/58722168
复制相似问题