Как я могу связать векторные элементы с указателем - PullRequest
0 голосов
/ 01 марта 2020

Мне нужна помощь в рабочем процессе проектирования классов со следующей функциональностью.

У меня есть класс с именем Stage, на сцене переменная класса Director в качестве вектора, и я хотел бы указать на эти данные элементы вектора из другого класса Channel.

class Stage
{
private:
    int time;
    std::vector<Director> directors;
public:
    Stage()
    { }
    void AddDirector(Director director)
    {
        directors.push_back(director);
    }    
    Director* GetDirector(int index)
    {
        return &directors[index];
    }    
    void DeleteDirector(std::string dirName)
    {
        // remove the director from the vector which matches the name of the input string
    } 
};

////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////// //////////////

class Director
{
private:
    int time;
    std::string stdstrDirName;
public:
    Director()
    { }
    std::string GetName()
    {
        return stdstrDirName;
    }
    void SetName(std::string name)
    {
        stdstrDirName = name;
    }

   // GetTime and SetTime

};




 class Channel
{
private:
    int time;
    std::string stdstrChannelName;
    Director* dir;
public:
    Channel()
    { }
    std::string GetName()
    {
        return stdstrChannelName;
    }
    void SetName(std::string name)
    {
        stdstrChannelName = name;
    }

    std::string  GetDirectorName()
    {
        dir->GetName();
    }

    void SetDirector(Director* director)
    {
        dir = director;
    }

};

Вот как я бы их указал.

int main()
{
    Stage stage;  // Create Stage Object
    Director d1, d2, d3; // Create Director Objects
    Channel channel;
    d1.SetName("D1"); d2.SetName("D2"); d3.SetName("D3");
    stage.AddDirector(d1); stage.AddDirector(d2); stage.AddDirector(d3);
    channel.SetDirector(stage.GetDirector(1)); // Link Director to Channel
}

Этот подход имеет недостаток всякий раз, когда вектор получает изменение размера указатели в Канале не будут содержать ссылку на их действительный объект.

Мне нужна помощь в том, каким должен быть дизайн структуры класса?

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Возможно, ваш вектор мог хранить указатели на объекты Director, а не на сами объекты. Таким образом, изменение размера не повлияет на существующие указатели.

0 голосов
/ 01 марта 2020

Задумывались ли вы об использовании ссылки (&) вместо указателей?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...