类问题中的C ++变量数组

时间:2011-01-07 08:13:22

标签: c++ class scope

我想知道是否有办法包含数据成员,这是一个不固定大小的数组。

函数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);
};

有关于此的任何想法吗?

谢谢, 胡志明

3 个答案:

答案 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)

  1. 在没有特殊情况下不要写初始化函数;用构造函数构造。

  2. 数组是类数据的逻辑部分,因为它们用于调制,这就是类的实例。所以你应该让他们成为会员。

  3. 您打算创建编译时未知的数组,对吧?你是否将它们作为班级成员存放,这有什么关系?无论哪种方式,此时您都拥有关于M的信息,并相应地使用它。

  4. 但是你不应该分配自己的数组。使用std::vector。毕竟,你足够聪明,可以将std::string用于文本数据,所以......

  5. 为什么要使用int作为某种“旗帜”的参数? C ++有一个真正的布尔类型,叫做bool。使用它。

  6. 对于调制的输入和输出,再次使用向量。

  7. 拥有一个名为与类名对齐的成员函数的类是可疑的。许多语言支持“可调用”对象的概念,C ++就在其中。在C ++中,我们将此功能拼写为“operator()”。

  8. 因此:

    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 ++。 :)