真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中函數(shù)怎么用

這篇文章給大家分享的是有關(guān)C++中函數(shù)怎么用的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出錫山免費(fèi)做網(wǎng)站回饋大家。

第六章 函數(shù)

函數(shù)是一個(gè)命名了的代碼塊,通過調(diào)用函數(shù)執(zhí)行相應(yīng)的代碼。

函數(shù)基礎(chǔ)

  • 通過調(diào)用運(yùn)算符(call operator)來執(zhí)行函數(shù)。其形式是一對圓括號。

  • 函數(shù)的調(diào)用完成兩項(xiàng)工作(如下),此時(shí)主調(diào)函數(shù)(calling function)的執(zhí)行被暫時(shí)中斷,被調(diào)函數(shù)(called function)開始執(zhí)行。

    • 用實(shí)參初始化函數(shù)對應(yīng)的形參。

    • 將控制權(quán)轉(zhuǎn)移給被調(diào)函數(shù)。

  • return語句:

    • 返回return語句中的值

    • 將控制權(quán)從被調(diào)函數(shù)移回主調(diào)函數(shù)

局部對象
  • 名字有作用域,對象有生命周期(lifetime)

  • 自動對象(automatic object):當(dāng)函數(shù)的控制路徑經(jīng)過變量定義語句時(shí)創(chuàng)建該對象,當(dāng)達(dá)到定義所在的塊末尾時(shí)銷毀它。

  • 局部靜態(tài)對象:程序執(zhí)行路徑第一次經(jīng)過對象定義語句時(shí)初始化,知道程序終止才被銷毀。

    • 將局部變量定義為static獲得,例如:

      //統(tǒng)計(jì)函數(shù)count_calls ()被調(diào)用了多少次
      size_t count_calls ()
      {
      static size_t ctr = 0;  //調(diào)用結(jié)束后,這個(gè)值仍然有效
      return ++ctr;
      }
      int main()
      {
      for (size_t i = 0; i != 10; ++i)
      cout << cout_calls() << endl;
      return 0;
      }

函數(shù)聲明
  • 也稱作函數(shù)原型(function prototype)

  • 函數(shù)三要素(返回類型、函數(shù)名、形參類型)描述了函數(shù)的接口,函數(shù)聲明中形參名可省略。

  • 函數(shù)應(yīng)在頭文件中聲明,源文件中定義。

  • 分離式編譯

參數(shù)傳遞

如果形參是引用類型,它將綁定到對應(yīng)的實(shí)參上;否則,將實(shí)參的值拷貝后賦給形參。
- 如果無需修改引用形參的值,最好將其聲明為常量引用。

main:處理命令行選項(xiàng)

假設(shè)main函數(shù)位于可執(zhí)行文件prog內(nèi),我們可以向程序傳遞下面的選項(xiàng):

prog -d -o ofile data0

這些命令通過兩個(gè)可選的形參傳遞給main函數(shù):

int main(int argc, char *argv[]) {...}
//或:
int main(int argc, char **argv) {...}

當(dāng)實(shí)參傳給main函數(shù)之后,argv的第一個(gè)元素指向程序的名字或者一個(gè)空字符串,接下來的元素一次傳遞命令行提供的實(shí)參。最后一個(gè)指針只會掉元素值保證為0。
- 以上面的命令行為例:

argc = 5;argv[0] = "prog";argv[1] = "-d";argv[2] = "-o";argv[3] = "ofile";argv[4] = "data0";argv[5] = 0;

