返回对私人与 public 成员的引用
returning reference to private vs public member
我想知道提供 public 访问方法返回引用而不是使成员成为 public 的原因是什么。 QPoint 有方法 int& rx
和 int& ry
让我直接操作坐标。
我想实现看起来与此类似:
public:
int& rx(){return x;}
private:
int x;
到目前为止我唯一的想法如下:通过保持成员私有并 "only" 提供引用,class 仍然可以更改为使用不同的数据类型作为其坐标和同时仍然 "somehow" 返回对 int 的引用。然而,这个 "somehow" 总是需要一个 int 成员。一旦引用泄露,成员实际上就不能再改变了。所以这不能成为原因。
在 related question 中,接受的答案建议让成员 public 而不是返回引用。
返回引用而不是使成员成为 public(在一般情况下)有什么好处吗?或者这只是 Qt 特定的(QPoint 特定的?)设计?
一般来说,通过引用返回成员会破坏封装,这与拥有 public 成员一样多,而且两者都不被鼓励。
我想当 class 足够简单时(普通的旧数据——预计界面和数据都不会改变),可以使它的所有成员 public。返回非 const 引用具有相同的效果。所有封装都被破坏了。
关于你的问题,没有任何好处。
除了我的回答,还有类似的回答here
我想知道提供 public 访问方法返回引用而不是使成员成为 public 的原因是什么。 QPoint 有方法 int& rx
和 int& ry
让我直接操作坐标。
我想实现看起来与此类似:
public:
int& rx(){return x;}
private:
int x;
到目前为止我唯一的想法如下:通过保持成员私有并 "only" 提供引用,class 仍然可以更改为使用不同的数据类型作为其坐标和同时仍然 "somehow" 返回对 int 的引用。然而,这个 "somehow" 总是需要一个 int 成员。一旦引用泄露,成员实际上就不能再改变了。所以这不能成为原因。
在 related question 中,接受的答案建议让成员 public 而不是返回引用。
返回引用而不是使成员成为 public(在一般情况下)有什么好处吗?或者这只是 Qt 特定的(QPoint 特定的?)设计?
一般来说,通过引用返回成员会破坏封装,这与拥有 public 成员一样多,而且两者都不被鼓励。
我想当 class 足够简单时(普通的旧数据——预计界面和数据都不会改变),可以使它的所有成员 public。返回非 const 引用具有相同的效果。所有封装都被破坏了。
关于你的问题,没有任何好处。
除了我的回答,还有类似的回答here