所以这是我在工作中必须处理的简化版本。目前,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 ++的工作方式无关。
答案 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不是你想要的吗?