2

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

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

由于没有其他公共方法或成员,创建头文件有意义吗?这可以节省编译时间还是有其他方法可以做到这一点?

4

5 回答 5

2

如果你有很多派生类Component,你可以把它放在一个单独的头文件中:IComponent.h. I表示接口,它是 C++ 中的抽象类。这使得代码结构非常清晰。

您的代码具有 UB,因为您尚未virtual destructor为抽象类定义:

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

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

同样正如@Griwes 指出的那样,只需使用构造函数来初始化成员,不需要有多余的virtual Init功能。

于 2013-01-21T23:05:09.103 回答
2

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

于 2013-01-21T23:07:42.157 回答
1

不,不需要编写头文件。

于 2013-01-21T23:03:11.897 回答
1

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

我不会担心编译时间,除非您运行在 10 年以上的机器上。现代机器很好地缓存磁盘读取,您很可能会包含几兆字节的其他头文件。

但是,如果您想在其他项目中“重用”您的课程,那么您现在已经很难做到了。

于 2013-01-21T23:03:26.920 回答
0

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

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

于 2013-01-21T23:04:10.163 回答