在C ++构造函数中有一个循环是个好主意吗?

时间:2014-03-05 16:41:34

标签: c++ constructor

我正在为我的作业编写代码。所以当我完成我的一个课程时,我遇到了一个问题。有一个循环来为数组分配值是个好主意吗? 这是我的班级。我想在构造函数中创建一个循环,或者创建一个稍后通过手动调用它来赋值的函数。

这些选择有所不同吗?如果是,哪个选择更好,为什么?

class Mule
{
    private:
        int numofMules;
        int MapSize;
        MuleNode* field;
        MuleNode* mules;
    public:
        void random_positions();
        void motion();
        void print_field();
        Mule(int nofMules, int mSize)
        {
            numofMules = nofMules;
            MapSize = mSize;
            mules = new MuleNode[numofMules];
            field = new MuleNode[MapSize*MapSize];
            for(i = 0; i < numofMules; i++)                              
            {
                mules[i].ID = i+1;
            }
            random_positions();
        }   
}

编辑代码是因为在编译时分配了一维数组的问题,并使用公式在1维中重新创建了2维数组。

+---------------+-----------+-----------+  
| i = j * w + i | x = i % w | y = i / w |  w - width of the 2 dimentional array
+---------------+-----------+-----------+  

结论:由于问题被标记为基于意见的,我想这意味着在构造函数中使用循环或创建一个函数没有太大区别稍后会分配值。

如果有关于此问题的任何事实或意见值得分享,请评论或写下您的答案。

2 个答案:

答案 0 :(得分:2)

在ctor中有一个循环没有什么可怕的。

同时,值得考虑的是,您正在初始化的项目是否/不应该是知道如何初始化自己的对象,而不是创建未初始化的实例,然后将值写入其中。

正如你所写的那样,代码似乎并没有多大意义。类名是Mule,但基于ctor,它更像是Mules的集合。骡子应该是这样的:一头骡子。 N骡子的集合应该像std::vector<Mule>。一个骡子真的是骡子的集合是一个糟糕的主意。

您还应该至少考虑使用std::vector而不是数组(假设您最终在课程中最终得到了一组项目。)

答案 1 :(得分:-4)

一般来说,不是一个好主意,但是一些构造函数需要一个循环(例如,在堆中初始化一个数组,在构造函数中初始化)。但并非所有构造函数都经常被调用(例如,单个元素,每个进程只调用一次)。

最后,它取决于类和程序/对象设计。

您的特定课程似乎每个流程只会创建一次。所以我的看法是没关系。如果情况并非如此,那么我们必须根据具体情况对其进行评估。