0

我试图找到一种方法来调用对象的成员,但使用用户输入来确定哪个对象。所以,我有 3 个对象:obj1、obj2、obj3。然后我要求用户输入他们想要操作的对象。然后使用这个输入,我调用相应对象的成员函数。

string input;
cin >> input; 
input.memberfunc();//where input is obj1, for example

我知道这显然不是办法,我首先必须转换字符串等,但如果能就实现我的要求的最佳方式提供任何建议,我将不胜感激。

4

3 回答 3

0

你可以创建一个对象数组

Object *objects[3] = {&obj1, &obj2, &obj3};
int index;
cin >> index;
if ((index > 0) && (index < 4))
{
   object[index]->memberfunc();
}

或者如果你想通过字符串选择,你可以使用地图来完成;

std::map<std::string, Object *> objectmap;
objectmap["obj1"] = &obj1;
objectmap["obj2"] = &obj2;
objectmap["obj3"] = &obj3;
std::string input;
cin >> input;
if (objectmap.find(input) != objectmap.end())
{
    objectmap[input]->memberfunc();
}
于 2013-04-22T21:35:50.617 回答
0

您可以按照 VX 的建议进行操作。objectmap["objn"] = &objn如果“objn”与容器中任何已存在元素的键不匹配,则调用会插入一个新元素。

你也可以使用map::insert

objectmap.insert( std::pair<std::string,Object*>( "objn", &objn ));

这是有关地图的更多详细信息的链接。

于 2013-04-23T01:35:24.857 回答
0

使用@VX answer动态添加书籍:

std::map<std::string, Book* > bookmap;
bookmap["obj1"] = &obj1;
bookmap["obj2"] = &obj2;
bookmap["obj3"] = &obj3;

//Dynamically loaded book:    
Book* newBook = new Book(/* any arguments you need */);
bookmap[ newBook->getIdentifier() ] = newBook;

std::string input;
cin >> input;
if (bookmap.find(input) != bookmap.end())
{
    bookmap[input]->bookmap();
} else {
    cerr << "Error: book '" << input << "' not found." << endl;
}
于 2013-04-23T01:58:33.550 回答