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文件後一並鏈接。