我应该在 class 中使用 setters/getters 我做的吗

Should i use setters/getters in class I made them

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

是正确的

直接在变量自身中引用变量是完全正确的 class。

accessors/mutators 的想法是使用 class 之外的数据的函数不应该对数据的存储方式做出任何假设。

显然 class 本身知道数据是如何存储的,因此可以自由地直接操作它。

您应该更愿意编写尽可能不受未来更改影响的代码,这通常意味着使用您自己的 setter(和 getter)而不是直接访问您自己的私有数据。

例如,假设您决定将 _color 更改为 enum 或 RGB 元组。如果你直接使用 _color ,你将有更多的地方可以改变。使用 setColor(int),您只有一个地方可以将 int 转换为任何新的内部存储空间。

此外,在您的特定示例中,由于 setColorpublic,您的 colorCarWithRandomColor() 方法可能是非成员非友元函数,这进一步降低了耦合。 (当然,这完全取决于您的 getRandomColor() 方法的工作原理。)

void colorCarWithRandomColor(Car& car) {
    // Imagine that there is a function called getRandomColor and that returns random color.
   car.setColor(Car::getRandomColor());
}