總結 C 真是博大精深(一)

2021-08-05 19:37:26 字數 4542 閱讀 2149

c++的輸入/輸出和非物件導向的一些特性

(最終解釋權歸原文作者所有,侵權必究)

1、c++語言是c語言的超集,c語言中的表示式、語句、函式等在c++中仍然可以使用,c++語言是物件導向的語言,但是也包含一些非物件導向的特性。

2、#include是編譯預處理命令,用於指示編譯器在進行程式預處理時,將檔案iostream中的**展開在該命令所在的位置。iostream是c++系統中定義的乙個標頭檔案,該檔案中宣告了與輸入/輸出有關的資訊,如流物件cin、cout和運算子<<、>>的定義等。

3、usingnamespace std;的意思是使用命名空間std。通過命名空間,可以保證不發生命名衝突。std是標準c++指定的乙個命名空間,標準c++庫里的所有識別符號(如cin、cout等)都是在此命名空間中定義的,在使用這些識別符號時,通過語句using namespace std;告訴編譯器這些識別符號可以在命名空間std中找到。

4、cout是標準輸出流物件,與標準輸出物件相關聯。這裡的標準輸出裝置通常指顯示器。運算子《在c語言中表示位左移操作。在c++語言中,《除了表示左移操作外,還可以用於輸出,即將《右邊的資料寫到標準輸出流物件cout中,在顯示器上進行顯示,cout通常與《結合使用。

5、cin是標準輸入流物件,與標準輸入裝置相關聯。這裡的標準輸入裝置通常指鍵盤。運算子》在c語言中表示位右移操作。在c++語言中,>>除了表示右移操作外,還可以用於輸入,即將從標準輸入流物件(鍵盤)中讀取的值傳送給右邊的變數。cin通常與》結合使用。

6、⑴允許通過《輸出多個資料。

⑵允許輸出表示式的值。

⑶運算子》允許使用者從鍵盤輸入多個資料。它按照順序從鍵盤輸入中提取多個資料,並依次存到相對應的變數中。注意,在通過鍵盤進行多個資料的輸入時,兩個資料之間要使用空格或者回車或者tab鍵進行分隔。

⑷可以對輸入/輸出資料的格式進行控制。如可以通過操作符dec、hex和oct以不同進製的形式顯示資料,其中dec是將基數設為十進位制,hex是將基數設為十六進製制,oct是將基數設為八進位制,預設十進位制。

7、在c++語言中,結構體、聯合體和列舉名可直接作為型別名使用。不需要像c語言中的那樣,在結構體、聯合和列舉名的前面分別冠以struct、union、enum。

8、動態記憶體分配是指在程式執行時分配記憶體空間。動態記憶體分配的好處在於可以根據需要分配適當大小的記憶體空間,使用靈活。動態記憶體分配與釋放是對程序記憶體空間的堆區進行操作。c++中可以通過new和delete運算子實現動態記憶體的分配與釋放。

⑴new的使用:new型別名;new 型別名(初值);new 型別名[表示式]

new運算子返回所分配記憶體空間的起始位址,通常需要把該返回值賦值給乙個指標變數,以進行所分配記憶體的訪問。new運算子完成兩個工作:首先,根據物件的型別在自由儲存區中分配適量的空間;其次,返回所分配空間的起始位址。當沒有可用記憶體用於new操作時,new會返回0或丟擲乙個bad_alloc異常。

⑵delete的使用:delete指標變數名;delete 指標變數名;

delete運算子用於釋放new運算子所分配的空間,以使得該空間能夠被重新使用。delete運算子的返回型別是void,因此它不能返回值。

9、在c++語言中,允許在**塊的任何地方定義區域性變數。一般來說,在較短的函式**中,將區域性變數在函式開始位置集中定義比較好,這樣在**維護時能夠迅速確定變數的定義位置;而在**較長的大函式中,通常在靠近變數使用位置的地方定義變數較為合適,這樣方便對程式變數的檢視和使用。

