Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Доступ к полям класса


Автор: Бегемот 28.4.2014, 19:11
Добрый день, друзья.

Есть вот такой класс. 
Код

class A
{
private:
    struct S
    {
        .......
    };
    class compare{
    public:
        bool operator()(int p, int n)const
        {
            return p<n;
        }
    }
    map<int, A, compare> Map;
   ......
};


Есть вот такой класс
Код

class B
{
    public:
        A left;
        A right;
        void func();
....
};


Как можно получить прямой доступ к Map из func. Или может быть какой-то другой способ

Автор: Бегемот 28.4.2014, 19:45
Насколько правильно делать вот так....
Код


struct S
{
     .......
};
class compare{
public:
    bool operator()(int p, int n)const
    {
        return p<n;
    }
}
typedef map<int, A, compare> TMap;

class A
{
private:
   TMap Map;
public:
   TMap& GetMap();
};

class B
{
    public:
        A left;
        A right;
   void Func();
};


TMap& A::GetMap()
{
    return Map;
}

void B::Func()
{
   TMap Map;
   Map = left.GetMap();
   ...
   Map = right.GetMap();
   ...
}



Добавлено через 5 минут и 56 секунд
Правда в таком случае доступ к A::Map появляется снаружи класса через public-метод.  А мне необходимо что бы доступ был только из class B.

Автор: Static 29.4.2014, 12:21
Цитата(Бегемот @  28.4.2014,  18:11 Найти цитируемый пост)
Добрый день, друзья.

Вот именно smile
Код

class A
{
    friend class B;
...

Правда, таким образом станут доступны все внутренности класса А. Но только для класса В.

Автор: Бегемот 29.4.2014, 16:45
Static, спасибо. Что скажете про мой пост выше, с точки зрения правильности проектирования класса?

Автор: Lukkoye 1.5.2014, 12:31
Цитата(Бегемот @  29.4.2014,  16:45 Найти цитируемый пост)
то скажете про мой пост выше, с точки зрения правильности проектирования класса? 


Безобразно.

Автор: Бегемот 4.5.2014, 06:17
Lukkoye
как  было бы правильно?

Автор: Lukkoye 4.5.2014, 21:37
Цитата(Бегемот @  4.5.2014,  06:17 Найти цитируемый пост)
как  было бы правильно? 


По простому. Что бы оно выглядело просто. И работало просто.

Для использования вложенных классов, френдов и прочего синтаксического барахла должна быть четко обозначенная причина.

Когда у человека есть такая причина - он отдает себе отчет в том, что делает. И у него не возникает относительно этого никаких вопросов.



Проектирование ради проектирования, в результате которого получается маловразумительное клюкало, в необходимости которого сам автор не уверен - не нужно.




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)