Procedural Programming

How to Write a Function


得到某個類型的最大/最小值衅码,參考標準庫numeric_limits class

#include <limits>
int max_int = numeric_limits<int>::max();
double min_dbl = numeric_limiys<double>::min();

Invoking a Function


reference 引用

???????在為了函數(shù)的參數(shù)和傳入的實際對象產(chǎn)生關聯(lián),(可以簡單認為修改參數(shù)捂人,就可以修改實際對象)逐纬,可以通過傳址(pass by reference)來實現(xiàn)蛔屹,最簡單的方法就是將參數(shù)聲明稱一個reference

void ChangeValue(int & value)
{
    value = 666;
}

????????將參數(shù)聲明為reference:
??????????? 1. 希望得以直接對傳入的對象進行修改
??????????? 2. 降低復制大型對象的額外負擔

????????但是在傳遞==內(nèi)置類型==的時候,建議==不要==使用傳址的方式豁生。
????????傳址機制主要用于傳遞class object

作用域及范圍

????????儲存期(范圍):為對象分配內(nèi)存的存活時間
????????作用域(scope):對象在程序內(nèi)的存活區(qū)域
????????對象如果在函數(shù)以外聲明兔毒,具有所謂的file scope

???????對象如果擁有file scope,那么從他的聲明點到文件末尾都是可見的甸箱。
???????對象的內(nèi)存在main()開始執(zhí)行前就已經(jīng)分配好了育叁,直到程序結(jié)束。

動態(tài)內(nèi)存管理

???????????內(nèi)存由程序的空閑空間(free store)分配而來摇肌,也稱為堆內(nèi)存(heap memory)
// 表達式的形式如下
// type可以是任意的內(nèi)置類型擂红,也可以是程序知道得class
new Type
// eg.1
int *pi = new int;
delete pi;

// eg.2
int *pia = new int[20];  // 聲明一個長度為20的數(shù)組仪际,但是不能給該數(shù)組初始化
delete [] pia;

???????delete 會釋放指針所指的對象
???????delete [] 會釋放數(shù)組中的所有對象围小,所以指針指向數(shù)組一定用這個

???????????如果我們不使用delete釋放對象,那么由heap分配的對象就永遠不會被釋放树碱,這就叫==memory leak==(內(nèi)存泄漏)

Providing Default Parameter Value


提供默認參數(shù)值

void WriteSomething(string info, ofstream &ofil)
{
    // code
}

???????默認情況下肯适,其實不想產(chǎn)生ofstream &ofil這個參數(shù),用戶可能不清楚需要填寫這個參數(shù)成榜。但是又希望那些知道這個參數(shù)框舔,并且要自定義的用戶使用他們,這時候就可以使用默認參數(shù)赎婚。

void WriteSomething(string info, ofstream *ofil = 0)
{
    // code
}

???????==注意==這里講引用換成了指針刘绣,這是因為引用必須代表一個對象。

默認參數(shù)規(guī)則

  1. 默認值的解析操作由最右邊開始挣输。如果提供了默認值纬凤,那么這一參數(shù)的右邊的所有參數(shù)必須擁有默認值。
  2. 默認值只能指定一次撩嚼,可以在函數(shù)聲明出停士,也可以在函數(shù)定義處挖帘。但是不能再兩個地方同時設定

???????通常函數(shù)聲明放在頭文件中,方便觀察恋技。所以為了提高可見性拇舀,默認值放在函數(shù)聲明處。

// xxx.h
void display(string str, ostream & = cout);
// xxx.cpp
include "xxx.h"
void display(string str, ostream & os)
{
    os << string << endl;
}

Using Local Static Object


局部靜態(tài)對象

???????局部靜態(tài)對象所處的空間蜻底,即使在不同的函數(shù)調(diào)用過程中骄崩,依然持續(xù)存在。

Declaring a Function Inline


Providing Overloaded Function


重載函數(shù)

???????名字相同薄辅、返回類型相同刁赖,參數(shù)列表不相同的函數(shù)。

???????在函數(shù)調(diào)用的時候會根據(jù)調(diào)用者提供的實際參數(shù)列表长搀,來和每一個重載函數(shù)作對比宇弛,找出其中合適的。

Defining and Using Template Function


模板函數(shù)

???????function template將參數(shù)列表中指定的全部(或部分)參數(shù)的類型信息抽離了出來源请。

template <typename T> // template <class T>兩者意義是一樣的
                        //但是建議使用typename枪芒,以防出現(xiàn)多重意思
void display(const string &msg, const vector<T> &vec)
{
    // code
}

???????function template也可以重載

template <typename T>
void display(const string &msg, const list<T> &lt)
{
    // code
}

Pointers to Function Add Flexibility


函數(shù)指針

???????函數(shù)指針必須指明函數(shù)的返回類型參數(shù)列表

// 這些函數(shù)返回一個vector類型的指針
const vector<int> *func1( int size );
const vector<int> *func2( int size );
const vector<int> *func3( int size );

bool IsUseFunc(const vector<int>* (*func_ptr)(int))
{
    // code
}

???????只要在bool IsUseFunc(const vector<int>* (*func_ptr)(int))傳入函數(shù)的名字就可以調(diào)用了。

???????為什么不是

const vector<int>* *func_ptr(int);
// const vector<int>** func_ptr(int);
// 聲明了一個函數(shù)

???????這句話代表的是返回類型是一個指針谁尸,這個指針指向一個另一個指針舅踪,后一個指向一個元素類型為intconst vector

Setting Up a Header File


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末良蛮,一起剝皮案震驚了整個濱河市抽碌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌决瞳,老刑警劉巖货徙,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皮胡,居然都是意外死亡痴颊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門屡贺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠢棱,“玉大人,你說我怎么就攤上這事甩栈⌒合桑” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵量没,是天一觀的道長玉转。 經(jīng)常有香客問我,道長允蜈,這世上最難降的妖魔是什么冤吨? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任蒿柳,我火速辦了婚禮,結(jié)果婚禮上漩蟆,老公的妹妹穿的比我還像新娘垒探。我一直安慰自己,他們只是感情好怠李,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布圾叼。 她就那樣靜靜地躺著,像睡著了一般捺癞。 火紅的嫁衣襯著肌膚如雪夷蚊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天髓介,我揣著相機與錄音惕鼓,去河邊找鬼。 笑死唐础,一個胖子當著我的面吹牛箱歧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播一膨,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼呀邢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豹绪?” 一聲冷哼從身側(cè)響起价淌,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瞒津,沒想到半個月后蝉衣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡仲智,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年买乃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钓辆。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肴焊,靈堂內(nèi)的尸體忽然破棺而出前联,到底是詐尸還是另有隱情,我是刑警寧澤娶眷,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布似嗤,位于F島的核電站,受9級特大地震影響届宠,放射性物質(zhì)發(fā)生泄漏烁落。R本人自食惡果不足惜乘粒,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伤塌。 院中可真熱鬧灯萍,春花似錦、人聲如沸每聪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽药薯。三九已至绑洛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間童本,已是汗流浹背真屯。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留穷娱,地道東北人讨跟。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像鄙煤,于是被迫代替她去往敵國和親晾匠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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