3 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
主要原因是接口與實(shí)現(xiàn)分離。頭文件聲明“什么”類(或任何正在實(shí)現(xiàn)的)將做什么,而CPP文件定義“如何”它將執(zhí)行這些特性。
這減少了依賴關(guān)系,這樣使用標(biāo)頭的代碼就不一定需要知道實(shí)現(xiàn)的所有細(xì)節(jié),以及只需要知道實(shí)現(xiàn)所需的任何其他類/頭。這將減少編譯時(shí)間,以及在實(shí)現(xiàn)中的某些內(nèi)容發(fā)生變化時(shí)所需的重新編譯量。
這并不完美,你通常會(huì)求助于一些技巧,比如PIMPL成語(yǔ)正確地分離接口和實(shí)現(xiàn),但這是一個(gè)很好的開(kāi)始。

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
C+編譯
第一種方法是將“源文件”文本文件編譯成二進(jìn)制“對(duì)象”文件:CPP文件是已編譯的文件,編譯時(shí)不知道其他CPP文件(甚至庫(kù)),除非通過(guò)原始聲明或頭包含將文件提供給它。CPP文件通常被編譯成.obj或.o“Object”文件。 第二種方法是將所有“對(duì)象”文件鏈接在一起,從而創(chuàng)建最終的二進(jìn)制文件(庫(kù)或可執(zhí)行文件)。
一個(gè)可憐的孤獨(dú)的CPP文件.。
// A.CPPvoid doSomething(){ doSomethingElse(); // Defined in B.CPP}// B.CPPvoid doSomethingElse(){ // Etc.}
// A.CPPvoid doSomethingElse() ; // From B.CPPvoid doSomething(){ doSomethingElse() ; // Defined in B.CPP}
復(fù)制/粘貼警報(bào)!
// B.HPP (here, we decided to declare every symbol defined in B.CPP)void doSomethingElse() ;// A.CPP#include "B.HPP"void doSomething(){ doSomethingElse() ; // Defined in B.CPP}// B.CPP#include "B.HPP"void doSomethingElse(){ // Etc.}// C.CPP#include "B.HPP"void doSomethingAgain(){ doSomethingElse() ; // Defined in B.CPP}
如何 include
工作?
// A.HPPvoid someFunction();void someOtherFunction();
// B.CPP#include "A.HPP"void doSomething(){ // Etc.}
// B.CPPvoid someFunction();void someOtherFunction();void doSomething(){ // Etc.}
一件小事-為什么在B.CPP中包括B.HPP?
doSomethingElse
doSomethingElse
結(jié)語(yǔ)
#ifndef B_HPP_#define B_HPP_// The declarations in the B.hpp file#endif // B_HPP_

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
- 3 回答
- 0 關(guān)注
- 751 瀏覽
添加回答
舉報(bào)