我注意到我能够在使用g ++的父类之前编译子类。是否需要按照特定顺序进行编译,并考虑依赖性?
答案 0 :(得分:12)
链接订单可以重要;编译顺序没有。
答案 1 :(得分:5)
简而言之:不!
每个C ++编译单元(C ++源文件)都是独立编译的。类继承等在运行时设置。这就是为什么你可以在单独维护的库中拥有基类,只要API和ABI保持兼容,就可以在不强制后续类重新编译的情况下更新基类。
答案 2 :(得分:1)
一般来说,没有。编译器将创建表示它无法识别但可以安全忽略的任何符号,并且链接将这些符号转换为正确的代码。在您的情况下,标题告诉编译器编译子类需要知道的所有内容,因此具体可以等待。
答案 3 :(得分:0)
为了扩展ildjarn的答案,编译子类的实现只需要父类的API /契约,而不是它的实现。这将存在于Parent.h
这样的文件中,该文件将包含在包含子项实现的文件中。
答案 4 :(得分:0)
...我能够在父类之前编译子类......
“编译”不是一个严格定义的术语,所以在这里你的意思并不清楚。但总的来说,不,你不能在父类之前编译子类。在C ++中,父类型必须是完整,然后才能将其用作任何其他子类类型的基类。你要么被误解了,要么给“编译”一词带来一些非正统的含义。