含有可變形參的函數(shù)

  • C++11新標(biāo)準(zhǔn)提供兩種方法編寫能處理不同數(shù)量實(shí)參的函數(shù):

    1. 所有實(shí)參類型相同,可以傳遞一個(gè)名為initializer_list的標(biāo)準(zhǔn)庫類型。

    2. 實(shí)參類型不同,我們可以編寫一種特殊的函數(shù),叫做可變參數(shù)模板。

  • C++還有一種特殊的形參類型:省略符??梢杂盟鼈鬟f可變數(shù)量的實(shí)參。這種功能一般只用于與C函數(shù)交互的接口程序。

  • initializer_list形參

    • 其類型定義在同名的頭文件中

    • 提供如下操作:

      initializer_list lst;    //默認(rèn)初始化,T類型元素的空列表
      initializer_list lst{a,b,c...};
      //lst的元素?cái)?shù)量和初始值一樣多;lst的元素是對應(yīng)初始值的副本;列表中的元素是const
      lst2(lst)
      lst2 = lst  //拷貝或復(fù)制一個(gè)initializer_list對象不會拷貝列表中的元素;拷貝后,原始列表和副本元素共享
      lst.size()  //列表中元素的數(shù)量
      lst.begin() //返回指向lst中首元素的指針
      lst.end()   //返回指向lst中尾元素下一位置的指針

返回類型和return語句

  • 引用返回左值,其他返回類型得到右值。

  • 列表初始化返回值:C++11新標(biāo)準(zhǔn)規(guī)定,函數(shù)可以返回花括號包圍的值的列表。

主函數(shù)main的返回值
  • 允許main函數(shù)沒有返回值(若沒有,編譯器隱式地插入return 0)

  • 返回0表示執(zhí)行成功,其他值依機(jī)器而定。

  • 為了使返回值與機(jī)器無關(guān),cstdlib頭文件定義了兩個(gè)預(yù)處理變量,分別表示成功和失敗:

    return EXIT_FAILURE;
    return EXIT_SUCCESS;
    //因?yàn)樗鼈兪穷A(yù)處理變量,所以既不能在前面加上std::,也不能在using聲明里出現(xiàn)。

返回?cái)?shù)組指針
  1. 使用類型別名

    typedef int arrT[10];   //arrT是一個(gè)類型別名,它表示的類型是含有10個(gè)整數(shù)的數(shù)組
    using arrT = int[10];   //與上一句等價(jià)
    arrT* func(int i);      //func返回一個(gè)指向含有10個(gè)整數(shù)的數(shù)組的指針

  2. 聲明一個(gè)返回?cái)?shù)組指針的函數(shù),形式如下

    Type (*function(parameter_list)) [dimension]
    //Type表示返回的數(shù)組指針指向的數(shù)組元素類型
    //dimension表示數(shù)組的大小
    //例如:
    int (*func(int i)) [10];

  3. 使用尾置返回類型(C++11)

    auto func(int i) -> int(*)[10];

  4. 使用decltype

    int odd[] = {1,3,5,7,9};
    int even[] = {0,2,4,6,8};
    decltype(odd) *arrPtr(int i)
    {
    return (i % 2) ? &odd : &even;  //返回一個(gè)指向數(shù)組的指針
    }

函數(shù)重載

如果同一作用域內(nèi)的幾個(gè)函數(shù)名字相同但形參列表不同,我們稱之為重載(overloaded)函數(shù)。

  • 不允許兩個(gè)函數(shù)除了返回類型外其他所有要素都相同。

  • 重載與作用域:一旦在當(dāng)前作用域中找到了所需的名字,編譯器就會忽略掉外層作用域中的同名實(shí)體。

特殊用途語言特性

介紹三種函數(shù)相關(guān)的語言特性:默認(rèn)實(shí)參、內(nèi)聯(lián)函數(shù)、constexpr函數(shù)。

默認(rèn)實(shí)參
  • 調(diào)用包含默認(rèn)實(shí)參的函數(shù)時(shí),可以包含該實(shí)參,也可以省略該實(shí)參。

  • 一旦某個(gè)形參被賦予了默認(rèn)值,它后面所有的形參都必須有默認(rèn)值。

內(nèi)聯(lián)函數(shù)(inline)

調(diào)用函數(shù)一般比求等價(jià)表達(dá)式的值要慢,內(nèi)聯(lián)函數(shù)可避免函數(shù)調(diào)用的開銷。
- 將函數(shù)指定為內(nèi)聯(lián)函數(shù),通常就是將它在每個(gè)調(diào)用點(diǎn)上“內(nèi)聯(lián)地”展開。

