假设我们处于这种状况:
class C {
int a, b;
public:
C(int aa, int bb) {
setA(aa);
setB(bb);
}
void setA(int aa) { a = aa; }
int getA() { return a; }
void setB(int bb) { b = bb; }
int getB() { return b; }
C add(const C c1, const C c2);
};
如果在add()
我需要访问数据成员,这是最好的方法吗?我应该使用访问函数set
和get
(为客户端程序员创建),或者我可以简单地将数据成员用作自己(c1.a
,c1.b
,{{1 },c2.a
)因为我是班级设计师?
答案 0 :(得分:5)
您可以使用其中之一。这取决于你是否希望你的setter / getters只是那个,或者还有一些额外的功能。例如,getter可能还会更新该成员被访问次数的计数器,因此通过getter访问它们,即使是在类中,也可能更有意义。
无论哪种方式,这都不是设计中最重要的部分。首先需要了解封装的真正含义。让成员private
并提供getter和setter并不比首先创建它们public
更好(好吧,这对于调试目的而言更好,但从概念上来说它是相同的)。
你真的需要它们吗?
此外,应该const
获取getter,您应该通过c1
引用传递c2
和const
。
答案 1 :(得分:2)
直接使用它。 Set / get用于访问课堂外的成员。
答案 2 :(得分:1)
由于add是类的成员函数,因此您可以直接访问私有数据成员。通常为客户端访问提供设置和获取功能。
答案 3 :(得分:1)
在这个特定的例子中,我只是直接使用变量名。
但是在类似的情况下,getter / setter的用途更多。
例如,当setter(或getter)函数比简单x = y
更复杂时:
void SetA(int aa){ //a between 0 and 100
a = std::max(0, std::min(aa, 100));
}
或者当你想要继承C
并重载getter / setter或add
函数时。