c++ - 在另一个对象类中的 vector 中调用对象类方法

标签 c++

我正在尝试将多个类(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 类时,characterListmain() 中声明,我可以使用 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

最佳答案

有两种选择:

  1. 添加返回对 characterList 的引用的方法:

    class Group
    {
        public:
            vector<Character>& getCharacterList () {
                return characterList;
            }
    
        private:
            vector<Character> characterList;
    }
    

    然后在main()中:

    ...
    Group group;
    ...
    group.getCharacterList ()[i].SetName("XX");
    

    但是请注意,这不是一个好的解决方案。这个解决方案可能被认为是不好的,因为它不提供任何类型的封装并且使 Group 类的实现完全开放。这样的设计 future 可能真的很难支持。

  2. 添加返回指向所需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/

相关文章:

c++ - 实现提取和插入运算符 C++

c++ - 没有命名类型

c++ - 对 `vtable for MainWindow' 的 undefined reference

c++ - CRTP std::is_default_constructible 未按预期工作

c++ - 如何为不断增长的 Eigen::MatrixXd 预分配内存

c++ - 如何控制 C 数学是否使用 SSE2?

c++ - 如何初始化无符号整数 uint8_t

c++ - 以最有效的形式将 32 位值存储为 C 字符串

c++ - 如何根据位置(偶数或奇数)将一个 full=number 分成两组

c++ - 图实现 C++