我的应用程序由几个组件组成,继承自一个抽象基类。除了每个组件覆盖的两个成员函数之外,没有任何组件有任何公共声明。
class Component()
{
public:
virtual void Init() = 0;
virtual void Update() = 0;
};
由于没有其他公共方法或成员,创建头文件有意义吗?这可以节省编译时间还是有其他方法可以做到这一点?
我的应用程序由几个组件组成,继承自一个抽象基类。除了每个组件覆盖的两个成员函数之外,没有任何组件有任何公共声明。
class Component()
{
public:
virtual void Init() = 0;
virtual void Update() = 0;
};
由于没有其他公共方法或成员,创建头文件有意义吗?这可以节省编译时间还是有其他方法可以做到这一点?
如果你有很多派生类Component
,你可以把它放在一个单独的头文件中:IComponent.h
. I
表示接口,它是 C++ 中的抽象类。这使得代码结构非常清晰。
您的代码具有 UB,因为您尚未virtual destructor
为抽象类定义:
class Component()
{
public:
virtual ~Component();
virtual void Update() = 0;
};
如果通过指向基的指针删除派生类型的对象,则会得到未定义的行为。
同样正如@Griwes 指出的那样,只需使用构造函数来初始化成员,不需要有多余的virtual Init
功能。
如果您不在单个 CPP 文件之外使用该类,则不需要标头。否则,您可以避免编写头文件,风险自负:潜在的损失(基类的不一致重新声明)远远超过潜在的胜利(加快编译时间)。整个项目的可读性也会受到影响 - 您项目的其他读者会期望在那里看到一个标题,并且会惊讶地看到不同文件中的多个副本。
不,不需要编写头文件。
这完全取决于您如何使用课程。如果您仅在一个源文件中使用派生类,则没有特别的理由使用头文件。
我不会担心编译时间,除非您运行在 10 年以上的机器上。现代机器很好地缓存磁盘读取,您很可能会包含几兆字节的其他头文件。
但是,如果您想在其他项目中“重用”您的课程,那么您现在已经很难做到了。
创建标头通常是一个好主意,即使对于性能提升不会很显着的小程序也是如此。这是您应该养成的良好编码习惯!:)