一个关于C++编译及连接阶段的问题。

来源:百度知道 编辑:UC知道 时间:2024/06/15 07:40:36
设有三个C++文件分别是:
student.h //student类头文件,声明类及其成员;
studnet.cpp //student类源文件,定义成员函数;
main.cpp //主程序,需要调用student.h

那么,头文件包含的规则,按《C++程序设计》(谭浩强著,p251),应有如下包含规则:

student.h中不需包含student.cpp
student.cpp中必须包含student.h
main.cpp中必须包含student.h

我的疑问是:
student.h和main.cpp中都没有student.cpp,而只有student.cpp中才有具体的实现代码。那么在类的成员函数进行具体操作的时候,比如main正在调用某个student对象的成员函数时,编译器或者连接器是如何知道该成员函数操作的细节的呢?
空口无凭,以书为证。请说明参考资料。

编译器在链接时会查找工程中所有的cpp把.h里声明的symbol与编译后相关代码对应起来。 如果.h声明的函数体没有实现是通不过链接的。
具体查找方法应该是通过声明;因为声明和定义的表达是一样的。

你要是不信就自己去查吧

main正在调用某个student对象的成员函数时,连接器通过查找
studnet.cpp中的具体函数然后执行 实现的。