god*_*lka 17 c c++ inheritance struct init
在同一程序中混合使用C和C++代码时,给出了以下示例(此处略微缩写为相关部分).假设buf.h包含以下内容:
struct buf {
char* data;
unsigned count;
};
// some declarations of existing C functions for handling buf...
Run Code Online (Sandbox Code Playgroud)
然后建议使用
extern "C" {
#include "buf.h"
}
class mybuf : public buf {
public:
mybuf() : data(0), count(0) { }
// add new methods here (e.g. wrappers for existing C functions)...
};
Run Code Online (Sandbox Code Playgroud)
为了在C++中使用带有附加功能的结构.
但是,这显然会产生以下错误:
error: class `mybuf' does not have any field named `data'
error: class `mybuf' does not have any field named `count'
Run Code Online (Sandbox Code Playgroud)
解释的原因在如何在派生类构造函数中初始化基类成员变量中进行了解释?,C++:继承字段的初始化,以及使用初始化列表(C++)初始化父的受保护成员.
因此,我有以下两个问题:
更新:使用建议的聚合初始化,即
mybuf() : buf{0, 0} {}
Run Code Online (Sandbox Code Playgroud)
有效,但需要C++ 11.因此,我添加以下问题:
使用C++ 03,是否有比使用以下构造函数更好的方法来实现所需的结果?
mybuf() {
data = 0;
count = 0;
}
Run Code Online (Sandbox Code Playgroud)如果您可以使用兼容c ++ 11的编译器,那么这将是使用聚合初始化的初始化列表的完美用例.
mybuf() : buf{0, 0}
{}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |