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

Иногда мне нужно разоблачить некоторых учеников. Например, в следующем примереclass Mechanic может потребоваться прямой доступ к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"), Я не вижу никакой пользы, кроме большого бюрократического кода в таких случаях.

Ответы на вопрос(9)

Ваш ответ на вопрос