10、引用就是另乙個變數的別名;也就是說,引用和它所指的變數是同乙個實體。引用的主要用途之一是作為函式的引數使用,在作為函式引數方面,它可以起到與指標引數相同的作用,但使用較指標引數要簡便。

11、當將引用作為函式引數時,除了在函式的形參宣告時需要加上引用符&之外,在其他使用的地方均不需要出現引用符&,而指標作為函式引數時,不但要在函式形參宣告時加上符號*,而且在函式體操作指標所指向的空間時,還要加上間接訪問操作符*,另外,在進行函式呼叫時,如果外部變數本身不是位址,則需要通過取位址符&取得外部變數的位址,然後傳給函式相應的指標型別的形參。

12、通常情況下,在宣告乙個引用時,要對其進行初始化,型別 &引用名 = 已定義的變數名。

13、引用和指標的區別:

⑴引用和指標都可以通過乙個變數訪問另乙個變數。但訪問時的語法形式不同。引用採用的是直接訪問形式,而指標採用的是間接訪問形式。

⑵當作為函式引數使用時,引用所對應的實參是某個變數的名字,而指標所對應的實參是某個變數的位址。引用在作為函式引數使用時,其效果與指標相同,但使用更方便。

⑶引用在定義時被初始化,其後不能被改變(即不能再成為另乙個變數的別名);而指標則可以通過重新賦值的方式,指向另乙個變數(另一段記憶體空間)。

14、引用還可以作為函式返回值使用。當引用作為函式返回值使用時,函式呼叫可以出現在賦值運算子的左邊;而通常情況下,函式呼叫是不能出現在賦值運算子左邊的。

⑴當引用不作為函式引數或函式返回值使用時,在宣告引用時,必須同時對其進行初始化,不能先宣告,後賦值。

⑵對引用本身提供的初始化值,本身可以是乙個引用。

⑶引用和取位址操作符的符號均為&,但二者的含義是不同的。

15、const關鍵字可以對變數進行修飾,以說明該變數是不可修改的。當const用於修飾函式引數時,說明該函式引數不能被該函式修改。使用const修飾符定義的變數是常值變數。該常值變數具有型別,而且有位址,可以通過指標進行讀取,但是其值不能被修改。在通過c++編寫程式時,通常使用const常量取代#define巨集定義指令定義的符號常量。使用const定義常量可以避免這種因使用巨集替換時不小心而造成的邏輯錯誤,更安全。

16、使用const關鍵字可以修飾指標,根據const出現的位置,可以分為三類:指向常量的指標,常指標和指向常量的常指標。

⑵常指標:int * const np =new int(5);該指標變數的值是常量,不允許被直接賦值,可以修改該指標所指向空間的內容。

⑶指向常量的常指標:const int *const np = new int(5);不能通過該指標變數修改其所指向的內容,也不能給該指標變數重新賦值。

17、當函式的形參是指標或者引用型別時,為了防止函式修改指標或引用所指向的記憶體資料,可以把形參定義為指向常量的指標或常引用。常引用所謂說明形式如下:const 型別 &引用名。

18、在c++程式中,如果函式呼叫出現在函式的定義之前,則必須在呼叫函式之前給出函式宣告,它包括函式返回型別、函式名稱、函式形參列表三個元素。其中函式形參列表可以只包括形參型別,省略形參名稱。這三個元素被稱為函式原型,函式原型描述了函式的介面。函式宣告的目的是讓編譯器能夠檢查函式呼叫時傳入的引數是否給出的函式宣告相符合,從而減少程式設計時的差錯。另外,通過進行函式宣告,可以使程式的結構更清晰。

⑴在c++程式中,如果函式的定義在函式呼叫之後,則必須在呼叫之前給出函式宣告。但如果函式的定義在前,呼叫在後,則不必給出函式宣告,因為這時函式定義的首部已經起到了函式宣告的作用。

⑵如果函式宣告或定義中沒有給出函式的返回值型別,則其預設型別為int。如果乙個函式沒有返回值,則必須在其函式宣告及定義中寫出其函式返回型別是void。這時可以在函式定義中省略return語句。在c++語言中,如果在函式宣告中沒有標明引數,則說明該函式的參數列為空(void),即該函式不帶任何引數。

