社区
C++ 语言
帖子详情
类的数据和函数成员分别定义放在头文件和cpp中,为何引用时只包含头文件就行?
bjwqt
2009-09-17 08:23:24
类的数据和函数成员分别定义放在头文件和cpp中,为何引用时只包含头文件就行?
根据类的接口与类的实现分开的原则,一般将类的数据成员放在头文件中,将所有的函数定义都放在cpp文件中,
然后程序中要定义这个类的对象时,#include一下头文件就行了,但是我不明白,编译器如何去自动找到类的成员函数的定义呢?因为没有代码指定这个类的函数代码放在哪个cpp文件中呀?
...全文
251
7
打赏
收藏
类的数据和函数成员分别定义放在头文件和cpp中,为何引用时只包含头文件就行?
类的数据和函数成员分别定义放在头文件和cpp中,为何引用时只包含头文件就行? 根据类的接口与类的实现分开的原则,一般将类的数据成员放在头文件中,将所有的函数定义都放在cpp文件中, 然后程序中要定义这个类的对象时,#include一下头文件就行了,但是我不明白,编译器如何去自动找到类的成员函数的定义呢?因为没有代码指定这个类的函数代码放在哪个cpp文件中呀?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
周成风
2009-09-17
打赏
举报
回复
编译的时候有头文件就可以了,只需要知道函数的定义。一个CPP文件编译生成.obj文件,然后链接器会把所有的.obj整合,外加资源文件最后生成exe文件。
killbug2004
2009-09-17
打赏
举报
回复
就像函数一样有前置声明一样,有头文件声明那么在编译的时候,就会在符号表中查找得到,编译期间各个模块是分开编译的,各个模块的符号,引用的类型等等元素能在符号表中找到,就说明是有效的,就可以编译通过,到了链接才会将各个模块链接到一起,这个时候才会处理代码间调用关联等关系,如果某个类你写了头文件,没有实现或者没有包含导出类的lib,就会在链接的时候出现错误,比如找不到某个函数的实现等等
学过编译原理会比较清楚 我没学过,只是个人的理解,描述不准确
brookmill
2009-09-17
打赏
举报
回复
[Quote=引用 3 楼 bjwqt 的回复:]
一个cpp就对应一个obj,编译器要寻找所有的obj吗?
[/Quote]
对。
即使在某个obj里找到了,也要再看看其它的obj里还有没有,防止重复定义。
具体范围在windows里一般是用建立工程来控制的。linux用Makefile
bjwqt
2009-09-17
打赏
举报
回复
一个cpp就对应一个obj,编译器要寻找所有的obj吗?
brookmill
2009-09-17
打赏
举报
回复
准确地说,是到所有目标文件里去找成员函数的实现。目标文件是从cpp文件编译得到的。
brookmill
2009-09-17
打赏
举报
回复
编译器会到工程里的所有cpp文件里去找定义。
bjwqt
2009-09-17
打赏
举报
回复
up
类
为什么
放在
头文件
里不行
在C++编程
中
,
类
(class)是
定义
对象结构和行为的基本单元,它通常被
放在
头文件
(.h或.hpp)
中
,以便于其他源文件(.
cpp
或.cc)进行
包含
和使用。然而,有
时
将
类
的
定义
全部
放在
头文件
中
可能会导致一些问题,这正是...
C++的
头文件
和实现文件分别写什么
头文件
头文件
的所有内容,都必须
包含
在 `#ifndef {Filename} #define {Filename} // {Content of head file} #endif` 这样才能保证
头文件
被多个其他文件
引用
(include)
时
,内部的
数据
不会被多次
定义
而造成错误。...
推荐下载C- c++-
头文件
中
的静态
函数
,是什么意思?.pdf
- **可维护性差**:将
函数
定义
放在
头文件
中
使得代码更难以管理和维护,因为修改
头文件
会影响所有
包含
它的源文件。 - **性能影响**:由于每个源文件都有
函数
副本,这意味着有更多的代码需要加载到内存
中
,可能对程序...
C语言基础-源文件与
头文件
详解
其他源代码文件可以通过
包含
(include)
头文件
来访问其
中
声明的
函数
和变量,从而可以在自己的代码
中
使用这些
函数
和变量,而无需重新编写它们的
定义
。思考:
头文件
里面可以
定义
函数
吗?答案:在
头文件
中
,可以对
函数
...
源文件与
头文件
的关系
* 它是一个
包含
在一个
类
定义
之内的静态
类
数据
成员
的声明,它必须在最终程序的某处准确的
定义
一次 * 它是一个
类
名声明,如 class test; * 它是一个 typedef 声明。 反之,一个
定义
就是一个声明,除非: * 它
定义
的...
C++ 语言
65,206
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章