0

假设我们处于这种情况:

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()我需要访问数据成员,最好的方法是什么?我应该使用访问函数setget(为客户端程序员创建),或者我可以简单地使用数据成员作为它们自己(、、、、c1.a),c1.b因为我是类设计者?c2.ac2.b

4

4 回答 4

5

你可以使用任何一个。这取决于您是否希望您的 setter/getter 就是这样,或者还具有一些附加功能。例如,getter 还可能会更新该成员被访问次数的计数器,因此通过 getter 访问它们,甚至在类内部,可能更有意义。

无论哪种方式,这都不是设计中最重要的部分。您首先需要了解封装的真正含义。制作成员private并提供 getter 和 setter 并不比一开始就制作它们public好(好吧,这对于调试目的来说更好,但从概念上讲是一样的)。

你真的需要它们吗?

此外,应该制作吸气剂,const您应该通过参考。c1c2const

于 2013-04-30T11:16:01.923 回答
2

直接用就行了。Set/get 是从类外访问成员。

于 2013-04-30T11:14:25.743 回答
1

由于 add 是类的成员函数,您可以直接访问私有数据成员。通常为客户端访问提供设置和获取功能。

于 2013-04-30T11:16:25.297 回答
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函数时。

于 2013-04-30T11:18:00.607 回答