激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

C++語(yǔ)法規則積累

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

C++語(yǔ)法規則積累

  面向對象程序設計,是針對開(kāi)發(fā)較大規模的程序而提出來(lái)的,目的是提高軟件開(kāi)發(fā)的效率。下面是小編整理的關(guān)于C++語(yǔ)法表達式規則的建立基礎,希望大家認真閱讀!

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

  將一個(gè)其他類(lèi)型的數據賦給布爾類(lèi)型變量:C++編譯器會(huì )將所有的非0的值轉換為true(1),將0 轉化為false(0)。

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

  引用:

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

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

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

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

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

  C++ 函數探幽:

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

  默認參數: C++中可以在函數聲明時(shí)為參數提供一個(gè)默認值,當函數調用時(shí)沒(méi)有提供這個(gè)參數的值,編譯器會(huì )自動(dòng)用默認值代替。但是在函數定義時(shí)就不在指定默認參數值。默認參數有如下規則:

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

  函數占位參數:占位參數是在函數定義時(shí)只有類(lèi)型聲明,沒(méi)有參數名聲明的參數。一般情況下函數體內部無(wú)法使用占位參數。但是在調用時(shí)必須提供完整的參數個(gè)數?梢越o占位參數提供默認參數。意義:為函數的后續版本的擴展埋下伏筆;兼容C語(yǔ)言中的不規范寫(xiě)法。

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

  當函數默認參數遇上函數重載會(huì )發(fā)生什么神奇的情況?假設這樣的情況:程序當中定義兩個(gè)重載函數,其中一個(gè)函數有一個(gè)默認參數,在主函數調用這個(gè)函數。能不能編譯過(guò)呢?

  經(jīng)過(guò)編譯器的驗證,當函數默認參數遇上函數重載,編譯時(shí)沒(méi)有問(wèn)題的,但是調用時(shí)會(huì )發(fā)生函數二義性的錯誤。因此在程序中不能同時(shí)使用函數默認參數和函數重載。

  編譯器調用重載函數的準則:

  l 將所有的同名函數作為候選者

  l 嘗試尋找可行的候選函數

  & 精確匹配實(shí)參

  & 通過(guò)默認參數匹配實(shí)參

  & 通過(guò)默認類(lèi)型轉換匹配實(shí)參

  l 匹配失敗

  & 最終找到的可行候選函數不唯一,出現二義性,編譯失敗

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

  注意:重載函數與返回值類(lèi)型沒(méi)有半毛錢(qián)關(guān)系。

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

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

  2).嚴格匹匹配候選者的函數類(lèi)型與函數指針的函數類(lèi)型

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

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

  使用如下處理統一處理: __cplusplus 是C++編譯器內置的標準宏定義,讓C代碼既可以通過(guò)C編譯器的編譯,也可以在C++ 編譯器中以C方式編譯。

  #ifdef __cplusplus

  extern “C”{

  #endif

  //函數聲明或者函數定義

  #ifdef __cplusplus

  }

  #endif

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

  new 和delete 動(dòng)態(tài)內存分配和釋放

  變量申請 數組申請

  type* pointer = new type; type* pointer = new type[N]; //申請內存

  //……. //……. //使用內存

  delete pointer delete[] pointer //釋放內存

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

  new 與 malloc 函數的區別:

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

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

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

  名稱(chēng)空間(namespace) :

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

  命名空間的使用:

  l 使用整個(gè)命名空間:using namespace name;

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

  l 使用默認命名空間 :: variable

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

  類(lèi)的靜態(tài)成員變量:存儲在全局數據區、不依賴(lài)于任何一個(gè)對象的類(lèi)成員變量。

  語(yǔ)法規則:type classname ::varname

  類(lèi)的靜態(tài)成員函數:

  語(yǔ)法規則 : 加上static 修飾符

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

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

  v 可以通過(guò)類(lèi)名直接訪(fǎng)問(wèn)public靜態(tài)成員

  v 可以通過(guò)對象名訪(fǎng)問(wèn)public靜態(tài)成員

  v 靜態(tài)成員函數可以直接訪(fǎng)問(wèn)靜態(tài)成員變量

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

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

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

  type Classname::Varname;

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

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

  注意:C++ 類(lèi)對象中的成員函數和成員變量是分開(kāi)存儲的

  à成員變量:普通的成員變量存儲在對象中,跟struct 變量有相同的內存分布和字節對齊方式;靜態(tài)成員變量:存儲在全局數據區;

  à成員函數:存儲于代碼段中

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

  l 靜態(tài)成員函數不包含指向具體對象的指針 this, 但是普通成員函數包含有一個(gè)指向對象本身的指針:this 指針

  繼承:子類(lèi)擁有父類(lèi)的所有成員函數和成員變量、子類(lèi)就是一種特殊的父類(lèi)、子類(lèi)對象可以當做父類(lèi)對象使用、子類(lèi)擁有父類(lèi)沒(méi)有的方法。

  C++中的訪(fǎng)問(wèn)級別與繼承:

  public 繼承:父類(lèi)成員在子類(lèi)中保持原有的訪(fǎng)問(wèn)級別

  class child :pubic parent

  private繼承:父類(lèi)成員在子類(lèi)中是private訪(fǎng)問(wèn)級別

  class child : parent ßàclass child :private parent

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

  因為父類(lèi)的private 成員在子類(lèi)中不能被子類(lèi)訪(fǎng)問(wèn),因此出現一個(gè)新的訪(fǎng)問(wèn)級別:protected

  類(lèi)的protected 成員:

  l Protected 成員可以在子類(lèi)中被訪(fǎng)問(wèn),但不能再外界被訪(fǎng)問(wèn)

  l Protected 成員的訪(fǎng)問(wèn)權限介于public 和private 這兩個(gè)級別之間

  類(lèi)成員訪(fǎng)問(wèn)級別設置的原則:

  l 需要被外界訪(fǎng)問(wèn)的直接設置為public

  l 只能在當前類(lèi)中訪(fǎng)問(wèn)的成員設置為private

  l 只能在當前類(lèi)和子類(lèi)中訪(fǎng)問(wèn)的成員設置為protected

  注:private 成員在子類(lèi)中仍然存在,但是卻無(wú)法訪(fǎng)問(wèn)。

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

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

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

概述C++語(yǔ)言特點(diǎn)12-09

介詞英語(yǔ)的語(yǔ)法02-17

英語(yǔ)的語(yǔ)法口訣01-13

日語(yǔ)初級語(yǔ)法03-08

托福語(yǔ)法解析12-30

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

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

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频