入坑C++(3): 自定義函數(shù)的建立

函數(shù),或者方法泥从,在如今的編程中變得非常重要谚赎,這使得程序員不必要重復(fù)的造車輪子,直接使用別人或社區(qū)優(yōu)秀的函數(shù)來實(shí)現(xiàn)自己想要的功能岛杀。一般大型的庫函數(shù)像openCV都已經(jīng)都已經(jīng)打包好了阔拳,只要將包含關(guān)系引用到位,使用起來非常方便。但是openCV不是萬能的糊肠,很多時(shí)候我們還需要跟多的辨宠、更加具體細(xì)微的函數(shù)來實(shí)現(xiàn)我們的目的。我們或許會請別人或者自己來實(shí)現(xiàn)這些常用的功能货裹,然后保存下來以后還能方便使用嗤形。在使用Matlab的時(shí)候,自定義函數(shù)變得很簡單弧圆。自需要新建一個(gè).m文件赋兵,然后按照函數(shù)定義的格式就可以了。只要該函數(shù)的路徑已經(jīng)添加在matlab路徑中或者處于當(dāng)前工作環(huán)境路徑中就可以直接引用搔预。

在C++中霹期,一樣可以自定義函數(shù)。比如在使用openCV的時(shí)候拯田,我想像Matlab一樣使用subplot()函數(shù)多圖顯示历造,可是在openCV中我似乎并沒有找到這個(gè)函數(shù),而我自己目前也沒有能力自己來寫一個(gè)這樣的函數(shù)船庇,于是我在網(wǎng)上找大牛們的解決方法吭产。找到了大牛的函數(shù)Mat combineImages(vector<Mat> imgs, int col, int row, bool hasMargin),我直接copy了代碼溢十。接下來有一下幾種方法來解決:

Mat combineImages(vector<Mat> imgs, int col, int row, bool hasMargin)

一垮刹、放在當(dāng)前.cpp文檔里面

將該函數(shù)直接放在含有main()函數(shù)的.cpp源文件中张弛,如果該函數(shù)的定義放在main函數(shù)之前,那么可以像Matlab那樣直接在main()

函數(shù)中引用就好了吞鸭。但是一般情況下,為了是代碼結(jié)構(gòu)清晰刻剥,自定義函數(shù)會被放在main()的后面遮咖,這時(shí)候就要在使用該函數(shù)之前做出聲明:

Mat combineImages(vector<Mat> imgs, int col, int row, bool hasMargin);

然后才是使用該函數(shù)。

二造虏、放在另外一個(gè).cpp源文件中

使用Matlab習(xí)慣了,就會想把自定義函數(shù)放在一個(gè)新建的文件中漓藕,這樣使得結(jié)構(gòu)更加分明。其實(shí)這個(gè)Matlab也是十分相似的享钞。在當(dāng)前工程中新建一個(gè)源文件揍诽,然后將函數(shù)的代碼拷貝進(jìn)去。要注意的是需要的函數(shù)定義的開頭加上extern這個(gè)關(guān)鍵字,告訴編譯器這個(gè)是一個(gè)全局可使用的函數(shù)暑脆,然后在main()函數(shù)使用自定義函數(shù)前同樣做出聲明即可。函數(shù)的名稱不必要像Matlab那樣必須和源文件名稱保持一直添吗,甚至一個(gè)源文件中可以定義任意多個(gè)自定義函數(shù),重點(diǎn)就是加上extern關(guān)鍵字就行架专。目前我比較偏愛這種方法玄帕,也在用這種方法。

工程結(jié)構(gòu)圖

我的工程HelloOpenCV目前建立了兩個(gè)源文件:main_function.cpp self_functions.cpp裤纹。 從字面就可以看出前者是main()所在的源文件,用來執(zhí)行的鹰椒,后者是用來放自定義函數(shù)的锡移。

目前在self_function.cpp中自定義了三個(gè)函數(shù)(具體內(nèi)容我隱藏了):

自定義的三個(gè)函數(shù)

其實(shí)我現(xiàn)在還不知道在定義函數(shù)的時(shí)候淆珊,引用的庫是否需要聲明奸汇,因?yàn)槲覈L試了不聲明也可以執(zhí)行的施符,但是如果沒有聲明擂找,這些引用第三庫中的函數(shù)下面有錯(cuò)誤的紅波浪線,看著不舒服听哭。希望知道的大佬告知一聲塘雳。

然后在main()引用之前需要引用:

引用自定義函數(shù)之前的聲明

聲明只需要完整函數(shù)類型,函數(shù)名和函數(shù)參數(shù)即可败明,不能夠賦值的。

我們同樣可以自定義變量,一般這個(gè)時(shí)候變量是一個(gè)常量。定義和使用的方法和函數(shù)一模一樣沸呐。

三呢燥、建立一個(gè)類來

這種方法我目前還沒有使用,我的理解是當(dāng)自定義函數(shù)的數(shù)量到達(dá)一定程度的時(shí)候才需要叛氨。這個(gè)方法同樣需要我們把所有的自定義函數(shù)或者變量寫在一個(gè)不含有main()的.cpp源文件中,然后建立一個(gè)和.cpp同名的.h的頭文件寞埠,并包含所有自定義函數(shù)和變量的聲明。在使用的時(shí)候我們自需要寫上包含的聲明就好了蓝角。


在寫論文階段真的很難抽時(shí)間來系統(tǒng)的學(xué)習(xí)C++饭冬,但是結(jié)合openCV 來學(xué)習(xí),對我來說可能會事半功倍昌抠。聯(lián)系Matlab,遇到問題一個(gè)個(gè)解決裁厅,這樣學(xué)起來更能理解C++語言的特點(diǎn)劝评。當(dāng)然基礎(chǔ)還是要打牢,現(xiàn)在基本理解了C++的編程思維蒋畜,以及要用到的工具。接下來會細(xì)細(xì)品味C++的魅力插龄。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末科展,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子才睹,更是在濱河造成了極大的恐慌甘邀,老刑警劉巖垮庐,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逗抑,居然都是意外死亡寒亥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門褂傀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腐宋,“玉大人,你說我怎么就攤上這事胸竞。” “怎么了卫枝?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵校赤,是天一觀的道長。 經(jīng)常有香客問我马篮,道長,這世上最難降的妖魔是什么翅阵? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任迁央,我火速辦了婚禮,結(jié)果婚禮上岖圈,老公的妹妹穿的比我還像新娘。我一直安慰自己顽决,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布才菠。 她就那樣靜靜地躺著慌烧,像睡著了一般鸠儿。 火紅的嫁衣襯著肌膚如雪厕氨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天田晚,我揣著相機(jī)與錄音国葬,去河邊找鬼。 笑死汇四,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的序宦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼互捌,長吁一口氣:“原來是場噩夢啊……” “哼行剂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腌巾,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤固阁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后备燃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡漏麦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了更耻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏膨。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖目胡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情誉己,我是刑警寧澤域蜗,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站霉祸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疼阔。R本人自食惡果不足惜半夷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望巫橄。 院中可真熱鬧,春花似錦宾舅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哥谷,卻和暖如春麻献,著一層夾襖步出監(jiān)牢的瞬間猜扮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工齿桃, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煮盼,地道東北人源譬。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像刮刑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子雷绢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容