是否可以从结构定义子项并设置其成员
Is it possible to define a child from a struct and set it members?
>假设我们定义了以下结构:
struct MyStrusture{
unsigned char code;
unsigned char * data;
int size;
};
是否可以定义一个继承自MyStructure并同时设置其成员的新结构?像这样:
struct MyStrusture1 : MyStrusture{
code=1;
data={1,2,3};
size=3;
};
我已经尝试过了,但它没有得到编译,我必须重新定义子结构中的每个成员。如何访问派生结构中的父成员?
顺便说一下,我的意见是使用 MyStrusture 作为函数参数,这样我就可以以这种形式编写签名method1(MyStructure)
当我调用函数时,我可以使用 MyStructure1 或 2 等。这是一种标准方法还是我应该使用另一种技术?
感谢您的任何帮助。
我假设你的问题只是关于C++,而不是 C,因为你是从你的基础结构派生出来的。我也假设C++11。
为了获得所需的内容,可以使用以下语法:
struct MyStrusture1 : MyStrusture
{
MyStrusture1() : MyStrusture({ 1, nullptr, 3 }) {}
};
请注意,我初始化了指向nullptr
的data
指针,以解释基本概念。
按照您想要的方式使用某些内容初始化它,现在这更棘手了。一个幼稚的方法是:
struct MyStrusture1 : MyStrusture
{
MyStrusture1() : MyStrusture({ 1, new unsigned char[3] { 1, 2, 3 }, 3 }) {}
};
但这会产生各种问题,例如谁应该删除data
以及何时删除。我的猜测是,你根本不想要动态分配,而基础结构中的指针实际上应该是一个数组:
struct MyStrusture{
unsigned char code;
unsigned char data[3];
int size;
};
struct MyStrusture1 : MyStrusture
{
MyStrusture1() : MyStrusture({ 1, { 1, 2, 3 }, 3 }) {}
};
如果大小应可变,则可以使用std::vector
:
#include <vector>
struct MyStrusture{
unsigned char code;
std::vector<unsigned char> data;
int size;
};
struct MyStrusture1 : MyStrusture
{
MyStrusture1() : MyStrusture({ 1, { 1, 2, 3 }, 3 }) {}
};
在 c++ 中,你可以这样做
class MyStruct
{
public:
MyStruct();
private:
unsigned char code;
unsigned char *data;
int size;
};
MyStruct::MyStruct() :
code(1)
, data(new unsigned char[3])
, size(3)
{
data[0] = 1;
data[1] = 2;
data[2] = 3;
}
是的,您可以使用构造函数来做到这一点:
struct MyStrusture{
unsigned char code;
unsigned char * data;
int size;
};
struct MyStrusture1 : MyStrusture{
MyStrusture1(); // the constructor
};
然后在.cpp文件中定义MyStrusture1()
构造函数,并在其中初始化数据成员:
MyStrusture1::MyStrusture1()
: MyStrusture { 1, new unsigned char[3] { 1, 2, 3 }, 3 }
{
}
相关文章:
- 嵌套在类中时无法设置成员数据
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 聚合初始化,将成员指针设置为同一结构成员
- 在类 (C++) 之外设置 const int 成员变量
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 自定义 QML QQuick彩绘项目成员锚点未在 qml 中设置为父级
- 如何在C++中将 cin 设置为类的成员函数?
- 将 AlphaMode 成员设置为 DXGI_SWAP_CHAIN_DESC1 会使 CreateSwapChainFo
- 在VS2017中,我们如何在项目成员之间共享编译设置
- 如何为类中可能无法计算的成员设置值
- 如何在没有setter的情况下设置类内部类的成员变量?
- 在运行时为随机分布类成员设置最小和最大边界?
- 是否可以在C++中使用初始化列表设置数组的特定成员?
- 设置成员 GlobalCEFApp->OnWebKit使用函数地址初始化 C++生成器
- 一个线程设置成员,而另一个循环上方 - 是此螺纹 - 不安全
- 有没有办法使用显式实例化按类型设置成员变量
- 为什么不能为类实例设置成员值?
- 构造函数不设置成员变量
- 我可以在构造函数调用之前设置成员变量吗?
- 如何仅设置成员(如果存在)