第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

為什么有頭文件和.cpp文件?

為什么有頭文件和.cpp文件?

C++ C
滄海一幻覺(jué) 2019-06-03 10:25:10
為什么有頭文件和.cpp文件?為什么C+有頭文件和.cpp文件?
查看完整描述

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)始。


查看完整回答
反對(duì) 回復(fù) 2019-06-03
?
翻翻過(guò)去那場(chǎng)雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

C+編譯

C+編譯分為兩個(gè)主要階段:

  1. 第一種方法是將“源文件”文本文件編譯成二進(jìn)制“對(duì)象”文件:CPP文件是已編譯的文件,編譯時(shí)不知道其他CPP文件(甚至庫(kù)),除非通過(guò)原始聲明或頭包含將文件提供給它。CPP文件通常被編譯成.obj或.o“Object”文件。

  2. 第二種方法是將所有“對(duì)象”文件鏈接在一起,從而創(chuàng)建最終的二進(jìn)制文件(庫(kù)或可執(zhí)行文件)。

在所有這些過(guò)程中,HPP適合哪里?

一個(gè)可憐的孤獨(dú)的CPP文件.。

每個(gè)CPP文件的編譯獨(dú)立于所有其他CPP文件,這意味著如果A.CPP需要在B.CPP中定義一個(gè)符號(hào),例如:

// A.CPPvoid doSomething(){
   doSomethingElse(); // Defined in B.CPP}// B.CPPvoid doSomethingElse(){
   // Etc.}

它不會(huì)編譯,因?yàn)锳.CPP無(wú)法知道“doSomeingElse”的存在.除非A.CPP中有聲明,例如:

// A.CPPvoid doSomethingElse() ; // From B.CPPvoid doSomething(){
   doSomethingElse() ; // Defined in B.CPP}

然后,如果有使用相同符號(hào)的C.CPP,則復(fù)制/粘貼聲明.

復(fù)制/粘貼警報(bào)!

是的,有個(gè)問(wèn)題。復(fù)制/粘貼是危險(xiǎn)的,很難維護(hù)。這意味著如果我們有辦法不復(fù)制/粘貼,并且仍然聲明符號(hào).我們?cè)趺醋瞿??包含一些文本文件,通常后綴為.h、.hxx、.h+,或者,我更喜歡C+文件.hpp:

// 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工作?

本質(zhì)上,包含一個(gè)文件將解析并復(fù)制將其內(nèi)容粘貼到cpp文件中。

例如,在下面的代碼中,使用了A.HPP標(biāo)題:

// A.HPPvoid someFunction();void someOtherFunction();

..資料來(lái)源B.CPP:

// B.CPP#include "A.HPP"void doSomething(){
   // Etc.}

..將在納入后成為:

// B.CPPvoid someFunction();void someOtherFunction();void doSomething(){
   // Etc.}

一件小事-為什么在B.CPP中包括B.HPP?

在當(dāng)前情況下,這是不需要的,B.HPP具有doSomethingElse函數(shù)聲明,而B(niǎo).CPP具有doSomethingElse函數(shù)定義(它本身就是一個(gè)聲明)。但在更一般的情況下,B.HPP用于聲明(和內(nèi)聯(lián)代碼),可能沒(méi)有相應(yīng)的定義(例如枚舉、普通結(jié)構(gòu)等),因此如果B.CPP使用B.HPP的聲明,則可能需要包含。默認(rèn)情況下,源包含其標(biāo)題是“不錯(cuò)的選擇”。

結(jié)語(yǔ)

因此,頭文件是必要的,因?yàn)镃+編譯器無(wú)法單獨(dú)搜索符號(hào)聲明,因此,您必須通過(guò)包含這些聲明來(lái)幫助它。

最后一句話:您應(yīng)該在您的HPP文件的內(nèi)容周圍設(shè)置頭保護(hù),以確保多個(gè)包含不會(huì)破壞任何東西,但總而言之,我相信HPP文件存在的主要原因已經(jīng)在上面解釋過(guò)了。

#ifndef B_HPP_#define B_HPP_// The declarations in the B.hpp file#endif // B_HPP_


查看完整回答
反對(duì) 回復(fù) 2019-06-03
?
猛跑小豬

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊

因?yàn)镃是這個(gè)概念起源的地方,它有30年的歷史,而那時(shí),它是將多個(gè)文件中的代碼鏈接在一起的唯一可行的方法。

今天,這是一個(gè)可怕的黑客,它完全破壞了C+中的編譯時(shí)間,導(dǎo)致了無(wú)數(shù)不必要的依賴(因?yàn)轭^文件中的類定義暴露了太多關(guān)于實(shí)現(xiàn)的信息),依此類推。


查看完整回答
反對(duì) 回復(fù) 2019-06-03
  • 3 回答
  • 0 關(guān)注
  • 751 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)