获取和设置功能与参考功能

时间:2013-05-03 06:27:27

标签: c++ methods properties get set

我有这段代码:

#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方法更有利。或者让变量公开更有意义。

1 个答案:

答案 0 :(得分:1)

两个版本之间在性能,行为等方面没有差异(或至少没有太大差异)。但是参考版本还需要注意其他事项:

  1. 您只能返回对该对象的实际成员的引用。如果没有这样的成员,你就迷失了。此外,提供引用意味着给出实现的提示,从而泄露类应该提供的抽象。它也使得改变实施变得困难。考虑使用x和y坐标实现的类Point。您将无法提供对点的极坐标表示的引用访问权限,也无法轻松地将实现更改为极坐标,因为在此之后引用了getX()getY()个访问器不会再工作了。
  2. 你需要一个const和一个nonconst版本,所以你有两种方法来对付两种方法 - 编写参考版本没有节省。
  3. 您无法应用边界检查,例如对于极坐标,phi必须介于02*pi之间。你不能拯救自己,例如p.phi() = 2500.4;
  4. 你将永远有一个吸气剂。有时候有些情况下只需要一个二传手。只有具有参考版本的setter是不可能的。并且对仅限setter的成员使用一个简单的setter方法,但任何其他成员的引用访问都会不一致,并且会让读取代码的人感到困惑。
  5. 因此,虽然在某些情况下,引用的访问权限很有用,但您应该在大多数情况下使用经典的getter和setter方法。