19、內聯函式又稱為內建函式。當程式中出現對內聯函式呼叫時,c++編譯器直接將函式中的**插到呼叫該函式的語句處,同時用實參來代替形參。使用內聯函式的好處是減少了函式呼叫所產生的額外開銷,可以提高程式執行的效率。通常情況下,對於要頻繁呼叫的函式,如果其函式體中的**很短,可以將其定義為內聯函式。函式定義:inline 返回值 函式名(形參表)。

⑴在內聯函式的函式體中,不能有複雜的控制語句,如for語句和switch語句。

⑵使用內聯函式時,其函式體在使用位置被直接展開,這實際上是一種以空間換時間的方式。如果內聯函式較長,呼叫的位置又很多,就會大大加長程式**的長度,造成大的空間開銷。因此只有很短(1到5行語句)且呼叫頻繁的函式才考慮定義為內聯函式。

20、如果同名的兩個變數中,乙個是全域性的,另乙個是區域性的,那麼在區域性變數的作用域內,區域性變數將遮蔽掉全域性變數。如果在區域性變數的作用域內使用同名的全域性變數,要通過作用域運算子」::」來實現。

21、函式過載是指可以使用相同的函式名定義多個功能相同或類似的函式,這些函式的區別在於函式引數的型別或個數不同。

⑴當呼叫函式名相同的過載函式時,編譯器會根據實參的型別與個數來匹配這些過載函式,以決定呼叫哪乙個過載函式。

⑵在定義過載函式時,可以通過函式引數型別的不同區分不同的函式,也可以通過函式引數個數的不同來區分不同的函式。不能僅僅通過函式返回值型別的不同來區分不同的過載函式。

⑶在進行函式呼叫時,如果實參與形參的型別不同,編譯器會自動進行型別轉換,以匹配形參的型別。但在函式過載時,有時會出現問題。

22、在c++中,允許在函式宣告或函式定義時給函式的形參指定預設值。在進行帶預設引數函式的呼叫時,如果給出了實參,則將實參傳遞給形參;如果省略了實參,則將預設值傳遞給形參。

⑴在宣告帶預設引數的函式時,指定預設值的引數一定要在沒有預設值引數的右邊。

⑵在呼叫帶有預設引數的函式時,可以省略實參,直接使用形參的預設引數,也可以用實參來取代預設引數。

⑶如果定義的函式在函式呼叫之後,則在呼叫位置之前必須給出函式宣告。這時對形參的預設值指定在函式宣告中進行,而在後面的函式定義說明中不能再次給出預設值。如果函式的定義在函式呼叫之前,則直接在函式定義的函式說明中給出形參的預設值。

總結 C 真是博大精深(一)

c 的輸入 輸出和非物件導向的一些特性 最終解釋權歸原文作者所有,侵權必究 1 c 語言是c語言的超集,c語言中的表示式 語句 函式等在c 中仍然可以使用,c 語言是物件導向的語言,但是也包含一些非物件導向的特性。2 include是編譯預處理命令,用於指示編譯器在進行程式預處理時,將檔案iostr...

總結 C 真是博大精深(三)

派生類與繼承 最終解釋權歸原文作者所有,侵權必究 1 繼承是物件導向程式設計的重要特徵之一,通過繼承,可以實現 重用。在c 中,繼承就是利用已有的類,通過派生的方式產生新的類。新類不但繼承了已有類的屬性和方法,而且可以增加新的屬性和方法。2 在c 中,可以在已有類的基礎上構建新類,這個新類繼承了已有...

漢語真是博大精深啊

漢語真是博大精深啊,轉自網易評論 某天一學校老師舉行婚禮。各科研組為祝賀新人增添喜慶氣氛,就各自寫了一副對聯送去。第乙個是政治組寫的,下聯 幾進幾齣不是野蠻侵入,造就一代新人。橫批 生命在於運動。語文組寫的是,上聯 新人新床新被褥共享新歡,下聯 好疼好癢好舒服同幹好事。數學組也寫了,上聯是 開括號解...