Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++_Class_Coding Style_Standards - Fatal编程技术网

C++ 创建函数来访问类变量是一种好的做法吗?

C++ 创建函数来访问类变量是一种好的做法吗?,c++,class,coding-style,standards,C++,Class,Coding Style,Standards,正如标题所说:创建函数来访问类变量是一种好的做法吗 我已经看到相当多的代码片段,它们执行如下操作: class MyClass { public: void setx(int a); void sety(int b); int read_x; int read_y; private: int x; int y; }; void MyClass::setx(int a) { x=a; } void MyClass::sety(int b) { y = b; } int MyClass::

正如标题所说:创建函数来访问类变量是一种好的做法吗

我已经看到相当多的代码片段,它们执行如下操作:

class MyClass {
public:
void setx(int a);
void sety(int b);
int read_x;
int read_y;

private:
int x;
int y;

};

void MyClass::setx(int a) {
x=a;
}

void MyClass::sety(int b) {
y = b;
}

int MyClass::read_x() {
return x;
{

int MyClass::read_y() {
return y;
}
因此,它们不是直接访问变量(MyClass.x),而是使用函数读取和设置变量值等


这是标准做法还是良好做法?

是的,访问器函数优先用于直接成员访问,原因有几个。它们提供了一个独特的访问点,更易于跟踪和调试

例如,您可以只在
MyClass::setX()
中设置一个断点,而不是在更改了
MyClass.x
的代码中的任何地方设置断点


然而尽管访问方法优于直接成员访问,但如果被误用,访问方法也并非没有缺点。有关详细信息,您可以访问

是的,它们是可以的,但是我还想说,您应该保持类的规模比使用Java之类的工具时要小,这样您就不会得到主要是getter和setter的类型


通常,一个类持有一个(理想情况下是单一的)状态(如果需要可以获得),并且有一个理想情况下应该保持私有的实现。

而不是直接访问变量?绝对地创建编程接口层可以使您与这些内部变量本身的实现细节分离。然后,您可以为自己提供额外的灵活性,比如创建相关类的模拟实现(用于测试),创建代理类(用于修饰功能,如日志记录等)

我警告你,不要在你可能不需要它们的地方自动创建它们。但这是另一个问题


很像在健身房锻炼:它所带来的回报大于它所需要的;)

这很重要,因为它将类的接口与底层数据模型分离。您经常会看到类似于您发布的示例的基本代码,并且一开始,很多代码似乎是不必要的复杂化。但是,它提供了一个(自文档化)框架,在这个框架中,对象的实现可以在不破坏通过定义的接口访问类对象的代码的情况下进行更改。

Yup,访问器还减少了接口(公共方法)和实现(私有字段)之间的耦合。只有一个例外(IMO):如果你有一个变量,你知道它永远都不需要保护,而且它是一个简单的类型,那么继续吧,把它公之于众。添加函数来获取/设置它只是代码膨胀。@EdS:为了一致性,我会添加一个简单的访问器,返回一个非
const
ref,因此访问保持不变。我不太同意。“知道你永远不需要一个守卫。”他是龙。@Xeo:我倾向于远离添加变异方法以保持一致性。如果有明确的需求,那么绝对(尽管我认为这样的“需求”经常会突出设计问题。)但是修改数据的东西越少越好。很难解释它有多重要,直到你发现自己已经有几千行没有做过;)