gpt4 book ai didi

c++ - 在程序的函数中创建对象数组

转载 作者:行者123 更新时间:2023-11-28 03:35:18 25 4
gpt4 key购买 nike

谁能告诉我我需要做什么才能在函数中(除了在主函数中)创建一个对象数组。

我会尝试通过编造一些例子来解释......

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

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

  Schedule(); //the default

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

进入正题——假设在主程序文件 TimeScheduler.cpp 中,除了从类 Schedule 继承的函数之外,我们在该程序中创建了我们自己的函数。所以我们的原型(prototype)列在顶部。

 /*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 [] 时,请务必注意您只能使用默认构造函数。

关于c++ - 在程序的函数中创建对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com