c++ - 为什么 Google 在成员变量之后命名访问器和修改器?

标签 c++ oop coding-style encapsulation google-style-guide

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Function_Names#Function_Names

Regular functions have mixed case; accessors and mutators match the name of the variable: MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable().

对用户隐藏实现细节,这样他/她就不知道访问器/修改器方法是否返回/修改成员变量,这不是封装的全部意义所在吗?如果我更改变量名称或更改它在对象中的存储方式会怎样?

编辑:

如果我有一个实例变量 int foo_ 它看起来很简单

int foo() const { return foo_; }

但是如果我添加另一个返回 foo_ + 2 的方法,我应该命名为 bar 还是 GetBar

int bar() const { return foo_ + 2; }
int GetBar() const { return foo_ + 2; }

如果我选择GetBar,然后决定将返回值缓存在另一个成员变量bar_中,我是否必须将方法重命名为bar?

最佳答案

实际上,封装的要点是隐藏一个类的内部工作,不一定要隐藏事物的名称。成员变量的名称无关紧要;它是访问器或修改器提供的间接级别

拥有访问器使您能够在不破坏类与外界的接口(interface)的情况下更改类的内部工作方式(包括成员变量的名称)。类的用户无需关心实现细节,包括在类内部命名的内容,而只关心从外部看到的类的行为

换句话说,类的用户不应依赖 Google 的风格指南来确定他们是否正在修改成员变量。

关于c++ - 为什么 Google 在成员变量之后命名访问器和修改器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712404/

相关文章:

java - Java 中类型转换为子类

c++ - 如何在与 boost 正则表达式匹配的字符串中找到索引?

c++ - 如何在 log(n) 或更短时间内计算此序列的第 n 个元素?

javascript - 为什么卡片在 Javascript ES6 "Game of War"中丢失?

c++ - 如何用 int * 修改 C++ 结构

language-agnostic - 标识符的冗长如何影响程序员的性能?

c++ - 为什么要使用无限循环?

c++ - 如何播放视频?

java - 传递 TimeUnits 并转换为毫秒