获取和设置函数与引用函数
Get and Set Function vs Referenced Functions
我有这样的代码:
#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方法更有益。还是把变量设为公共更有意义。
这两个版本在性能、行为等方面没有区别(至少不是很大)。但是对于参考版本,还有一些事情需要记住:
- 只能返回对对象的实际成员的引用。如果没有这样的成员,你就输了。此外,提供引用意味着给出关于实现的提示,从而泄漏类应该提供的抽象。这也使得改变实现变得困难。考虑用x和y坐标实现的类
Point
。您将无法提供对点的极坐标表示的引用访问,也无法轻松地将实现更改为极坐标,因为在此之后,引用getX()
和getY()
访问器将不再工作。 - 你将需要一个const和一个非const版本,所以你有两个方法对两个方法-没有节省编写参考版本。
- 您不能应用边界检查,例如
phi
必须在0
和2*pi
之间的极坐标。你无法避免像p.phi() = 2500.4;
这样的情况。 - 你将永远有一个getter。有时只需要setter。不可能只有参考版本的setter。对于只使用setter的成员使用一个简单的setter方法,但是对任何其他成员使用引用访问将是不一致的,并且会使任何阅读你的代码的人感到困惑。
因此,虽然在某些情况下,引用访问是有用的,但大多数情况下,您应该使用经典的getter和setter方法。
相关文章:
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 类 Referention 中C++回调函数引用非静态函数
- 使用函数引用指向节点的指针删除链表中的节点?
- 解释通过从函数引用返回数组的语法
- "Class1"类"Class2"对象作为私有数据成员。如何通过"Class 2"函数引用"Class1"对象?
- 使用默认构造函数引用成员变量初始化错误
- 无法调用函数引用 c++
- 使用 decltype(this) 获取函数引用
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 从内联函数引用文件静态变量
- Boost::将sigaction函数引用绑定到实例
- 一种比函数引用更有效的方法
- 奇怪的未定义函数引用,函数调用C++不存在
- 是否可以检测绑定成员函数引用的对象是否被删除或销毁
- 构造函数引用参数导致seg错误
- 是否可以使函数模板从函数引用中获取“decltype”
- 无法让 Lua 函数引用"self"
- 如何解析变量和函数引用(Linker & Compiler)?
- 从不同模块调用函数 - 引用错误
- 如何在主函数中连接到数据库,然后从其他函数引用它