c++ - 公共(public)全局变量或 get() 和 set() 方法?

标签 c++

<分区>

访问和修改其他类中特定类的变量的更好方法是什么?使用公共(public)全局变量还是使用 get() 和 set()?

最佳答案

不要使用公共(public)成员或专用的 setter 和 getter 方法,而是尝试使用您的界面提供任何链接到您的类的逻辑。

即 vector 的长度在逻辑上与 vector 本身相关联,因此您不想为程序的其余部分提供任何直接或间接访问数据的便利,而是将长度作为接口(interface)的一部分提供。

setter/getter 示例:

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;
}

示例长度接口(interface):

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)的一部分。

示例 getter 和 setter:

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);
}

有意义的接口(interface)示例:

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/

相关文章:

c++ - 确定阈值参数的正确方法

C++:这种编译时多态性技术如何称呼?有什么优点和缺点?

C++ 角度、三角学

c++ - 什么是表示图像矩阵的理想数据结构?

c++ - 在 C++ 中打印到控制台而不会泛滥

c++ - 复制字符串中指针的控件

c++ - 这个转换是什么意思?

c++ - 复制分配构造函数中的 aligned_alloc 内存块在释放时崩溃

c++ - Error 21 error LNK2019 : unresolved external symbol:. ...在函数:.中引用...

c++ - 确保所有构造函数调用相同的函数 c++,设计模式