<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • C++語法規(guī)則積累

    時間:2024-10-13 09:33:12 計算機(jī)等級 我要投稿
    • 相關(guān)推薦

    C++語法規(guī)則積累

      面向?qū)ο蟪绦蛟O(shè)計,是針對開發(fā)較大規(guī)模的程序而提出來的,目的是提高軟件開發(fā)的效率。下面是小編整理的關(guān)于C++語法表達(dá)式規(guī)則的建立基礎(chǔ),希望大家認(rèn)真閱讀!

      C++ 中的布爾類型:布爾類型只占用一個bit ,但是如果連續(xù)定義多個布爾類型時,編譯器可能會多個布爾類型定義在一起。true 編譯器用1來表示。false 編譯器用0來表示。

      將一個其他類型的數(shù)據(jù)賦給布爾類型變量:C++編譯器會將所有的非0的值轉(zhuǎn)換為true(1),將0 轉(zhuǎn)化為false(0)。

      三木運(yùn)算符 ? : :將一個三目運(yùn)算符作為左值: (a>b?a:b) = 3 C語言不支持(三目運(yùn)算符返回一個值),但在C++中支持(三目元算符返回變量)。 但是如果可能的返回值有一個是常量值,那么它就不能作為左值使用,如(a>b?1:b) = 3 非法。

      引用:

      C++中的引用:一個已經(jīng)定義的變量的別名。 Type var , Type & name = var; 普通引用在聲明時必須用其他的變量進(jìn)行初始化。引用作為函數(shù)參數(shù)聲明時不進(jìn)行初始化。

      const 修飾引用:const 使引用擁有只讀屬性,但是變量本身還是原來的屬性。

      當(dāng)使用常量對const 引用進(jìn)行初始化時,編譯器會給常量分配空間,并將引用名命名為這段空間的別名。不能給普通引用賦值為常量,但是可以給常引用賦值為常量。此時常引用是只讀的,除了在定義時,不能給它賦值。因此用一個常引用可以構(gòu)成一個只讀的變量,如 const int & a = 10 a是一個只讀變量。

      引用在C++ 的內(nèi)部實現(xiàn)是一個常指針:type & name ßàtype* const name。因此引用擁有一個4字節(jié)的空間。

      引用作為函數(shù)返回值:返回局部變量的引用時,引用不能作為左值,也不能用它初始化其他引用,但是如果引用時靜態(tài)的或者全局變量的引用時就可以。

      C++ 函數(shù)探幽:

      內(nèi)聯(lián)函數(shù):inline int function(…), 內(nèi)聯(lián)函數(shù)可以替代宏代碼片段,在編譯時將函數(shù)體直接替代函數(shù)被調(diào)用的地方,這樣就減少了普通函數(shù)被調(diào)用時 的開銷(壓棧,跳轉(zhuǎn)等),但是內(nèi)聯(lián)函數(shù)本質(zhì)上還是一個函數(shù),不同于宏代碼片段。內(nèi)聯(lián)函數(shù)聲明符inline 必須要和函數(shù)定義結(jié)合在一起,不能放在聲明處,否則編譯器忽略內(nèi)聯(lián)請求。 雖然內(nèi)聯(lián)函數(shù)省時省空間,但是編譯器不一定準(zhǔn)許函數(shù)的內(nèi)聯(lián)請求,當(dāng)C++編譯器不允許內(nèi)聯(lián)請求時會將內(nèi)聯(lián)函數(shù)當(dāng)做普通函數(shù)處理。

      默認(rèn)參數(shù): C++中可以在函數(shù)聲明時為參數(shù)提供一個默認(rèn)值,當(dāng)函數(shù)調(diào)用時沒有提供這個參數(shù)的值,編譯器會自動用默認(rèn)值代替。但是在函數(shù)定義時就不在指定默認(rèn)參數(shù)值。默認(rèn)參數(shù)有如下規(guī)則:

      只有參數(shù)列表后面的部分參數(shù)才可以提供默認(rèn)參數(shù)值,一但在一個函數(shù)調(diào)用中開始使用默認(rèn)參數(shù),那么這個參數(shù)后的所有參數(shù)都必須使用默認(rèn)參數(shù),因此從開始使用默認(rèn)參數(shù)的使用開始都后面的參數(shù)都要提供默認(rèn)參數(shù),否則編譯器將報錯。總之,在函數(shù)聲明時,如果一個參數(shù)開始提供默認(rèn)參數(shù),那么后面的所有參數(shù)都要提供默認(rèn)參數(shù);在調(diào)用函數(shù)時,如果開始省略參數(shù),那么后面所有參數(shù)都使用默認(rèn)參數(shù)。

      函數(shù)占位參數(shù):占位參數(shù)是在函數(shù)定義時只有類型聲明,沒有參數(shù)名聲明的參數(shù)。一般情況下函數(shù)體內(nèi)部無法使用占位參數(shù)。但是在調(diào)用時必須提供完整的參數(shù)個數(shù)。可以給占位參數(shù)提供默認(rèn)參數(shù)。意義:為函數(shù)的后續(xù)版本的擴(kuò)展埋下伏筆;兼容C語言中的不規(guī)范寫法。

      函數(shù)重載:簡單來說函數(shù)重載就是用同一個函數(shù)名來定義不同的函數(shù)。那編譯器是如何區(qū)分這些函數(shù)的呢?事實上,編譯器是通過參數(shù)列表來區(qū)分重載了的函數(shù)。即重載函數(shù)擁有不同的參數(shù)列表。不同的參數(shù)列表包括參數(shù)個數(shù)不同、參數(shù)類型不同、參數(shù)順序不同,即滿足上述三個條件之一就能構(gòu)成重載函數(shù)。函數(shù)重載在構(gòu)造函數(shù)中是非常有用的。

      當(dāng)函數(shù)默認(rèn)參數(shù)遇上函數(shù)重載會發(fā)生什么神奇的情況?假設(shè)這樣的情況:程序當(dāng)中定義兩個重載函數(shù),其中一個函數(shù)有一個默認(rèn)參數(shù),在主函數(shù)調(diào)用這個函數(shù)。能不能編譯過呢?

      經(jīng)過編譯器的驗證,當(dāng)函數(shù)默認(rèn)參數(shù)遇上函數(shù)重載,編譯時沒有問題的,但是調(diào)用時會發(fā)生函數(shù)二義性的錯誤。因此在程序中不能同時使用函數(shù)默認(rèn)參數(shù)和函數(shù)重載。

      編譯器調(diào)用重載函數(shù)的準(zhǔn)則:

      l 將所有的同名函數(shù)作為候選者

      l 嘗試尋找可行的候選函數(shù)

      & 精確匹配實參

      & 通過默認(rèn)參數(shù)匹配實參

      & 通過默認(rèn)類型轉(zhuǎn)換匹配實參

      l 匹配失敗

      & 最終找到的可行候選函數(shù)不唯一,出現(xiàn)二義性,編譯失敗

      & 無法匹配所有候選者,函數(shù)未定義,編譯失敗

      注意:重載函數(shù)與返回值類型沒有半毛錢關(guān)系。

      當(dāng)重載函數(shù)賦值給函數(shù)指針時發(fā)生:

      1).根據(jù)重載規(guī)則挑選與函數(shù)指針參數(shù)列表一致的候選者

      2).嚴(yán)格匹匹配候選者的函數(shù)類型與函數(shù)指針的函數(shù)類型

      只有上述兩個不步驟都成功時才能匹配成功,成功調(diào)用正確的函數(shù)。

      C 與 C++ 互相調(diào)用:可以使用extern關(guān)鍵字強(qiáng)制讓C++編譯器對代碼使用C的方式進(jìn)行編譯。如 extern “C” { content}

      使用如下處理統(tǒng)一處理: __cplusplus 是C++編譯器內(nèi)置的標(biāo)準(zhǔn)宏定義,讓C代碼既可以通過C編譯器的編譯,也可以在C++ 編譯器中以C方式編譯。

      #ifdef __cplusplus

      extern “C”{

      #endif

      //函數(shù)聲明或者函數(shù)定義

      #ifdef __cplusplus

      }

      #endif

      C++ 新關(guān)鍵字:

      new 和delete 動態(tài)內(nèi)存分配和釋放

      變量申請 數(shù)組申請

      type* pointer = new type; type* pointer = new type[N]; //申請內(nèi)存

      //……. //……. //使用內(nèi)存

      delete pointer delete[] pointer //釋放內(nèi)存

      可以看出,new出來的內(nèi)存空間不像普通變量那樣有一個別名,只有一個地址賦給指針,訪問都必須通過指針。

      new 與 malloc 函數(shù)的區(qū)別:

      l malloc 是C庫提供的函數(shù),new關(guān)鍵字是C++ 的一部分

      l new 以具體類型為單位進(jìn)行內(nèi)存分配,malloc只能以字節(jié)為單位進(jìn)行內(nèi)存分配

      l new 在申請單個類型變量時可以進(jìn)行初始化,malloc 不具備初始化的特性

      名稱空間(namespace) :

      C語言中所有的全局標(biāo)識符共享同一個作用域:全局作用域,C++將全局作用域分成不同的部分,每個部分就是一命名空間,不同命名空間里的標(biāo)識符可以同名而不會發(fā)生沖突,并且命名空間可以嵌套。值得注意的是全局作用域也叫默認(rèn)命名空間。

      命名空間的使用:

      l 使用整個命名空間:using namespace name;

      l 使用命名空間中的變量: using name ::variable

      l 使用默認(rèn)命名空間 :: variable

      類的靜態(tài)成員:靜態(tài)成員函數(shù)+靜態(tài)成員變量

      類的靜態(tài)成員變量:存儲在全局?jǐn)?shù)據(jù)區(qū)、不依賴于任何一個對象的類成員變量。

      語法規(guī)則:type classname ::varname

      類的靜態(tài)成員函數(shù):

      語法規(guī)則 : 加上static 修飾符

      v 在C++中可以定義靜態(tài)成員變量和靜態(tài)成員函數(shù)

      v 靜態(tài)成員屬于整個類所有,不需要依賴任何對象

      v 可以通過類名直接訪問public靜態(tài)成員

      v 可以通過對象名訪問public靜態(tài)成員

      v 靜態(tài)成員函數(shù)可以直接訪問靜態(tài)成員變量

      定義靜態(tài)成員變量:

      à在定義類時通過static 修飾成員成員變量可以將變量定義成靜態(tài)成員變量

      à靜態(tài)成員變量不依賴任何對象,需要在類的定義外面單獨分配空間:

      type Classname::Varname;

      靜態(tài)成員函數(shù)的定義:

      è 在定義時直接通過static 關(guān)鍵字修飾,其他的部分與普通的成員函數(shù)定義相同。

      注意:C++ 類對象中的成員函數(shù)和成員變量是分開存儲的

      à成員變量:普通的成員變量存儲在對象中,跟struct 變量有相同的內(nèi)存分布和字節(jié)對齊方式;靜態(tài)成員變量:存儲在全局?jǐn)?shù)據(jù)區(qū);

      à成員函數(shù):存儲于代碼段中

      靜態(tài)成員函數(shù)和普通成員函數(shù)的區(qū)別:

      l 靜態(tài)成員函數(shù)不包含指向具體對象的指針 this, 但是普通成員函數(shù)包含有一個指向?qū)ο蟊旧淼闹羔槪簍his 指針

      繼承:子類擁有父類的所有成員函數(shù)和成員變量、子類就是一種特殊的父類、子類對象可以當(dāng)做父類對象使用、子類擁有父類沒有的方法。

      C++中的訪問級別與繼承:

      public 繼承:父類成員在子類中保持原有的訪問級別

      class child :pubic parent

      private繼承:父類成員在子類中是private訪問級別

      class child : parent ßàclass child :private parent

      C++默認(rèn)是私有繼承:子類從父類繼承得到的成員默認(rèn)是私有的。

      因為父類的private 成員在子類中不能被子類訪問,因此出現(xiàn)一個新的訪問級別:protected

      類的protected 成員:

      l Protected 成員可以在子類中被訪問,但不能再外界被訪問

      l Protected 成員的訪問權(quán)限介于public 和private 這兩個級別之間

      類成員訪問級別設(shè)置的原則:

      l 需要被外界訪問的直接設(shè)置為public

      l 只能在當(dāng)前類中訪問的成員設(shè)置為private

      l 只能在當(dāng)前類和子類中訪問的成員設(shè)置為protected

      注:private 成員在子類中仍然存在,但是卻無法訪問。

    【C++語法規(guī)則積累】相關(guān)文章:

    法語語法之語禁止聯(lián)誦規(guī)則03-08

    精選C++面試題及答案05-23

    概述C++語言特點12-09

    介詞英語的語法02-17

    英語的語法口訣01-13

    日語初級語法03-08

    托福語法解析12-30

    泰語語法教學(xué)03-06

    2016年c++經(jīng)典面試題及答案03-19

    主站蜘蛛池模板: 亚洲欧美精品综合中文字幕| 久久精品无码午夜福利理论片| 精品人体无码一区二区三区| 色妞ww精品视频7777| 国产高清在线精品一区二区三区 | CAOPORM国产精品视频免费 | 中文字幕精品久久久久人妻| 国产乱码精品一区二区三| 国产精品久久成人影院| 日韩精品无码久久久久久 | 久久Av无码精品人妻系列| 国产成人毛片亚洲精品| 久久亚洲欧美国产精品| 午夜国产精品无套| 国产精品无码专区在线观看| 久久国产精品99精品国产987| 精品一区二区三区在线观看视频| 亚洲精品专区在线观看| 国产午夜精品久久久久九九电影| 一本一道久久精品综合| 九九精品免视看国产成人| 国产成人精品日本亚洲18图| 久久国产精品无码HDAV| 久久久精品人妻一区二区三区四| 亚洲精品卡2卡3卡4卡5卡区| 最新国产精品无码| 亚洲一区精品无码| 无码精品黑人一区二区三区| 中文字幕精品亚洲无线码一区应用| 欧洲精品一区二区三区在线观看 | 亚洲国产精品嫩草影院久久| 老子影院午夜精品无码 | 亚洲欧美精品综合中文字幕 | 亚洲欧洲国产精品你懂的| 久热这里只精品99re8久| 久久国产精品-国产精品| 精品在线免费观看| 丁香色婷婷国产精品视频| 亚洲精品电影网| 国产精品制服丝袜亚洲欧美 | 精品国产午夜肉伦伦影院|