Класс, получающий доступ к внутренним рядовым класса?

Class Outer
{
 ...
    private class Node
    {
      private T data;
      ...

      private T getData()
      {
         return data;
      }
    }
}

Что цель использовать установлено, и получите методы, если внешний класс может получить доступ к внутренним членам парламента, не занимающим официального поста класса? Какова цель сделать внутренние классы частными? Доступ пакета?

9
задан ShrimpCrackers 9 May 2010 в 14:38
поделиться

3 ответа

Частные внутренние классы пишутся, когда вы не хотите, чтобы класс был открыт для внешних классов внутри или вне пакета. Они используются только внутри класса внешнего уровня.

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

9
ответ дан 4 December 2019 в 14:27
поделиться

Вы могли бы пропустить тривиальные getters и setters, но часто эти методы нетривиальны (распространенный случай - паттерн 'lazy load').

Отредактировано для добавления: Ленивая загрузка - это когда вы инстанцируете член только тогда, когда запрашиваются данные. Он используется, когда получение данных не всегда необходимо и стоит дорого.

class a
{
private:
    int m_aNumber;
    bigDeal *m_pBig;

public:
    a() { m_aNumber = 0; m_pBig = NULL; }
    ~a() { if (m_pBig) delete m_pBig; }

    // trivial
    int get_aNumber() { return m_aNumber;}
    void set_aNumber(int val) { m_aNumber = val; }

    // lazy load
    bigDeal *get_Big()
    {
        if (m_pBig == NULL)
        {
            // bigDeal::bigDeal() downloads data from Mars Rover
            // takes 20 minutes, costs $1.2 million dollars to run
            m_pBig = new(bigDeal); 
        }
        return m_pBig;
    }
    void set_Big(bigDeal *val)
    {
        m_pBig = val;
    }
}
4
ответ дан 4 December 2019 в 14:27
поделиться

Прежде всего, я бы посоветовал относиться к внутренним public/protected/internal классам так же, как и к любым другим "внешним" классам. То есть, используйте те же принципы проектирования.

Что касается внутренних классов, то когда я использую внутренние private классы, они обычно оказываются просто кучей байтов... то есть они не выполняют реальной обработки. Они просто существуют для того, чтобы облегчить написание кода для внешнего класса.

Я не говорю вам писать плохой код, но вы можете быть гораздо более мягкими в своем дизайне с внутренними приватными классами. Как правило, они должны быть простыми и легкими... не перебарщивайте с ОО во внутренних классах. Кроме того, если в итоге вам придется что-то изменить во внутреннем классе, вам придется обновить только ссылки во внешнем классе... что, в общем-то, не так уж и важно.

1
ответ дан 4 December 2019 в 14:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: