提供非const引用getter是否有意义

doc*_*doc 7 c++ oop getter accessor mutators

有时我需要暴露一些班级成员.例如,在以下示例中class Mechanic可能需要直接访问Engine组件.我已多次读过所有字段都应该由mutator(accessor)方法访问,原因有几个.但是在提供非const引用getter时是否有任何优势:

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;
}
Run Code Online (Sandbox Code Playgroud)

简单地将引擎组件公开:

class Car
{
    public:
        Engine engine;
}
Run Code Online (Sandbox Code Playgroud)

您也可以替换public使用protected,如果你不喜欢这样的例子.在现实生活中,当涉及到System.in或者,你在Java中有类似的东西System.out.看起来,要完全符合某些人的说法,你需要执行类似的调用System.getInstance().getOut().println("hello world").在这种情况下,除了很多官僚代码外,我没有看到任何好处.

doc*_*doc 1

我找到了提供此类吸气剂的合理点。它使您的软件集成变得更加容易(例如,当您想要将界面翻译成另一种语言并绑定 ABI 时)。