A. 在VC++中头文件中的.h和.cp有着什么样的联系.(.h和.cpp前同名)
楼上把基本的东东说完了,我给你讲点儿编译器的知识吧
.h叫做头文件,它是不能被编译的。“#include”叫做编译预处理指令,可以简单理解成,在1.cpp中的#include"1.h"指令把1.h中的代码在编译前添加到了1.cpp的头部。每个.cpp文件会被编译,生成一个.obj文件,然后所有的.obj文件链接起来你的可执行程序就算生成了。
发现了没有,你要在.h文件中严格区分声明语句和定义语句。好的习惯是,头文件中应只处理常量、变量、函数以及类等等等等的声明,变量的定义和函数的实现等等等等都应该在源文件.cpp中进行。
至于.h和.cpp具有同样的主文件名的情况呢,对编译器来讲是没有什么意义的,编译器不会去匹配二者的主文件名,相反它很傻,只认#include等语句。但是这样写是一种约定俗成的编程风格,跟楼上说的差不多,一个类的名字作为其头文件和源文件的主文件名比如Class1.h和Class1.cpp,这个类的声明在Class1.h中,实现在Class1.cpp中,我们人类看起来比较整齐,读起来方便,也很有利于模块化和源代码的重用。
为什么这个风格会约定俗成?有一句着名的话,叫“程序是为程序员写的”。
B. 请问C++中同名的*.h,*.cpp以及类*文件三者之间的关系请详细一点,或者哪里有较详细的介绍。 谢谢。
.h表示的是头告哪文件,表示你要编译这个程序,做先期的一些准备工扰友晌作。
.cpp表示的是源文缓锋件,也就是你的源代码
类文件,当然是源码了。
C. c++中xx.h和xx.cpp之间有什么联系
是可以全部写在*.cpp文件的。但从编程习惯或者说是编程规范来说,还是应该分开的。不是很严格的讲,*.h文件禅凳做的是类的声明,包括类成员的定义和函数的声明,而*.cpp文件做的类成员函数的具体实现(定义)。一个*.h文件和*.cpp文件一般是配对的。在*.cpp文件的第一行一般也是#include"*.h"文件,其实也相当于把*.h文件里的东西复制到*.cpp文件的开头。所以,你全部写在*.cpp文件其实也启汪是一样的。除了编程规范外,还涉及到类一个重要性质,就是封装性。比如现在我们公司和另一家软件公司合作,这样就必然要互相提供一些软件的信息(比如一些类,它到底是要做什么的),可是在提供这些信息的同时我们又不像让对方知道我们这些类的具体实现,毕竟这些是我们公司的算法核心和心血啊。所以这个时候就可以把类的接口(这个类是要做什么的)放在*.h文件中,悄袭仔而具体类的实现放在 *.cpp文件。这时候我们只要给对方公司*.h文件就行了。这样既提供了必要的信息,又保护了我们的核心代码。建议按照*.h *.cpp配对分开写,平时可以去网上下些C++的工程源代码文件,多看看别人为什么这样分开,加上自己多这样实践,慢慢地,你会体会到这样写的好处的。打得好累,望采纳,也祝你进步!^-^
D. C++编头文件的时候后缀是.cpp和.h有什么区别
本质上是没有什么区别的,.h文件实现的功能是声明本文件或.cpp文件中需要被别人使用或知道的变量、类型、函数及宏定义等。.h文件就像是一个接口,具体的实现可以在.cpp中也可以搏销在.h中。.cpp中的函数或变量即便是全局的,在没有其他.cpp文件使用的情况下,也可以不写在.h中。一般的数据,数基滑游据结构,接口,还有类的定义放在.h文件中,可以叫他们头文件,可以#include 到别的文件中。功能实现一般都放在具体的.cpp文件中,这样方便文件管理,节约时间,提高效率。你完全可以把功能实现一并放在.h文件中,也可以#include一个.cpp文件到另一个源文件中,这样编译可以通过,但不方便查看与管理,程序(或项目)让迹稍微大点,容易造成混乱。不过编译器编译的都是cpp文件。其实最简单的理解就是.h是头文件,里面一般都是一些函数定义类型定义,不会有运行的代码,cpp是源文件,是用来运行的,在cpp中加上#inlcude<>导入.h文件。
说了一堆,你不会觉的.h没什么作用吧…….h的作用体现在当多个cpp文件需要同一份变量、类型、函数或宏定义之类的话,我们不需要在这些cpp文件中一一声明,只需要在.h文件中声明,然后在这些cpp文件中把这个.h文件包含进去就OK了,对于简短的小程序,.h往往显得多余,因为.h文件重复使用的次数,还不如放在cpp文件中方便。但对于较大的程序来说,使用.h是非常方便的!
表达能力有限,不懂再问……
E. VC那么多CPP H 是怎么组成一个完整的程序,为什么要分开呢 ,分开之后又是怎样连在一起的
通常情况下,你可以理解一个cpp和h就是一个类,h文件是这个类需要暴露给外部的接口,cpp是这个类的实现。
一个程序的实现可能需要很多类,如果实现类很简单很小还容易处理,如果很复杂的话,建议是独立出来做成单独的cpp和h文件,其它地方需要使用这个类的,就包含这个类的接口,也就是h文件高唤。
独立的实现和接口的提供对于软件封装正戚稿凯交性和独立的测试以敬山及类的修改和更新都有很大好处。
F. .h 和.cpp的区别
一、用法不同
1、.h文件直接#include到需要的.cpp文件里,就相当于把.h文件的代码拷贝到.cpp文件
2、.cpp文件需要先自己生成.o文件,把厅宏不同.o文件连派闷接生成可执行文件。
比如有3个cpp文件:a.cpp、b.cpp、c.cpp,其中一个包含main()函数,需要生成test程序,
步骤:
(1)生成3个.o文件:
cc -c a.cpp
cc -c b.cpp
cc -c c.cpp
这样就得到3个.o文件:a.o、b.o、c.o
(2)链接生成test程序:cc -o testa.o b.o c.o
就得到test可执行程序,输入./test就可执行程序了。
二、规范不同
1、h文件一般包含类声明;
2、cpp文件一般为同名h文件定义所声明的类函数。
说明:一般可在cpp文件直接添加main()就可以测试该模块功能。
(6)h与cpp的编译原理扩展阅读:
放在.h里的数学计算公式:
1、 三角函数
double sin(double);正弦
double cos(double);余弦
double tan(double);正切
2 、反三角函数
double asin (double); 结果介于[-PI/2,PI/2]
double acos (double); 结果介于[0,PI]
double atan (double); 反正切(主值),结果介于[-PI/2,PI/2]
double atan2 (double,double); 反正切(整圆值),结果介于[-PI,PI]
3 、双曲三角函数
double sinh (double);
double cosh (double);
double tanh (double);
4 、指数与对数
double frexp(double value,int *exp);这是一个将value值拆分成小数部分f和(以2为底的)指数部分exp,并返回小数部分f,即f*2^exp。其中f取值在0.5~1.0范围或者0。
double ldexp(double x,int exp);这个函数刚好跟上面那个frexp函数功能相反,它的返回值是x*2^exp
double modf(double value,double *iptr);拆分value值,返回它的小数部分,iptr指向整数扮羡册部分。
double log (double); 以e为底的对数
double log10 (double);以10为底的对数
double pow(double x,double y);计算x的y次幂
float powf(float x,float y); 功能与pow一致,只是输入与输出皆为单精度浮点数
double exp (double);求取自然数e的幂
double sqrt (double);开平方根
5 、取整
double ceil (double); 取上整,返回不比x小的最小整数
double floor (double); 取下整,返回不比x大的最大整数,即高斯函数[x]
6 、绝对值
double fabs (double);求实型的绝对值
double cabs(struct complex znum);求复数的绝对值
G. c++中,h 和.cpp是怎么关联在一起的
.h文件叫头文件;#include是包含一个文件,这个文件并非一定要.h文件,即使普通的文本文件也可以的;
当编译器看到#include以后就会查芦并找这个包含进来的蠢岁文件,找到就连同.cpp一带哗睁起编译;这个是基本运行方式,如果问具体的估计没有多少人能回答上来,因为他涉及编译原理方面的知识
H. C++中.CPP文件与.h文件有什么不同。详解与举例怎么使用
以.h位后缀的是头文件,.cpp是源文件,一般都是在一个项目中。如果是初学c++的话,猜余使用源文件(也就是.cpp)就足够编写出需要的源程序了。如书本上最基本的“Hello World”编码,只要在源文件中有一个主函数就可以完成一个程序。
在稍微复杂一点的程序中,也许就会用到头文件(.h)。事实上,这种头文件和代码中预处理里包含的头文件没有什么区别(就好像C语言中#include <stdio.h>)其中stdio.h就是一个头文件。
编写头文件就是按照自己的需要,给程序设计这样的头文件。头文件中,一般包含一些类的声明,函数定义之类的东西,方便在源文件的主函数中使用。
例如在a.h文件中:
#include <iostream>
using namespace std;
class Try
{
public:
void do();
}
接下来,只要在源文件b.cpp中的预处理命令里写成:
#include <iostream>
#include "a.h" (也就是在这里加上#include "a.h"这一句)
using namespace std;
.....
就可以在b.cpp的代码中声明和调用Try类型的对薯余象了。
(8)h与cpp的编译原理扩展阅读
c++程序里使用多个cpp和h文件:
建立一个工程,里面有三个文件hello.hpp、hello.cpp、main.cpp
//hello.hpp
#ifndefHELLO_HPP
#defineHELLO_HPP
classHello
{
public:
voidshow()const;
};
#endif
====================
//hello.cpp
#include"hello.hpp"
#include<iostream>
usingstd::cout;
usingstd::endl;
voidHello::show()const
{
cout<<"HelloWorld"<<endl;
}
====================
//main.cpp
#include"hello.hpp"
intmain()
{
Hello穗手滚hello;
hello.show();
return0;
}
I. C语言中.cpp与.h是如何连接的
.h 和 .cpp 不是 连接/链接 关系,而是包含关系。
也就是说,旁薯昌在预编译期间,编译器把 .h 的文字内容,原原本本 插入.cpp 文件中,插入位置就在 #include 这句 宏命令处。文字内容 插入完毕,再编译 .cpp
系统的 .h 放在 系统文件夹们 里。系统文件夹路径 定义在环境变量 INCLUDE 里。手洞
自定运扒义 .h 可以放在当前文件夹,也可别的文件夹。若在别的文件夹,写 #include 时可以把路径加在.h 文件名前。
J. .h和.cpp 文件是怎么关联起来的了,编译器是不是看到.h文件后,自动去找同名的.cpp文件呢
首先是编译,然后是链接。
编译器会将所有.cpp文件编译成中间文件.o,编译时遇到.h文件则读入各种(函数,变量等)的声明,此时并不读入对应的.cpp文件。
链接时会将各个.o文件连接成可执行文件。
所以,编译器并不是看到.h文件后立即自动去找同名的.cpp文件,而是将所有的.cpp文件编译成.o文件后一并链接。