【发布时间】:2018-09-05 06:03:42
【问题描述】:
在下面的代码中,我将值从另一个类函数分配给 url。
我收到了代码审查评论“将 url 设为私有并且
实现 getter 函数,它应该返回 std::string
通过引用传递的输出参数的值'
class http_client
{
public:
std::string url;
};
我对上面的评论感到困惑,因为我只使用 url 来设置 http_client 类之外的值。最初,我认为我必须制作 一种公共 setter 方法,它将值设置为 url,如下所示。
class http_client
{
private:
std::string url;
public:
void set_url(const std::string& url)
{
this->url = url;
}
};
谁能建议我在上面的代码审查评论中缺少什么?
【问题讨论】:
-
您的审阅者似乎是 Java bean 的粉丝
-
只有当
url只保存数据而没有任何副作用时,封装才会产生开销。 (即使在这种情况下,封装也可能是一种独特风格的问题。)通常情况下,成员大多具有副作用。因此,它们通常被设为private,并且 setter(更改成员的专有方法)负责在成员更改时授予此副作用。现在,getter 是访问(读取)成员所必需的。设为inline,通过函数访问不会导致(优化)代码开销。 -
我不同意你的评论者。输出参数味道不好,容易出错且不必要。
-
@StoryTeller Java bean 是否使用相同的封装方法?
-
@myuu - 是的。用于简单聚合的 getter 和 setter。