我是c ++编程新手,我有一个基本问题,我想创建N个对象,N实际上是用户输入。
我特别关注对象名称,比如 beam1 ,beam2,...,beamX。
2个快速的东西
如果是我们该怎么办?我正在为你的参考粘贴代码..
#include "iostream"
# include <conio.h>
using namespace std;
// Static member variable is defined outside the class..
class beam {
public:
int length;
};
int main ()
{
int i=0, no_of_spans, j;
cout<< "Design Of a Continous Beam \n1) No Of Spans : ";
cin >> no_of_spans;
for (i =0; i < no_of_spans; i++) {
j = i;
beam;
cout << "Length of Beam" << j+1 << " is : ";
cin >> beami.length;
}
cout << "\nPress any key to continue..\n";
getch ();
}
这显然是一个有错误的代码,它是作为一个例子来提出想法。
答案 0 :(得分:2)
正如其他人已经说过的那样(Luchian,John,Component和Ed),您可以使用std::vector
,它会根据需要动态增长,以存储所需的beam
个对象的数量。
如果您希望稍后通过名称引用这些对象,可以将它们存储在std::map
中,地图的键是对象名称(例如beam1,beam2,beam3,...,beamX) :
std::map<std::string, beam> beams;
for (int i = 0; i < no_of_spans; i++)
{
j = i;
beam beam;
std::string beam_name("beam" + boost::lexical_cast<std::string>(i + 1));
cout << "Length of " << beam_name << " is : ";
cin >> beam.length;
beams.insert(std::make_pair(beam_name, beam));
}
-
boost::lexical_cast<>
是一种将int
转换为std::string
的机制(在本例中)。还有其他方法可以实现这一点(例如,使用std::ostringstream
。)
答案 1 :(得分:1)
您可以使用std::vector
来存储对象。
您使用push_back
向vector
添加元素。
有些事情:
std::vector<beams> beamCollection;
for (i =0; i < no_of_spans; i++) {
j = i;
beam beami;
cout << "Length of Beam" << j+1 << " is : ";
cin >> beami.length;
beamCollection.push_back(beami);
}
答案 2 :(得分:1)
是的,当然有可能。有几种方法。
一种方式,就我可能/实际使用的方式而言,是使用std::vector
和push_back
,transform
或generate_n
您需要多少对象。
另一种方法是使用new
来分配所需对象的数组。然而,这不是首选使用vector
,因为使用new
承担管理内存的责任 - 需要有delete
对应每个new
}}。这可以通过使用诸如std::unique_ptr
之类的智能指针来缓解,但通常最好完全避免使用仙人掌。
答案 3 :(得分:0)
是的,有可能。最好的办法是使用适当的STL集合,并通过添加/删除对象在运行时动态增长它。
答案 4 :(得分:0)
简短回答否 - 编译器需要在编译时知道变量的名称。
您需要使用数组(或矢量)。