constexpr函數(shù)
  • 函數(shù)的返回類型和所有的形參類型都得是字面值類型。

  • 函數(shù)中必須有且只有一條return語句。

  • constexpr函數(shù)被隱式地指定為內(nèi)聯(lián)函數(shù)。

內(nèi)聯(lián)函數(shù)和constexpr函數(shù)通常定義在頭文件中

調(diào)試幫助

程序可以包含一些用于調(diào)試的代碼,但這些代碼只在開發(fā)程序時(shí)使用。當(dāng)應(yīng)用程序編寫完成準(zhǔn)備發(fā)布時(shí),要先屏蔽掉調(diào)試代碼。這種方法用到兩項(xiàng)預(yù)處理功能:assert和NDEBUG。

assert預(yù)處理宏
#include assert(expr);//首先對expr求值,//如果表達(dá)式為假(即0),assert輸出信息并終止程序的執(zhí)行。//如果表達(dá)式為真(即非0),assert什么也不做。//例如:對一個(gè)文本進(jìn)行操作的程序可能要求所給定單詞的長度都大于某個(gè)閾值。assert(word.size() > threshold;
NDEBUG預(yù)處理變量
  • assert的行為依賴于一個(gè)名為NDEBUG的預(yù)處理變量的狀態(tài)。如果定義了NDEBUG,則assert什么也不做。默認(rèn)狀態(tài)下沒有定義NDEBUG,此時(shí)assert將運(yùn)行執(zhí)行時(shí)檢查。

    • 使用#define語句定義NDEBUG,從而關(guān)閉調(diào)試狀態(tài)。

    • 很多編譯器都提供了命令行選項(xiàng)使我們可以定義預(yù)處理變量。

      $ CC -D NDEBUG main.C   #微軟編譯器中用 /D

  • 這只是調(diào)試程序的輔助手段,不能代替真正的邏輯檢查,也不能代替程序本應(yīng)該包含的錯誤檢查。

  • 除了assert以外,也能使用NDEBUG編寫自己的條件調(diào)試代碼:

//如果定義了NDEBUG,#ifndef和#endif之間的代碼將被忽略void print(const int ia[], aize_t size)
{    #ifndef NDEBUG
        //_ _func_ _是編譯器定義的一個(gè)局部靜態(tài)變量,用于存放函數(shù)的名字,它是const char的一個(gè)靜態(tài)數(shù)組。
        cerr << _ _func_ _ << "array size is " << size << endl;    #endif}

除了_ _ func _ _之外,還有其它四個(gè)名字:

_ _FILE_ _ 存放文件名的字符串字面值
_ _LINE_ _ 存放當(dāng)前行號的整型字面值
_ _TIME_ _ 存放文件編譯時(shí)間的字符串字面值
_ _DATA_ _ 存放文件編譯日期的字符串字面值

函數(shù)指針

bool lengthCompare(const string &, const string &);//pf指向一個(gè)函數(shù),該函數(shù)的參數(shù)是兩個(gè)const string的引用,返回值是bool類型。注意圓括號必不可少bool (*pf) (const string &, const string &);    //未初始化

當(dāng)我們把函數(shù)名作為值使用時(shí),該函數(shù)自動地轉(zhuǎn)換成指針

pf = lengthCompare;     //pf指向名為lengthCompare的函數(shù)pf = &lengthCompare;    //等價(jià)賦值語句,&是可選的

調(diào)用該函數(shù):

//此三個(gè)調(diào)用等價(jià)bool b1 = pf("hello", "goodbye");bool b2 = (*pf)("hello", "goodbye");bool b3 = lengthCompare("hello", "goodbye");

感謝各位的閱讀!關(guān)于“C++中函數(shù)怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


網(wǎng)頁題目:C++中函數(shù)怎么用
當(dāng)前URL:http://weahome.cn/article/iihess.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部