使子结构继承初始化
Make a sub-struct inherit the initialization?
所以这是我在工作中必须处理的简化版本。目前,头部结构没有 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 很可能不是您想要的?
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 为什么除了继承聚合结构之外,结构为空,无法聚合初始化?
- 初始化依赖于子类的继承类的常量类成员
- C++ 初始化继承的模板基类
- 使用继承初始化C++中的参数
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- 继承的构造函数忽略类内初始化
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 跨继承树初始化元组
- 与lambda一起使用虚拟继承在初始化列表中捕获此问题的GCC错误
- GCC:当层次结构中存在虚拟继承时,C++11 内联对象初始化(使用 "this")不起作用
- 如何在派生类中初始化继承的模板POD结构
- 我如何避免明确构建C 初始化列表中继承的所有内容
- 使用从另一个类继承的类的对象初始化成员对象
- 正确的语法,用于在C 中继承,并具有初始化列表和内存分配
- 构造函数继承和直接成员初始化
- 继承构造函数不允许类似数组的初始化
- valgrind 在使用 std::make_shared 和虚拟继承时报告的未初始化值
- 初始化继承的成员数据
- 如何初始化继承类的静态变量