<分区>
访问和修改其他类中特定类的变量的更好方法是什么?使用公共(public)全局变量还是使用 get() 和 set()?
标签 c++
<分区>
访问和修改其他类中特定类的变量的更好方法是什么?使用公共(public)全局变量还是使用 get() 和 set()?
最佳答案
不要使用公共(public)成员或专用的 setter 和 getter 方法,而是尝试使用您的界面提供任何链接到您的类的逻辑。
即 vector 的长度在逻辑上与 vector 本身相关联,因此您不想为程序的其余部分提供任何直接或间接访问数据的便利,而是将长度作为接口(interface)的一部分提供。
class v2d
{
double mx, my;
public:
double get_x() const { return mx; }
double get_y() const { return my; }
};
bool foo (v2d const &v)
{
using std::sqrt;
return sqrt(v.get_x()*v.get_x() + v.get_y()*v.get_y()) > 1.0;
}
class v2d
{
double mx, my;
public:
double len () const
{
using std::sqrt;
return sqrt(mx*mx + my*my);
}
};
void foo (v2d const &v)
{
return v.len() > 1.0;
}
使用第二个,您可以自由更改数据成员(即用一个 double m[2];
... 替换两者)。
setter 也是如此:提供类更改逻辑作为有意义的接口(interface)的一部分。
class v2d
{
double mx, my;
public:
void set_x(double new_x) { mx = new_x; }
void set_y(double new_y) { my = new_y; }
double get_x() const { return mx; }
double get_y() const { return my; }
};
void normalize (v2d &v)
{
using std::sqrt;
double const len = sqrt(v.get_x()*v.get_x() + v.get_y()*v.get_y());
v.set_x(v.get_x()/len);
v.set_y(v.get_y()/len);
}
class v2d
{
double mx, my;
public:
double len () const
{
using std::sqrt;
return sqrt(mx*mx + my*my);
}
v2d& operator/= (double const factor)
{
mx /= factor;
my /= factor;
return *this;
}
};
void normalize (v2d &v)
{
v /= v.len();
}
关于c++ - 公共(public)全局变量或 get() 和 set() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30210402/