使子结构继承初始化?

时间:2016-01-25 21:57:04

标签: c++ struct

所以这是我在工作中必须处理的简化版本。目前,head结构没有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 ++的工作方式无关。

2 个答案:

答案 0 :(得分:0)

子类nak中的

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

如果您未在子类中重新声明nak,则会将其初始化为' y'因为在派生构造函数之前隐式调用了基础派生构造函数。

隐藏基类(或结构)的字段通常不是一个好主意。基类的布局最终会有3个字段。你不是要覆盖它,只是隐藏它。

答案 1 :(得分:0)

重要的是要理解,在您的代码示例中,msgnak类型的每个对象都包含两个成员变量&n; ':

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

将打印出&#34; zy&#34;,因为这两个&nbsp;&nbsp;成员。很可能struct msgnak中的附加成员nak不是你想要的吗?