在这种情况下,我应该使用头文件吗?

Should I use header files in this specific situation?

本文关键字:文件 这种情况下 我应该      更新时间:2023-10-16

我的应用程序由几个继承了抽象基类的组件组成。除了每个组件覆盖的这两个成员函数之外,没有组件有任何公共声明。

class Component()
{
public:
    virtual void Init() = 0;
    virtual void Update() = 0;
};

既然没有其他公共方法或成员,创建头文件有意义吗?这样可以节省编译时间吗?还是有其他方法?

如果不在单个CPP文件之外使用该类,则不需要头文件。否则,您可以在自己承担风险的情况下避免编写头文件:潜在的损失(基类不一致的重新声明)远远超过潜在的收益(加快编译时间)。整个项目的可读性也会受到影响——项目的其他读者会期望在那里看到一个头文件,并且会惊讶地看到不同文件中的多个副本。

如果您有许多从Component派生的派生类,您可以将其放在单独的头文件:IComponent.h中。I表示接口,是c++中的抽象类。这使得代码结构非常清晰。

你的代码有UB,因为你没有为抽象类定义virtual destructor:

class Component()
{
public:
    virtual ~Component();      
    virtual void Update() = 0;
};

如果通过指向基类的指针删除派生类型的对象,将得到未定义的行为。

也正如@Griwes指出的,只需使用构造函数初始化成员,不需要有多余的virtual Init函数

不需要写头文件

这完全取决于你如何使用这个类。如果您只在一个源文件中使用派生类,则没有特别的理由使用头文件。

我不会担心编译时间,除非你运行的机器已经超过10年了。现代机器的缓存磁盘读起来非常好,你很可能会包含几个兆字节的其他头文件。

但是,如果您想在其他项目中"重用"您的类,那么现在就很难做到了。

创建头文件通常是一个好主意,即使对于性能提升并不显著的小程序也是如此。这是一个很好的编码习惯,你应该养成!:)

http://www.cplusplus.com/forum/articles/10627/