Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 正确使用-访问器/获取器与普通方法_C++_Oop_Getter_Accessor - Fatal编程技术网

C++ 正确使用-访问器/获取器与普通方法

C++ 正确使用-访问器/获取器与普通方法,c++,oop,getter,accessor,C++,Oop,Getter,Accessor,我很难区分表示对象属性的访问器/获取器和普通方法。在C++中,访问器和普通方法的命名约定不同,例如谷歌风格指南建议访问器和PasCALs用于正常方法的较低情况。此外,常规方法和访问器/获取器在前后的顺序也受约定的约束。在Java中,一个方法是否应该以get或compute/find开头以分别表示getter和普通方法可能会遇到一个难题。在C语言中,什么应该是属性,什么应该是方法,这是一个两难的问题。每当我创建一个新类时,我都不知道如何将方法分类为普通方法和getter 有没有一种简单的方法来确定

我很难区分表示对象属性的访问器/获取器和普通方法。在C++中,访问器和普通方法的命名约定不同,例如谷歌风格指南建议访问器和PasCALs用于正常方法的较低情况。此外,常规方法和访问器/获取器在前后的顺序也受约定的约束。在Java中,一个方法是否应该以get或compute/find开头以分别表示getter和普通方法可能会遇到一个难题。在C语言中,什么应该是属性,什么应该是方法,这是一个两难的问题。每当我创建一个新类时,我都不知道如何将方法分类为普通方法和getter

有没有一种简单的方法来确定什么是对象/访问器/获取器的属性,什么是正常的方法

以下任何一项是否与区分访问者/获取者和普通方法有关:

计算很便宜 返回新对象或副本,而不是常量引用 没有二传手 有一种方法可以间接地影响这种财产
为了说明这一点,这里是C++中的一个示例:假设我想创建一个可以容纳固定数量元素的数据结构,除了插入/删除操作之外,它还提供了一系列方法,可以处理包含的元素,即平均值、中值、最小值、最大值等。。现在,以计算平均值的函数为例;有人可能会说,这是一个对象的属性,每当插入/删除一个元素时,都会重新计算它,从而将其视为一个getter,比如constdouble&average。另一种方法是按需计算,并将其视为常规方法,即双重计算平均值。另外,假设有一个方法返回一组包含的元素;如果不需要每次都计算它,则可以将其视为getter const set&unique_元素,但如果类每次都计算它,那么set ComputeUniqueElements将更合适。

在访问器和普通方法之间创建分离是个坏主意。方法就是方法;它是一个成员函数,具有特定的效果。成员函数只是设置成员变量的值或返回成员变量的值,这是一个实现细节

一个好的API将外部世界与实现细节隔离开来。外部世界既不应该知道也不应该关心某个特定函数只是一个访问器,如果没有其他原因,只是因为它可以更改

假设您的类中有一个name属性。最初,您将其存储为std::string。您提供了获取和修改名称的函数。一切都很好

现在,假设您决定更改名称的存储方式。您需要将名称解析为名字和姓氏。外界是否需要知道你在这么做?setter方法的名称不需要更改。它的界面不需要改变。所有需要改变的是如何实现该功能

在C++中,访问者和普通方法的命名约定不同,例如谷歌风格指南建议访问器和PasCALs用于正常方法的较低情况。
<>谷歌的风格指南不代表C++或它的程序员;它只代表了谷歌所做的事情。

因为C++没有形式的属性概念,就语言而言,它只是方法,这不是编程风格/偏好的问题吗?你可以随意命名你的方法,让它们以你认为最有意义的方式运行…@Jeremy:就语言而言,方法并不存在。你的意思是暗示一个函数是一个成员吗?还是非静态的?还是虚拟的?还是纯洁的?为避免误解,请选择标准化术语:而不是方法,即以相关说明符为前缀的函数。是的,非静态成员函数。@Tomalak我的意思是使用与原始海报相同的术语,为了不让讨论变成徒劳无益的语言律师。@Jeremy:你在之前的评论中谈到了形式,就语言而言,当我采取同样的方法时,你会提出争议。