【问题标题】:Is it good practice to create functions to access class variables?创建函数来访问类变量是一种好习惯吗?
【发布时间】:2012-03-12 23:44:07
【问题描述】:

正如标题所说:创建函数来访问类变量是一种好习惯吗?

我见过很多类似下面的代码:

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)。

这是标准还是良好做法?

【问题讨论】:

    标签: c++ class coding-style standards


    【解决方案1】:

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

    例如,您可以在MyClass::setX() 中设置一个断点,而不是在代码中更改MyClass.x 的所有位置设置断点。

    然而,尽管访问器方法比直接成员访问要好,但如果滥用,访问器方法并非没有缺点。详情可访问Getters and Setters are bad OO design?

    【讨论】:

    • 是的,访问器还减少了接口(公共方法)和实现(私有字段)之间的耦合。
    • 有一个例外(IMO):如果你有一个你知道永远不需要保护的变量,并且它是一个简单的类型,那么就将它公开。添加函数来获取/设置它只是代码膨胀。
    • @EdS.:为了保持一致性,我会添加一个简单的访问器,它返回非const 引用,因此访问权限保持不变。
    • 我很犹豫是否同意。 “知道你永远不需要守卫。”嘿,龙吧。
    • @Xeo:我倾向于远离添加变异方法以保持一致性。如果有明确的需求,那么绝对是(尽管我认为这种“需求”经常会突出设计问题。)但是修改数据的东西越少,恕我直言。
    【解决方案2】:

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

    我会警告不要为您可能不需要它们的所有内容自动创建它们。但这是一个不同的问题。

    就像在健身房锻炼一样:回报比需要的多;)

    【讨论】:

      【解决方案3】:

      是的,它们没问题,但是我也想说,你应该让你的类比 Java 和其他的小,这样你就不会得到主要是 getter 和 setter 的类型。

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 当然。很难解释它的重要性,直到你发现自己已经做了几千行了;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        • 2014-07-21
        • 2017-10-11
        • 2015-02-18
        • 1970-01-01
        • 2017-07-15
        • 1970-01-01
        相关资源
        最近更新 更多