使子结构继承初始化

Make a sub-struct inherit the initialization?

本文关键字:初始化 继承 结构      更新时间:2023-10-16

所以这是我在工作中必须处理的简化版本。目前,头部结构没有 ack 或 nak 变量。我需要它有一个初始化为某些东西的东西,以便我可以检查它以后是否更改。还有其他从头部继承的结构,它们有一个 ack/nak 变量(太多了,我无法返回并删除它们。

关键是,我需要 msgnak 初始化它的

char nak

到"y"。我知道它不能像现在这样工作,有什么办法让它工作吗?

struct head
{
    char ack;
    char nak;
    head() : ack('x'), nak('y') {}
};
struct msgnak : head
{
    char nak;
};

编辑:感谢您提供的信息。看来我想做的事情以C++的工作方式是不可能的。

msgnak中的nak字段隐藏了基类头的nak字段。

如果不在子类中重新声明nak,它将初始化为"y",因为在派生构造函数之前隐式调用基派生构造函数。

隐藏基类(或结构)的字段通常不是一个好主意。基类的布局最终将包含 3 个字段。你不是在超越它,只是在隐藏。

这里重要的是要了解,在您的代码示例中,msgnak 类型的每个对象都包含两个成员变量 'nak':

msgnak obj;       // implicitly initializes the nak of head to y
obj.nak = 'z';    // assigning the nak of msgnak (not initialized yet)
cout << obj.nak;  // printing the nak of msgnak
cout << ((head *)(&obj))->nak;  // the nak of head

将打印出"zy",因为两个"裸"成员。 结构 msgnak 中的附加成员 nak 很可能不是您想要的?