亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

EasyC++編寫頭文件

 更新時間:2021年12月17日 08:44:55   作者:梁唐  
這篇文章主要介紹了C++編寫頭文件,在一個C++程序中,只包含兩類文件——.cpp文件和.h文件。其中,.cpp文件被稱作C++源文件,里面放的都是C++的源代碼;而.h文件則被稱作C++頭文件,里面放的也是C++的源代碼,感興趣的小伙伴一起來看下面文章的詳細介紹吧

文章轉(zhuǎn)自公眾號:Coder梁(ID:Coder_LT)

我們之前做的左右示例都是在一個單獨的cpp文件當(dāng)中完成的,當(dāng)我們要做一個相對復(fù)雜或大型的項目時,我們顯然不能把所有代碼都寫在一個cpp里。這就需要我們拆分代碼,但代碼按照邏輯劃分,寫入不同的cpp文件當(dāng)中。

在我們編譯的時候,我們可以將這些cpp文件分別單獨編譯,最后再連接到一起。這樣做的好處是,當(dāng)我們只修改了某一個文件的時候,可以只用單獨編譯那一個文件,不會影響其他文件的編譯結(jié)果。一般來說大型項目,都會使用一下自動化的編譯工具,比如make等,不會手動執(zhí)行編譯過程,但對于這其中的一些細節(jié),還是需要有所了解。

我們來看C++ primer當(dāng)中提供的一個例子。

現(xiàn)在我們要實現(xiàn)一個將直接坐標(biāo)轉(zhuǎn)化成極坐標(biāo)的功能,我們需要定義兩個結(jié)構(gòu)體分別表示直角坐標(biāo)和極坐標(biāo),另外還需要實現(xiàn)從直接坐標(biāo)到極坐標(biāo)的轉(zhuǎn)化。

顯然相對于主體程序而言,這部分代碼是獨立的,所以我們可以把它們放入一個單獨的cpp文件當(dāng)中。首先要明確的是,main()函數(shù)和其他函數(shù)都用到了同一個結(jié)構(gòu)體,因此兩個cpp文件都需要包含該結(jié)構(gòu)體的聲明。顯然拷貝代碼是很糟糕的選擇,比較好的做法是將結(jié)構(gòu)體的聲明寫在頭文件當(dāng)中,通過#include語句引入。

這樣的話整體的代碼就分成三個部分:

  • 頭文件:包含結(jié)構(gòu)體聲明、函數(shù)聲明
  • coordin.cpp:包含坐標(biāo)系轉(zhuǎn)化相關(guān)的代碼
  • main.cpp:主體程序

在之后面向?qū)ο蟮恼鹿?jié)當(dāng)中, 我們將會經(jīng)常用到這樣的代碼結(jié)構(gòu)。

對于頭文件當(dāng)中的內(nèi)容有嚴(yán)格的限制,由于頭文件可能會被多個cpp文件引入,所以我們不能將函數(shù)的實現(xiàn)或參數(shù)的定義放入頭文件當(dāng)中。因為同一個程序中包含同一個函數(shù)的多個定義會引發(fā)報錯,參數(shù)同理。

