c++ - 在 C++ 中放置接口(interface)类的位置

标签 c++

我是 C++ 编程的新手,很难组织我的项目。 我有一个名为 StateManager 的类,它有一个头文件和一个 cpp 文件。 cpp 包含所有实现。

如果我现在想创建一个接口(interface)类:

class IStateManager
{
    public:
        virtual ~IStateManager() {}   
        virtual void SomeMethod {}
};

我知道接口(interface)并不像在 C# 或 Java 中那样真正存在,但我希望多个类继承自这个“接口(interface)”。

这个类还需要头文件和cpp文件吗?或者我可以将它放在头文件中吗?

最佳答案

技术上,c++ 没有接口(interface)。但是,可以通过多重继承(或单继承,如果您的类是“基”类并且不需要从多个类继承)来“创建”接口(interface)。您的“界面”所在的位置完全取决于您。但是如果你计划使用一个类作为一个接口(interface)(没有任何实际的实现,因为技术上一个接口(interface)在子类中定义函数之前没有实现),我会把它放在它自己的头文件并声明每个函数纯虚拟:

class IStateManager
{
    public:
        virtual ~IStateManager() {}
        virtual void SomeMethod() = 0;
        virtual void AnotherMethod() = 0;
};

class TheState : public IStateManager, public SomeOtherParentClass
{
    virtual void SomeMethod(); // Defined in this class
    virtual void AnotherMethod(); // Also defined in this class
    //..
};

如果您在 .cpp 中为 IStateManager 类定义一些实现,那么您实际上拥有更多抽象类而不是接口(interface)。

总而言之,我要说的是:“接口(interface)” 的任何实现都应该在其实现类的 .cpp 文件中定义。如果您计划在多个文件中使用该接口(interface),我会为其创建一个单独的 .h 文件。

关于c++ - 在 C++ 中放置接口(interface)类的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118862/

相关文章:

c++ - OpenCV2.1.0无法运行FAST功能

C++ - 是否值得在 Windows 上使用 GCC 而不是 MSVC?

c++ - 多种类型的类模板特化

c++ - 使用MFC编写的Windows程序是C++程序吗?

c++ - 为什么在 C++ 中返回 `int` 的函数即使我没有包含 return 语句也会编译?

c++ - C++ 中奇怪的方括号表示法,看起来有点像 for each 循环

c# - QT QTcpSocket 没有收到任何数据

c++ - 关于QList类型实例的复制构造函数的奇怪问题

c++ - Windows 中 boost::serialization 的未知异常

c++ - 什么是 undefined reference /未解析的外部符号错误,我该如何解决?