在程序函数中创建对象数组

creating an array of objects within a function of a program

本文关键字:创建对象 数组 函数 程序      更新时间:2023-10-16

有人可以告诉我我需要做什么才能在函数中创建对象数组(除了在主函数中)。

我将尝试通过编造某种例子来解释......

假设我有一个名为TimeScheduler的程序.cpp它实现了类Schedule.h(我将实现放在一个单独的文件计划中.cpp我们在其中定义方法)。

在声明文件中,我们声明了两个构造函数

  Schedule(); //the default

  Schedule(int, int, int);//accepts three arguments

说到重点——假设在主程序文件 TimeScheduler 中.cpp除了从类 Schedule 继承的函数之外,我们在这个程序中创建了自己的函数。 所以我们的原型列在顶部。

 /*prototypes*/
  void makeSomeTime();

等。。。。。

我们有

 main(){ 

//etc etc...
 }

然后我们定义这些程序函数

    void makeSomeTime(){
      //process
    }

假设在函数makeSomeTime()中,我们想创建一个像这样的Schedule对象数组

    Schedule ob[]={ 
       summer(5,14, 49), 
       fall(9,25,50)
    };

我必须对函数makeSomeTime()做什么才能允许我创建这个对象数组。我问的原因是目前我在使用自己的程序时遇到困难,因为它将允许我在main()中创建这个对象数组。但不是在我刚刚举一个例子的函数中。奇怪的是,它将允许我在函数中创建对象的动态数组.....喜欢

   Schedule *ob = new Schedule[n+1];
   ob[2]= Schedule(x,y,z);

为什么它让我在 main() 中分配给一个非动态数组,而不是让我在函数中这样做?

这是

不正确的:

 Schedule ob[]={ 
       summer(5,14, 49), 
       fall(9,25,50)
    };

似乎正在尝试引入 3 个新名称:

  1. ob ,这是一个Scedule数组
  2. summer,这是一个Schedule
  3. fall,这是一个Schedule

你不能引入summerfall这样的新名称。 也许这只是一个错字,你的意思是:

Schedule ob[]={ 
   Schedule(5,14, 49), 
   Schedule(9,25,50)
};

。这完全没问题,并且可以存在于以下函数中:

void make_schedule()
{
    Schedule ob[]={ 
       Schedule(5,14, 49), 
       Schedule(9,25,50)
    };
}

但是现在你还有另一个问题——你的make_schedule函数返回void。 您在 make_schedule 中创建的 Schedule 数组被创建,然后被丢弃。 如果要从函数返回数组,最好的办法是使用 vector ,并返回:

std::vector<Schedule> make_schedule()
{
    Schedule ob[]={ 
       Schedule(5,14, 49), 
       Schedule(9,25,50)
    };
    const size_t num_obs = sizeof(ob)/sizeof(ob[0]);
    std::vector<Schedule> ret;
    std::copy( &ob[0], &ob[num_obs], std::back_inserter(ret));
    return ret;
}

一个更糟糕的替代方法是使用动态分配来分配数组,并返回指向第一个元素的指针。 在这种情况下,使用 new [] 时,请务必注意只能使用默认构造函数。

我决定不使用向量,而是使用unordered_map。我没有意识到,当你用 c++ "命名"一个对象时,你并没有真正给它起一个名字......它只是用作一种临时参考。如果要使用名称,最好使用名称作为集合中的键值。喜欢:

字符串食品名称;

食物名称="蛋糕";

[食品名称,10.95]

食物名称="面包";

[食品名称,5.75]

我找到了有关unordered_map http://msdn.microsoft.com/en-us/library/bb981993.aspx 的帮助