在c ++中交织两个类是不好的做法?

时间:2016-12-15 11:42:21

标签: c++

我举了以下例子来说明我的问题:

class B;
class A
{
 public:


   class B *pB;

};

class B
{
  public:

     void perform(A &obj)
     {

     }
};

在上面两节课中。类A有一个指向类B的指针。类B有一个可以在类A对象上工作的函数。虽然它可以编译,但我想知道这是不是一个很好的做法来设计两个类,因为它们交织在一起。如果这是一个糟糕的设计,你有什么想法可以避免吗?谢谢。

1 个答案:

答案 0 :(得分:3)

让两个具体的课程直接相互依赖会让你陷入困境。

“编程到界面”通常更好。 在“程序到界面,而不是实现”的标题下进行了长时间的讨论here,其中提出了为什么解耦事项

在您的示例中,void perform(A &obj)可以取一个A派生自的抽象基类。可能值得拥有一个A在其成员变量中使用的接口,但在您的示例中没有建议的用法继续使用。

为什么这“更好”?对于初学者来说,它会让你想到封闭 - 以及接口应该暴露的具体内容。

它还允许您使用该类的不同的实例,例如用于测试目的。

如果使用界面,可以单独更改conrete类......有很多优点。