C++调用类头文件为什么只需要include声明部分而不需要类的定义部分
如题:比如C++中新建一个r.h的头文件,并在头文件中声明了一个类,然后添加一个源文件r.cpp来定义这个类,定义中使用#include"r.h";然后再建一个m.cpp...
如题 :
比如C++中新建一个r.h的头文件 ,并在头文件中声明了一个类,
然后添加一个源文件r.cpp来定义这个类,定义中使用#include"r.h";
然后再建一个m.cpp中实现主函数,使用#include “r.h”,就能运行得到结果。
但是问题是如果使用#include“r.cpp”就会报错。
不能理解,为啥m.cpp中没有#include"r.cpp",却调用了它,这是怎样实现的? 展开
比如C++中新建一个r.h的头文件 ,并在头文件中声明了一个类,
然后添加一个源文件r.cpp来定义这个类,定义中使用#include"r.h";
然后再建一个m.cpp中实现主函数,使用#include “r.h”,就能运行得到结果。
但是问题是如果使用#include“r.cpp”就会报错。
不能理解,为啥m.cpp中没有#include"r.cpp",却调用了它,这是怎样实现的? 展开
5个回答
2013-09-13
展开全部
你这个问题问得好。
这牵扯到C++语言从编写-->执行整个过程。一般来讲,开发一个C++程序需要经过以下几步
1. 编写代码,
2. 编译器进行编译,compile
3. 编译器进行连接。
4. 执行。
由于C++语言支持多文件工程。需要经过编译和连接的过程。
打个比方,你要建造一架飞机,需要发动机,机翼,机身,尾翼,起落架。你可以把这几个部分交给专门的厂商去制作,这就是编译过程。这么多零件交给你,你只需要组装起来就可以了,这就是连接过程。
编译器(比如VC)就是加工零件的工厂,通过编译器的源代码会变成目标文件,也就是零件,VC生成的是.obj文件。
连接器(比如VC下的link)就是组装工厂,它能把所有的零件组装成你需要的东西。
好了,搞懂了编译器和连接器,我们再来看头文件.h和实现文件.cpp的作用。
还是拿飞机举例子。机身和机翼是必须连接起来的,但是他们之间怎么连接呢?制作机翼的只会做机翼,制作机身的也只会制作机身。那么作为组装工厂的你就会提供给他们一份飞机的接口设计图,图纸里面详细描述了机翼和机身怎么连接,但并不描述机翼和机身应该怎么去制作。那些零件工厂拿到结构图纸以后,就知道了,原来机翼是被安放在机身的这个地方,嗯,而且规定了用铆钉(打个比方)连接。好了,我知道了。可以做了,作为机翼制造商,我不用关心机身是怎么做的,我只关心机翼的制作和与机身的接口。换到C++这边来,这个用来描述接口的设计图就是.h文件,也就是头文件。具体机翼的实现也就相当于.cpp文件了。
所以,在程序中只需要应用头文件,也就是只需要知道接口的设计图。等你根据接口设计图设计好了零件,交给组装工厂,组装工厂(也就是连接器)会把所有的零件(编译器编译.cpp生成的.obj)连接起来,这样飞机就可以翱翔天空了。
这牵扯到C++语言从编写-->执行整个过程。一般来讲,开发一个C++程序需要经过以下几步
1. 编写代码,
2. 编译器进行编译,compile
3. 编译器进行连接。
4. 执行。
由于C++语言支持多文件工程。需要经过编译和连接的过程。
打个比方,你要建造一架飞机,需要发动机,机翼,机身,尾翼,起落架。你可以把这几个部分交给专门的厂商去制作,这就是编译过程。这么多零件交给你,你只需要组装起来就可以了,这就是连接过程。
编译器(比如VC)就是加工零件的工厂,通过编译器的源代码会变成目标文件,也就是零件,VC生成的是.obj文件。
连接器(比如VC下的link)就是组装工厂,它能把所有的零件组装成你需要的东西。
好了,搞懂了编译器和连接器,我们再来看头文件.h和实现文件.cpp的作用。
还是拿飞机举例子。机身和机翼是必须连接起来的,但是他们之间怎么连接呢?制作机翼的只会做机翼,制作机身的也只会制作机身。那么作为组装工厂的你就会提供给他们一份飞机的接口设计图,图纸里面详细描述了机翼和机身怎么连接,但并不描述机翼和机身应该怎么去制作。那些零件工厂拿到结构图纸以后,就知道了,原来机翼是被安放在机身的这个地方,嗯,而且规定了用铆钉(打个比方)连接。好了,我知道了。可以做了,作为机翼制造商,我不用关心机身是怎么做的,我只关心机翼的制作和与机身的接口。换到C++这边来,这个用来描述接口的设计图就是.h文件,也就是头文件。具体机翼的实现也就相当于.cpp文件了。
所以,在程序中只需要应用头文件,也就是只需要知道接口的设计图。等你根据接口设计图设计好了零件,交给组装工厂,组装工厂(也就是连接器)会把所有的零件(编译器编译.cpp生成的.obj)连接起来,这样飞机就可以翱翔天空了。
2013-09-13
展开全部
只能引用头文件,也就是.h文件,这是C++的规定。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
连接器会自动把它们连接到一起,不需要我们自己做这些
#inclucd
"r.cpp"出错,是因为没有类的定义或出现重复的定义,强烈建议不要这样做
#inclucd
"r.cpp"出错,是因为没有类的定义或出现重复的定义,强烈建议不要这样做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>是引入C的库函数,就比如写一个HelloWorld,仅仅凭我们写的这一句是不可能让计算计算机输出的,还需要要到C的库函数,通俗讲就是C为我们提供了很多已经实现好了的库文件,我们只需要引述使用就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-13
展开全部
#include 后面接头文件名,#include“r.cpp”这样是会报错的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询