只有以下內(nèi)容可以寫入頭文件當(dāng)中:

  • 函數(shù)原型(函數(shù)聲明)
  • #defineconst定義的符號常量
  • 結(jié)構(gòu)體聲明
  • 類聲明
  • 模板聲明
  • 內(nèi)聯(lián)函數(shù)(inline

在同一個文件當(dāng)中只能引入一個頭文件一次,但有的時候由于引用依賴的原因,可能會導(dǎo)致重復(fù)引入。比如引入A和B頭文件,B頭文件中引入了A,導(dǎo)致A被引入兩次。

為了解決這個問題,我們可以加入預(yù)編譯指令#ifndef,含義是if not defined,判斷某定義是否存在。只有當(dāng)定義不存在時才會直接#ifndef#endif之間的語句:

#ifndef COORDIN_H_
// statements
#endif


一般情況下我們使用#define創(chuàng)建符號常量:

#define MAXI 4096


但由于這里我們只是用來區(qū)分是否引入,所以只需要名稱即可:

#ifndef COORDIN_H
#define COORDIN_H
// todo
#endif


這樣,當(dāng)引入一次之后,COORDIN_H即被定義,那么下次就不會再執(zhí)行這段代碼。

最后,我們寫出完整的頭文件代碼:

#

ifndef COORDIN_H__
#define COORDIN_H__

struct polar {
    double distance, angle;
};

struct rect {
    double x, y;
};

polar rect_to_polar(rect xpros);
void show_polar(polar dapos);

#endif

到此這篇關(guān)于C++編寫頭文件的文章就介紹到這了,更多相關(guān)C++編寫頭文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C++中new運算符和delete運算符的使用

    詳解C++中new運算符和delete運算符的使用

    這篇文章主要介紹了C++中new運算符和delete運算符的使用,文章來自于微軟開發(fā)者文檔,因而根據(jù)Visual C++的一些特性來進行講解,需要的朋友可以參考下
    2016-01-01
  • C++學(xué)習(xí)小結(jié)之?dāng)?shù)據(jù)類型及轉(zhuǎn)換方式

    C++學(xué)習(xí)小結(jié)之?dāng)?shù)據(jù)類型及轉(zhuǎn)換方式

    本文給大家分享的是本人在學(xué)習(xí)C++過程中的一個小心得,關(guān)于數(shù)據(jù)類型和轉(zhuǎn)換方式的,這里記錄下來,推薦給菜鳥們,高手大神請直接飄過。
    2015-07-07
  • c++字符串分割的方法

    c++字符串分割的方法

    這篇文章主要介紹了c++字符串分割的方法,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言中的四種常量詳解

    C語言中的四種常量詳解

    本篇文章是c語言基礎(chǔ)篇,主要講述一下常量,常量即不可被直接修改的量(const修飾的常變量可間接修改,后續(xù)文章會繼續(xù)說明)請大家持續(xù)關(guān)注腳本之家
    2021-10-10
  • c語言實現(xiàn)順序表的基本操作

    c語言實現(xiàn)順序表的基本操作

    這篇文章主要介紹了c語言實現(xiàn)順序表的基本操作,需要的朋友可以參考下
    2014-03-03
  • opencv?C++模板匹配的簡單實現(xiàn)

    opencv?C++模板匹配的簡單實現(xiàn)

    這篇文章主要介紹了opencv?C++模板匹配的簡單實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • Qt創(chuàng)建項目實戰(zhàn)之手把手創(chuàng)建第一個Qt項目

    Qt創(chuàng)建項目實戰(zhàn)之手把手創(chuàng)建第一個Qt項目

    我們在進行軟件開發(fā)學(xué)習(xí)時,有時候需要qt軟件進行代碼的敲寫,下面這篇文章主要給大家介紹了關(guān)于Qt創(chuàng)建項目實戰(zhàn)之手把手創(chuàng)建第一個Qt項目的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • C++中神奇的tuple詳解使用技巧及實例解析

    C++中神奇的tuple詳解使用技巧及實例解析

    C++11標(biāo)準(zhǔn)新引入了一種類模板,命名為 tuple(中文可直譯為元組),下面這篇文章主要給大家介紹了關(guān)于C++中神奇的tuple詳解使用技巧及實例解析的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 使用c++實現(xiàn)異或加密的代碼示例

    使用c++實現(xiàn)異或加密的代碼示例

    這篇文章主要為大家介紹了c++實現(xiàn)異或加密的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • C語言中順序棧和鏈棧的定義和使用詳解

    C語言中順序棧和鏈棧的定義和使用詳解

    這篇文章主要為大家詳細介紹了C語言中順序棧和鏈棧的定義和使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)C語言有一定的幫助,感興趣的小伙伴可以了解一下
    2022-10-10

最新評論