我应该在课堂上使用我制作的设置器/获取器吗

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

Ðаn*_*Ðаn 5

您应该更喜欢编写尽可能不受未来变化影响的代码,这通常意味着使用您自己的 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)