我想知道是否有办法包含数据成员,这是一个不固定大小的数组。
函数initModulation将创建一个大小为M的int数组和一个大小为M的Complex数组。(Complex是另一个类,由实部和虚部组成)。
函数modulate需要能够访问这两个数组。调用init Modulation函数后,这两个数组超出范围。为了避免这种情况,我只想将Modulator类的这两个数据成员,但是我不能这样做,因为数组大小取决于M。
class Modulator
{
int M;
double phase;
std::string mapping;
public:
void initModulation(int M, double phase, std::string mapping);
double* modulate(int *input,int inputlength,int complexFlag);
};
有关于此的任何想法吗?
谢谢, 胡志明
答案 0 :(得分:1)
您可以使用std::vector
类,它类似于数组但具有可变大小,并且不需要显式内存管理。如果您将一个声明为数据成员,那么您可以initModulation
使用尽可能多的元素填充它,但随后在modulate
中提供数据。
一个建议 - 将initModulation
更改为类构造函数可能是个好主意。这样,它会被自动调用,并且在没有首先初始化对象的情况下调用modulate
没有风险。
答案 1 :(得分:1)
I was wondering if there was a way to include a data member which is an array of unfixed size.
STL可能就是你要找的东西。(std::vector
...
答案 2 :(得分:1)
在没有特殊情况下不要写初始化函数;用构造函数构造。
数组是类数据的逻辑部分,因为它们用于调制,这就是类的实例。所以你应该让他们成为会员。
您打算创建编译时未知的数组,对吧?你是否将它们作为班级成员存放,这有什么关系?无论哪种方式,此时您都拥有关于M的信息,并相应地使用它。
但是你不应该分配自己的数组。使用std::vector
。毕竟,你足够聪明,可以将std::string
用于文本数据,所以......
为什么要使用int
作为某种“旗帜”的参数? C ++有一个真正的布尔类型,叫做bool
。使用它。
对于调制的输入和输出,再次使用向量。
拥有一个名为与类名对齐的成员函数的类是可疑的。许多语言支持“可调用”对象的概念,C ++就在其中。在C ++中,我们将此功能拼写为“operator()
”。
因此:
class Modulator
{
std::vector<int> int_data;
std::vector<Complex> complex_data;
double phase;
std::string mapping;
public:
Modulator(int M, double phase, std::string mapping):
int_data(M), complex_data(M), phase(phase), mapping(mapping) {}
std::vector<double> operator()(const std::vector<int>& input, bool is_complex);
};
欢迎使用现代C ++。 :)