![](/img/trans.png)
[英]C++ - Accessing member functions from a map of object pointers, in a seperate class via getter functions
[英]Accessing Member Functions of Objects in a Map in C++
根据我的理解,如果在以下任何一项上我错了,请改正我的观点:容器用于存储对象。地图是关联容器,它将对象存储为“元素”。
如果是这样,我如何像创建没有地图设置参数的对象那样访问那些对象的成员函数(例如,setter和getter)?
或换一种说法,我该怎么做:
someClass someObject;
someObject.setSomething(InputVari);
地图?
您需要使用[]运算符 。
myMap[myIndex].setVariable(aValue);
例如,如果您要创建一个Person类的映射,该映射具有一个按键字符,其中的人们具有名字,姓氏和当前位置,以及一个setCurrentLocation(std :: string aNewLocation)参数,它将看起来像如下所示。
std::map<char, Person> myMap;
Person myPerlmaoooosonOne("Phill", "Collins", "England");
myMap['A'] = myPersonOne;
myMap['A'].setNewLocation("New York")
如果我在以下任何一项上有误,请指正我,容器用于存储对象
不必要。 在某些情况下,最好存储指向对象的指针,例如当对象很大时,因此获取对象的副本很昂贵。 另一种情况是对象是多态的,并且您想要将不同派生类的对象存储在容器中。 存储指针可防止对象切片 。
要访问对象的成员:
class Foo{ int A; void bar(){} };
map<string, Foo*> myMap;
auto it = myMap.find("keyToObject");
if(it != myMap.end()) {
it->A += 1; it->bar();
}
考虑到以下事实, []
与std::map
一起使用[]
时需要小心一点, []
只是insert()
一种方便表示法。 myMap[k]
的结果等于(∗(myMap.insert(make_pair(k,V{})).first)).second
,其中V
是映射类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.