【发布时间】:2010-11-16 14:23:31
【问题描述】:
我不熟悉模板,但我想知道是否可以将它们用于 setter 和 getter 方法。例如在这种情况下:
double exmlClass::getA(void) const
{
return a_;
}
void exmlClass::setA(const double& a)
{
a_ = a;
}
double exmlClass::getB(void) const
{
return b_;
}
如您所见,方法几乎相同,只是它们引用了另一个私有变量(a_、b_、c_)。有没有更优雅的方法来编写这些函数,或者在这种情况下像上面那样做是常见的做法?如果使用模板很常见,我会很感激您在上面的代码中如何使用它们。
我要问的另一个问题是如何正确声明 getter 和 setter。编码风格好吗?
double getA(void) const;
void setA(const double& a);
double getB(void) const;
void setB(const double& b);
double getC(void) const;
void setC(const double& c);
我的意思是 getter 应该始终是 const 并且 setter 将作为对对象的参数引用,而不是复制它,这可能会慢一点?
【问题讨论】:
-
如果你的班级有大量的 getter 和 setter,这是一个问题,我会认真 question its design。
-
我在一定程度上同意@sbi。正如那篇文章所暗示的那样,如果您使用 setter 和 getter 的唯一目的是访问私有的东西,那么这很愚蠢。但是,有一种情况本文没有涉及:当您有正当需要将私有数据视为半透明或完全不透明(字节序、序列化/反序列化等等)时,尤其是在类型为表示包装了多条数据。例如:codereview.stackexchange.com/questions/7786/…
-
另外,由于那篇文章的作者没有把它拼出来(只是在接近结尾处简单提到),我想从文章中强调一点:
3. A lack of essential operators and other methods forces user programs to manipulate the object through the get and set accessor functions.如果你的访问者是运营商,这至少意味着该文章的作者不会[必然]有同样的抱怨。 -
@Brian:好吧,OP 有一些愚蠢的吸气剂并问 这是一种好的编码风格吗? 对于一个偏离 真理之路的新手来说,这是一个非常可靠的信号(™),而不是有人询问抽象出 getter 背后的一些实现细节。
标签: c++ templates setter getter