是否可以从结构定义子项并设置其成员

Is it possible to define a child from a struct and set it members?

本文关键字:设置 成员 定义 结构 是否      更新时间:2023-10-16

>假设我们定义了以下结构:

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 }) {}
};

请注意,我初始化了指向nullptrdata指针,以解释基本概念。

按照您想要的方式使用某些内容初始化它,现在这更棘手了。一个幼稚的方法是:

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 }
{
}