【发布时间】:2013-12-29 08:57:59
【问题描述】:
我有一个基类Student,和一个继承类StudentAtA。
我在StudentAtA.h 中定义了StudentAtA,它覆盖了Student 的一些方法。
例如,如果Student 有:
string returnUni()
{
return NULL;
};
然后我在StudentAtA.h 内部定义一个覆盖方法:
string returnUni()
{
return "A";
};
由于StudentAtA中的所有方法都很短,所以都在头文件中实现(我没有创建StudentAtA.cpp文件)。
现在我有一个Driver.cpp 文件,它使用StudentAtA,并包含一个主函数。这是执行者。
是否可以在没有StudentAtA.cpp 的情况下编译Driver(仅使用标头)?
【问题讨论】:
-
只要您的编译器可以找到您的方法的定义,它就很高兴。但是不建议将方法体放在头文件中。
-
即使方法是 1-2 行长? (我是 c\c++ 新手,不熟悉标准)
-
是的,即便如此:stackoverflow.com/a/4955288/3060253这家伙总结了原因
-
@Glandy 幸运的是,该链接背后的讨论比您的摘要更平衡。头文件中的方法体并没有绝对的问题,它是在更紧密的耦合和为编译器提供更多优化选项之间取得平衡。显然,上面列出的方法应该是
virtual,在这种情况下,可能没有理由将它放在标头中,因为它几乎不适合内联。
标签: c++ header compilation