首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有父结构复制的Struct继承

没有父结构复制的Struct继承
EN

Stack Overflow用户
提问于 2019-11-06 02:17:28
回答 2查看 60关注 0票数 0

在我的代码中,我有两个几乎相同的结构,我在这里简化了这些结构:

代码语言:javascript
复制
struct foo {
    struct bar {
        int b;
    } a;
};

struct foo2 {
    struct qux {
        int b;
        int c;
    } a;
};

(这里唯一的区别是qux有一个成员c,而bar没有)。

我的问题是,是否有一种方法可以让qux继承bar,而不必创建两个foo? --这可以很容易地用类完成,但是我想知道是否可以用结构来实现它。在我的想象中,它看起来会是这样的:

代码语言:javascript
复制
struct bar {
    int b;
};

struct qux : bar {
    int c;
};

struct foo {
    bar_or_qux a;
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-06 22:58:23

下面是里卡多回答的评论中的片段。

代码语言:javascript
复制
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与一个酒吧”类型。

代码语言:javascript
复制
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)。

代码语言:javascript
复制
#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);
}

我希望这能帮到你!

票数 1
EN

Stack Overflow用户

发布于 2019-11-06 02:23:38

您可以以与类相同的方式对结构使用继承。

C++中的结构具有与类相同的功能,唯一的区别是它们的成员(声明)和基(继承)在默认情况下是公共的,而对于类,它们默认是私有的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58722168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档