c – 在联合中使用继承

前端之家收集整理的这篇文章主要介绍了c – 在联合中使用继承前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道是否有人知道是否有可能以某种方式在联盟中使用继承.

在下面的示例中,TestFails联合将不包含Base结构中的变量,而TestWorks确实有效.

struct Base { int a; };

union TestFails
{
    struct : public Base {};
    int b;
};

union TestWorks
{
    struct  { int a; };
    int b;
};

int main()
{
    TestWorks works;
    works.a = 0;

    TestFails fails;
    fails.a = 0;

    return 0;
}

您可以在此处测试代码http://ideone.com/dUzpOR

解决方法

答案是不. c中有很多黑暗的角落,但这不是他们中的一个:)

类和结构具有继承性.工会没有.

完成你正在尝试的唯一方法是将你的工会重构为结构(我说结构只是因为它们有一个默认的公共范围,所以你不需要将它们公开)

如果您尝试在联合中放置一个结构,则需要添加新结构的额外范围以访问其值.

正如AndyG的答案显示的那样:

union TestFails
{
    struct foo: public Base {};
    foo f;
    int b;
};

TestFails fails;
fails.f.a = 42;
std::cout << fails.f.a << std::endl;

如果省略一个名为的变量并创建一个偶尔使用命名空间的未命名范围,则无法从外部访问数据(这首先是这一点)

猜你在找的C&C++相关文章