关于介绍C++接口的文章的问题

And*_*ndy 6 c++ interface class

我一直在阅读一篇关于C++接口的文章(http://accu.org/index.php/journals/233),我完全迷失了它应该将所有虚拟成员函数都设为私有的部分(标题为"加强分离").对我来说根本没有意义.

据作者说,代码是这样的:

class shape {
public:
  virtual ~shape();
  virtual void move_x(distance x) = 0;
  virtual void move_y(distance y) = 0;
  virtual void rotate(angle rotation) = 0;
  //...
};

class line : public shape {
public:
  line(point end_point_1, point end_point_2);
  //...
private:
  virtual ~line();
  virtual void move_x(distance x);
  virtual void move_y(distance y);
  virtual void rotate(angle rotation);
  //...
};
Run Code Online (Sandbox Code Playgroud)

所以我们有一个纯粹的虚函数,它是公共的,它的实现(在行类中)是私有的.

谁能解释一下如何调用move_x函数?它的访问说明符是私有的,如果我尝试这样做会导致错误:

line my_line(point(0,0), point(1,2));
my_line.move_x(-1); // does not compile
Run Code Online (Sandbox Code Playgroud)

同样,说绘图界面(参见本文前面部分)也无法访问这些函数是正确的吗?

谢谢.

Dan*_*ker 6

这个想法是你通过引用或指针使用这些方法shape.

shape &s = my_line;
s.move_x(-1);
Run Code Online (Sandbox Code Playgroud)

这可以通过"仅披露你需要的东西"或作为一种自我记录的形式来证明.它证明了这些方法只是以预期的方式调用.

  • 强制程序员(你自己)只使用接口被认为是更好的编程习惯. (3认同)