如何在C++中定义接口?

Jos*_*ver 3 c++ oop

我正在研究一个C++类,它提供了用于网络的BSD套接字的抽象.我想定义一个ISocketCSocket和实现的接口MockSocket(后者用于单元测试).我知道我需要定义我希望实现类提供为纯虚拟的方法,即

class ISocket {
public:
  virtual int Socket(int domain, int type, int protocol) = 0;
};
Run Code Online (Sandbox Code Playgroud)

我担心的是是否ISocket可以实例化一类类型.我的直觉告诉我,任何具有至少一个纯虚方法的类都是一个抽象类(即接口)并且无法实例化,但我心里有一种琐碎的担心,我需要对自动生成做一些事情. C++编译器将提供的构造函数和析构函数(当你记住你在其中读到的所有东西时,有效的C++既是礼物也是诅咒 - 当你不记得时).

我是否正确地执行此操作,或者是否有最佳实践来定义C++中我不遵循的接口?

Oli*_*rth 7

一般来说,你应该声明一个virtual析构函数; 否则,如果尝试delete在指向接口的指针上调用,则会进入未定义的行为.构造函数没有这样的问题.

哦,你是正确的,不可能用纯虚拟实例化一个类的对象.