【发布时间】:2019-01-07 23:12:39
【问题描述】:
如果我需要编写一个 setter 和/或 getter,我会这样写:
struct X { /*...*/};
class Foo
{
private:
X x_;
public:
void set_x(X value)
{
x_ = value;
}
X get_x()
{
return x_;
}
};
但是我听说这是编写 setter 和 getter 的 Java 风格,我应该用 C++ 风格来编写它。此外,有人告诉我这是低效的,甚至是不正确的。那是什么意思?如何在 C++ 中编写 setter 和 getter?
假设对 getter 和/或 setter 的需求是合理的。例如。也许我们在 setter 中做一些检查,或者我们只写 getter。
关于不需要 getter 和 setter 的讨论很多。虽然我同意这里所说的大部分内容,但我仍然主张需要知道如何惯用地编写此类方法,因为有正当理由认为 getter 和 setter 是正确的解决方案。乍一看,它们可能并不像 setter 或 getter,但它们确实如此,或者至少适用于编写它们的模式。
例如:
-
获取向量的大小。您不想公开数据成员,因为它需要是只读的。
-
Getter 和 setter 不需要只公开一个数据成员。考虑获取和设置数组的元素。那里有逻辑,您不能只公开一个数据成员,首先没有要公开的数据成员。它仍然是你无法避免的 getter/setter 对:
class Vector { void set_element(std::size_t index, int new_value); int get_element(std::size_t index); };了解编写 getter 和 setter 的 C++ 惯用方式将使我能够以 C++ 惯用方式编写上述
get_element/set_element。
【问题讨论】:
-
为什么不把它设为公共数据成员
-
@Cheersandhth.-Alf 最后一段:“假设对 getter 和 setter 的需求是合理的,例如,也许我们在 setter 中做一些检查,或者我们只写 getter)。”问题是,一旦确定需要写一篇,如何写一篇。
-
您通常不需要包含单词
get_或set_。他们可以both be namedx() -
我不确定问题出在哪里。看完答案,我不知道他们解决了什么问题。
-
@2785528 getter 和 setter 并不总是合理的。我不反对。他们有时不被理解和滥用。话虽如此,有时他们是有道理的。这篇文章不是关于何时以及为什么使用它们。
标签: c++ getter-setter c++-faq