按变量命名对象

时间:2018-04-15 05:27:36

标签: c++ object

我处于一种情况,我需要在运行时创建以字符串值命名的对象,但我不能这样做:

cin>>input;
className "input"= new className;

我该怎么做?

  

我认为可以使用maps来实现。这是真的吗?

2 个答案:

答案 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'?