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