假设我们定义了以下结构:
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)
编写签名。这是一种标准方式或者我应该使用另一种技术?
感谢您的帮助。
答案 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 }
{
}