在 c++ 中放置接口类的位置
Where to put an interface class in c++
我是 c++ 编程的新手,很难组织我的项目。我有一个名为 StateManager 的类,它有一个头文件和一个 cpp 文件。cpp 包含所有实现。
如果我现在想创建一个接口类:
class IStateManager
{
public:
virtual ~IStateManager() {}
virtual void SomeMethod {}
};
我知道接口并不像在 c# 或 Java 中那样真正存在,但我希望从这个"接口"继承多个类。
此类是否还需要标头和 cpp 文件?或者我可以把它放在头文件中吗?
从技术上讲,c ++没有接口。但是,可以通过多重继承(如果您的类是"基"类并且不需要从多个类继承,则可以使用单个继承)来"创建"接口。您的"界面"位于何处完全取决于您。但是如果你打算使用一个类作为接口(没有任何实际的实现,因为从技术上讲,在子类中定义函数之前,接口没有实现),我会把它放在它自己的头文件中,并声明每个函数都是纯虚拟的:
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
//..
};
如果你在IStateManager
类的.cpp中定义一些实现,那么你实际上有更多的抽象类而不是接口。
所以总而言之,我要说的是:任何"接口"的实现都应该在其实现类的.cpp文件中定义。如果您打算在多个文件中使用该界面,我会为其创建一个单独的 .h 文件。
您可以将类方法的实现放在头文件中。 这并不意味着你应该这样做。 它也与你所说的"接口"类这一事实无关。
顺便说一下,我不会称其为接口类,因为您的virtual
方法不是纯粹的。
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- Visual C++GC接口如何启用它以及要包含哪个库
- 无法获取webot::PositionSensor对象中位置传感器的值
- Windows.h与GLFW.h的接口
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 提供与TMP和SFINAE的通用接口
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为重写std::exception的库生成swig接口时出错
- 在 c++ 中放置接口类的位置