0

我有这个代码:

#include<iostream>
#include<string>

class Test
{
public:
    std::string& GetText()
    {
        return text;
    }

    void Display() { std::cout << text << std::endl; }

private: 
    std::string text;
};

int main()
{
    Test test;

    test.GetText() = "Testing";
    test.Display();
}

现在这个引用的函数就像一个函数名下的 get 和 setter 一样工作。所以我想知道使用这种方法是否有益,或者使用单独的 get 和 set 方法是否更有益。或者将变量公开是否更有意义。

4

1 回答 1

1

两个版本在性能、行为等方面没有区别(或至少没有太大区别)。但是对于参考版本,还有其他一些事情需要记住:

  1. 您只能返回对对象实际成员的引用。如果没有这样的成员,你就迷路了。此外,提供引用意味着给出实现的提示,从而泄露了类应该提供的抽象。这也使得改变实现变得困难。考虑一个类Point,用 x 和 y 坐标实现。您将无法提供对点的极坐标表示的引用访问,也无法轻松地将实现更改为极坐标,因为此后引用getX()getY()访问器将不再起作用。
  2. 您将需要一个 const 和一个非常量版本,因此您有 2 种方法而不是 2 种方法 - 编写参考版本没有任何节省。
  3. 您不能应用边界检查,例如phi必须在极坐标之间02*pi极坐标之间。您无法自救,例如p.phi() = 2500.4;
  4. 你将永远有一个吸气剂。有时在某些情况下只需要一个 setter。不可能只有参考版本的设置器。并且对只有 setter 的成员使用简单的 setter 方法,但对任何其他成员的引用访问将是不一致的,并且会使任何阅读您的代码的人感到困惑。

因此,虽然在某些情况下,引用的访问很有用,但大多数时候您应该使用经典的 getter 和 setter 方法。

于 2013-05-03T07:03:21.010 回答