假设我们定义了以下结构:
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等。这是标准方式还是应该使用另一种技术?
谢谢你的帮助。
发布于 2015-03-08 22:16:33
我假设你的问题只是关于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 }) {}
};发布于 2015-03-08 22:10:04
在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;
} 发布于 2015-03-08 22:18:47
是的,您可以使用构造函数来完成此操作
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 }
{
}https://stackoverflow.com/questions/28927326
复制相似问题