Car.h
#ifndef CAR_H
#define CAR_H
class Car
{
public:
void setColor(int color);
void colorCarWithRandomColor();
private:
int _color;
};
#endif
Car.cpp
#include "Car.h"
void Car::setColor(int color){
_color = color;
}
void Car::colorCarWithRandomColor(){
// Imagine that there is a function called getRandomColor and that returns random color.
_color = getRandomColor();
// or
setColor(getRandomColor());
// which one is correct
}
所以哪一个更好用。在这种情况下,_color = getRandomColor();
或setColor(getRandomColor());
?我应该调用setColor
函数,还是直接更改_col
答案 0 :(得分:3)
您应该更喜欢编写对未来更改尽可能免费的代码,这通常意味着使用您自己的setter(和getter),而不是直接访问您自己的私有数据。
例如,假设您决定将_color
更改为enum
或RGB元组。如果直接使用_color
,您将有更多地方可以更改。使用setColor(int)
,您只有一个位置可以从int
转换为新的内部存储空间。
此外,在您的特定示例中,由于setColor
为public
,因此您的colorCarWithRandomColor()
方法可能是非成员非朋友函数,这会进一步降低耦合。 (当然,这取决于您的getRandomColor()
方法的确切运作方式。)
void colorCarWithRandomColor(Car& car) {
// Imagine that there is a function called getRandomColor and that returns random color.
car.setColor(Car::getRandomColor());
}
答案 1 :(得分:2)
直接引用自己类中的变量是完全正确的。
访问器/ mutator的想法是使用类外部数据的函数不应该对它的存储方式做任何假设。
显然,类本身知道数据是如何存储的,因此可以直接操作它。