класс мутирующие данные другого класса

У меня есть два класса под названием Data и A. класс A в основном представляет собой набор функций, которые управляют данными в данных. Теперь мне нужен способ доступа ко всем данным в Data. Я знаю два способа сделать это.

  1. Я могу передать ссылку на данные A, но тогда мне всегда нужно записать префикс » Data.»что, я думаю, действительно раздражает, и нет никакой двусмысленности в любом случае.

  2. Я могу сделать суперкласс данных. Но некоторые методы в вызове другого класса B, который также мутирует данные класса, и в этом подходе я не уверен, как это может быть сделано.

Поэтому мой вопрос: есть ли другой способ доступа к данным в данных, который был бы более подходящим?

2 ответа

  1. Концепция, которую вы ищете, называется классом друзей. Классы Friend имеют доступ к закрытым членам класса, в котором они объявлены. Итак, у вас будет что-то вроде

    class A; //Forward declaration
    class Data
    {
    friend class A; //Forward friend declaration, instances of A
                    //can access private members of Data
    public:
        //Implementation details
    private:
        int m_myData;
    };
    
    class A
    {
        //Do whatever to an  instance of Data (probably take it by reference)
    public:
        void multiplyData(Data &data, int multiple) { data.m_myData *= multiple; }
    };
    
  2. Если вопрос собирается получить доступ к данным из класса A, объявите данные глобальными. Вы можете очень хорошо получить доступ к любому. Это также может быть класс А. Используйте данные класса в качестве файла заголовка для реализации класса A, все открытые члены данных будут доступны классу A.