如何在子类中重新定义数组大小?
How can I redefine array size in a subclass?
我有一个基类,在其中我定义了一个结构数组(基类型(和一些作用于其对象的方法;我从不直接实例化这个类,只是创建了它的变化子语言。现在,在每个子类中,我想根据子类的特定需求重新定义数组大小。
考虑到我想避免动态分配,以使程序更可靠,并且因为我喜欢在编译时看到我在设计中使用的内存量。
我尝试简单地重新定义子类中的数组;编译器(我使用 Arduino IDE(不会抱怨它,但是,从编译器报告的内存量来看,我看到实际上两个数组都存在(一个在基类中定义,一个在子类中"重新定义"(,所以这似乎不是这样做的方法。
我发现了一个关于使用模板的建议,但它没有得到太多的批准,因为我读到模板是关于让一个类管理不同的数据类型,我认为我只想要一个不同的数组大小的问题可以有一个更简单的解决方案。
获得我想要的东西的正确方法是什么?
这是我(错误(代码的示例:
typedef struct {
char val1;
int val2;
} DataItem;
class BaseClass {
DataItem dataItems[5];
};
class Sublass_A : public BaseClass {
DataItem dataItems[50];
};
class Sublass_B : public BaseClass {
DataItem dataItems[15];
};
使用模板,您可以执行以下操作:
template <std::size_t N>
class ItemsArray {
DataItem dataItems[N];
};
using classA = ItemsArray<50>;
using classA = ItemsArray<15>;
这是我问题的初始代码,根据@Jarod42的回答进行了更正。
typedef struct {
char val1;
int val2;
} DataItem;
template <size_t N = 5> // 5 is the default value if the size is not specified
class BaseClass {
DataItem dataItems[N];
};
class Sublass_A : public BaseClass<50> {
};
class Sublass_B : public BaseClass<15> {
};
它编译正确,并且在子类对象上使用 sizeof(( 进行测试报告数组的预期大小。
相关文章:
- C++编程从外部文本文件定义数组大小
- 如何在子类中重新定义数组大小?
- 有没有办法根据命令行参数定义数组大小?运行时与编译时实例化?
- 我可以使用常量定义数组的长度,那么为什么 int d[b] 不起作用呢?
- 表达式必须具有常数值,变量不能用作定义数组大小的常数
- 在类中定义数组的方法和字段
- (C++)我的自定义数组无法初始化(编译错误)
- 重写自定义数组类的运算符/开始/结束
- 如何在 C++ 中定义数组数组
- 您可以在类初始化器列表中定义数组大小吗?
- 通过Overloading Operator []访问自定义数组包装器中的元素
- 为自定义数组实现迭代器
- 递归定义数组中的数据对齐和排序
- 如何从类中返回自定义数组项目并操纵其属性?C
- 如何使用类 .h 文件中的静态常量来定义数组的长度
- 使用类定义数组创建C++类
- C++自定义数组容器动态大小
- C++中使用什么类型来定义数组大小
- 在源文件中定义数组,然后在其他源文件中使用它
- C 编程从外部输入文件定义数组大小