Sil*_*ksi 3 c++ oop encapsulation getter-setter
车.h
#ifndef CAR_H
#define CAR_H
class Car
{
public:
void setColor(int color);
void colorCarWithRandomColor();
private:
int _color;
};
#endif
Run Code Online (Sandbox Code Playgroud)
汽车.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
}
Run Code Online (Sandbox Code Playgroud)
那么使用其中哪一种更好。_color = getRandomColor();或者setColor(getRandomColor());在这种情况下?我应该调用setColor函数还是直接更改是正确的_col
您应该更喜欢编写尽可能不受未来变化影响的代码,这通常意味着使用您自己的 setter(和 getter)而不是直接访问您自己的私有数据。
例如,假设您决定更改_color为 RGB 元组enum或 RGB 元组。如果_color直接使用的话,要改的地方就会多一些。使用时,setColor(int)您只有一个位置可以转换int为任何新的内部存储。
此外,在您的特定示例中,由于setColoris public,您的colorCarWithRandomColor()方法可能能够成为非成员非友元函数,这进一步减少了耦合。(当然,这取决于您的getRandomColor()方法的工作原理。)
void colorCarWithRandomColor(Car& car) {
// Imagine that there is a function called getRandomColor and that returns random color.
car.setColor(Car::getRandomColor());
}
Run Code Online (Sandbox Code Playgroud)