我处于一种情况,我需要在运行时创建以字符串值命名的对象,但我不能这样做:
cin>>input;
className "input"= new className;
我该怎么做?
我认为可以使用
maps
来实现。这是真的吗?
答案 0 :(得分:4)
正如您所说,您可以使用std::map
(或std::unordered_map
)
map<string, className*> aMap;//map a string to a className pointer/address
cin>>input;
aMap[input] = new className; //input is mapped to a className pointer
然后,您可以将aMap[input]
视为className*
。 e.g。
要调用className方法,您可以:
aMap[input]->aClassNameMethod();
答案 1 :(得分:1)
面向对象的方法是使name成为该类的成员并使用输入来构造类。
#include <string>
#include <iostream>
class Foo
{
std::string myName;
public:
// Constructor assigning name to myName.
Foo(const std::string name) : myName(name) {}
std::string GetMyName() const
{
return myName;
}
};
int main()
{
std::string input;
std::cin >> input;
Foo f(input);
std::cout << f.GetMyName();
}
另请阅读C ++中的新内容:Why should C++ programmers minimize use of 'new'?