Имеет ли смысл предоставлять неконстантный метод получения ссылок

Иногда мне нужно показать некоторых членов класса. Например, в следующем примере классу Механик может потребоваться прямой доступ к компоненту Engine . Я много раз читал, что все поля должны быть доступны для методов мутатора (аксессора) по нескольким причинам. Но есть ли какое-либо преимущество при предоставлении неконстантного метода получения ссылки:

class Car
{
    public:
        Engine & engine()
        {
           return m_engine;
        }

        //as a consequence you will also need to provide const version
        const Engine & engine() const
        {
           return m_engine;
        }

    private:
       Engine m_engine;
}

перед простым открытием компонента движка:

class Car
{
    public:
        Engine engine;
}

Вы также можете заменить public на protected , если вы этого не сделаете как этот пример. В реальной жизни у вас есть нечто похожее на Java, когда речь идет о System.in или System.out . Это выглядит как, чтобы быть полностью совместимым с тем, что говорят некоторые, вам нужно будет выполнять такие вызовы, как System.getInstance (). getOut (). println ("hello world") . Я не вижу в таких случаях никакой пользы, кроме большого количества бюрократического кода.

7
задан doc 6 November 2010 в 15:56
поделиться