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

时间:2015-03-08 14:05:16

标签: c++ struct

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

struct MyStrusture{
    unsigned char code;
    unsigned char * data;
    int size;
};

是否可以定义一个从MyStructure继承并同时设置其成员的新结构?像这样:

struct MyStrusture1 : MyStrusture{
        code=1;
        data={1,2,3};
        size=3;
    };

我已经尝试了但它没有编译我必须在子结构中重新定义每个成员。我怎样才能在派生结构中找到父成员?

顺便说一句,我的意见是使用MyStrusture作为函数参数,所以当我调用函数我可以使用MyStructure1或2等时,我可以用这种形式method1(MyStructure)编写签名。这是一种标准方式或者我应该使用另一种技术?

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

我认为你的问题只是关于C ++,而不是C,因为你是从你的基础结构派生出来的。我还假设C ++ 11。

为了得到你想要的东西,你可以使用以下语法:

struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, nullptr, 3 }) {}
};

请注意,我已将data指针初始化为nullptr以解释基本概念。

按照您想要的方式使用某些内容对其进行初始化,现在这更加棘手。一种天真的方法是:

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

答案 1 :(得分:1)

在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;
} 

答案 2 :(得分:0)

是的,您可以使用构造函数

来完成
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 }
{
}