gpt4 book ai didi

c++ - 获取和设置函数与引用函数

转载 作者:行者123 更新时间:2023-11-28 07:38:05 26 4
gpt4 key购买 nike

我有这个代码:

#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();
}

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

最佳答案

两个版本在性能、行为等方面没有差异(或至少差异不大)。但是对于引用版本还有其他需要注意的地方:

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

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

关于c++ - 获取和设置函数与引用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16352936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com