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