我正在尝试将多个类(class)归为一个类(class)。 现在我面临着调用一个类方法的问题,该类方法位于另一个类的 vector 中。
这是我的结构:
class Group
{
public:
void PushCharacterToVector(Character character);
private:
vector<character> characterList;
}
class Character
{
public:
Character();
void SetName(string name);
private:
string _name;
}
当没有 Group
类时,characterList
在 main()
中声明,我可以使用 characterList[i].SetName("XX")
.
因为我需要在 Group
类中声明这个 characterList
。我想做这样的 Action
Group _group;
_group.PushCharacterToVector(Character());
//Set name to a character inside Group vector
_group.characterList[0].SetName("Kelvin"); //My concept to do
最佳答案
有两种选择:
添加返回对
characterList
的引用的方法:class Group { public: vector<Character>& getCharacterList () { return characterList; } private: vector<Character> characterList; }
然后在
main()
中:... Group group; ... group.getCharacterList ()[i].SetName("XX");
但是请注意,这不是一个好的解决方案。这个解决方案可能被认为是不好的,因为它不提供任何类型的封装并且使
Group
类的实现完全开放。这样的设计 future 可能真的很难支持。添加返回指向所需
Character
对象的引用或指针的方法:class Group { public: int AddCharacter (const Character& i_character) { int character_id = characterList.size (); characterList.push_back (i_character); return character_id; } Character& Character (int i_character_id) { return characterList [i_character_id]; } private: vector<Character> characterList; }
这个设计稍微好一点,因为它没有揭示
Group
类的实际实现。但是,使用字符名称作为标识符可能是更好的解决方案。可以从
Group::AddCharacter()
方法中检索角色 ID:... Group group (...); Character character (...); auto character_id = group.AddCharacter (character); group.Character (character_id).SetName ("new name"); ...
请注意,您没有将方法命名为
PushCharacterToVector()
,而是命名为AddCharacter
。这隐藏了将来可能会改变的实际实现,并且在阅读代码时更容易理解。
关于c++ - 在另一个对象类中的 vector 中调用对象类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47738751/