抽象类 - 在C++实践中隐藏实现

Ano*_*nym 6 c++ oop

最近我一直在编写类似这样的代码:

messagehandler.h:

#include "message.h"
class MessageHandler {
public:
   virtual ~MessageHandler() {}
   virtual void HandleMessage(Message *msg) = 0:
};
Run Code Online (Sandbox Code Playgroud)

persistmessagehandler.h:

MessageHandler *CreatePersistMessageHandler();
Run Code Online (Sandbox Code Playgroud)

persistmessagehandler.cpp:

#include "messagehandler.h"
#include "persist.h"

class PersistMessageHandler : public MessageHandler {
private:
   PersistHandle ph;
   size_t count;
   InternalCheck();
public:
   PersistMessageHandler(int someParam);
   virtual ~PersistMessageHandler ();
   virtual void HandleMessage(Message *msg):
};
PersistMessageHandler::PersistMessageHandler(int someParam)
{
  ph.Initialize();
}
... rest of implementation.

MessageHandler *CreatePersistMessageHandler(int someParam)
{
  return new PersistMessageHandler(someParam);
}
Run Code Online (Sandbox Code Playgroud)

这里的原因是隐藏PersistMessageHandler.客户端不需要包含PersistMessageHandler类的头,包含实现可能需要的所有包含和类型,以及更清晰地分离接口和实现..无论如何它总是会被动态分配,

所有PersistMessageHandler用户只需调用CreatePersistMessageHandler(..); 直接或间接从工厂获得一个.

但.我没有看到这种方法在其他地方使用得太多.以上是好的做法吗?对于简单的案例,还有其他/更好的选择吗?

Myk*_*yev 6

你总是要尽可能地隐藏起来.你的方式(将实现类放入.cpp)是在c ++中执行此操作的常用方法.