首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以从结构定义一个子级并将其设置为成员?

是否可以从结构定义一个子级并将其设置为成员?
EN

Stack Overflow用户
提问于 2015-03-08 22:05:16
回答 3查看 2.6K关注 0票数 1

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

代码语言:javascript
复制
struct MyStrusture{
    unsigned char code;
    unsigned char * data;
    int size;
};

可以定义一个从MyStructure继承的新结构,同时设置它的成员吗?如下所示:

代码语言:javascript
复制
struct MyStrusture1 : MyStrusture{
        code=1;
        data={1,2,3};
        size=3;
    };

我试过了,但它没有编译,我必须重新定义子结构中的每个成员。如何访问派生结构中的父成员??

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

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2015-03-08 22:16:33

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

为了获得您想要的内容,您可以使用以下语法:

代码语言:javascript
复制
struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, nullptr, 3 }) {}
};

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

用你想要的方式用一些内容初始化它,现在这就比较棘手了。一种天真的方法是:

代码语言:javascript
复制
struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, new unsigned char[3] { 1, 2, 3 }, 3 }) {}
};

但这会产生各种各样的问题,例如谁应该删除data以及何时删除。我的猜测是,你根本不想要动态分配,而基结构中的指针实际上应该是一个数组:

代码语言:javascript
复制
struct MyStrusture{
    unsigned char code;
    unsigned char data[3];
    int size;
};

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

如果大小是可变的,可以使用std::vector

代码语言:javascript
复制
#include <vector>

struct MyStrusture{
    unsigned char code;
    std::vector<unsigned char> data;
    int size;
};

struct MyStrusture1 : MyStrusture
{
    MyStrusture1() : MyStrusture({ 1, { 1, 2, 3 }, 3 }) {}
};
票数 6
EN

Stack Overflow用户

发布于 2015-03-08 22:10:04

在c++中,你可以这样做

代码语言:javascript
复制
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;
} 
票数 1
EN

Stack Overflow用户

发布于 2015-03-08 22:18:47

是的,您可以使用构造函数来完成此操作

代码语言:javascript
复制
struct MyStrusture{
    unsigned char code;
    unsigned char * data;
    int size;
};

struct MyStrusture1 : MyStrusture{
    MyStrusture1(); // the constructor
};

然后在.cpp文件中定义MyStrusture1()构造函数,并在其中初始化数据成员:

代码语言:javascript
复制
MyStrusture1::MyStrusture1()
:   MyStrusture { 1, new unsigned char[3] { 1, 2, 3 }, 3 }
{
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28927326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档