没有父结构重复的结构继承

在我的代码中,我有两个几乎完全相同的结构,在这里我对其进行了简化:

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;
};
XZ345786 回答:没有父结构重复的结构继承

这是在评论里卡多的答案时发布的摘录。

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

大家都在问