![](/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.