C 第一章簡單介紹(c和c 中的一些區別)

2021-09-29 12:25:59 字數 2589 閱讀 6890

c語言中的 struct 只能包含變數,而 c++ 中的 class 除了可以包含變數,還可以包含函式。例如:display() 是乙個用來處理成員變數的函式,在c語言中,我們將它放在了 struct student 外面,它和成員變數是分離的;而在 c++ 中,我們將它放在了 class student 內部,使它和成員變數聚集在一起,看起來更像乙個整體。

結構體和類都可以看做一種由使用者自己定義的複雜資料型別。通過結構體定義出來的變數還是叫變數,而通過類定義出來的變數有了新的名稱,叫做物件(object)。

物件導向程式設計在**執行效率上絕對沒有任何優勢,它的主要目的是方便程式設計師組織和管理**,快速梳理程式設計思路,帶來程式設計思想上的革新。

三種使用方式

以namesp li為例

1.li::fp 僅針對這一次使用 下次使用還需要說明

2.using li::fp 僅針對當前作用域中的fp

3.using namespace li; 當前作用域中li內的都可以使用

命名空間內部不僅可以宣告或定義變數,對於其它能在命名空間以外宣告或定義的名稱,同樣也都能在命名空間內部進行宣告或定義,例如類、函式、typedef、#define 等都可以出現在命名空間中。

cout 和 cin 都是 c++ 的內建物件,而不是關鍵字。c++ 庫定義了大量的類(class),程式設計師可以使用它們來建立物件,cout 和 cin 就分別是 ostream 和 istream 類的物件,只不過它們是由標準庫的開發者提前建立好的,可以直接拿來使用。這種在 c++ 中提前建立好的物件稱為內建物件。

cin和cout後面會詳細講解

c語言中的用const修飾的變數可以通過指標更改

c++中的 const 更像編譯階段的 #define,但是#define是在預處理階段完成,c++中的const是在編譯階段完成

c語言對 const 的處理和普通變數一樣,會到記憶體中讀取資料;c++ 對 const 的處理更像是編譯時期的#define,是乙個值替換的過程。

c語言中的 const 變數在多檔案程式設計時的表現和普通變數一樣,除了不能修改,沒有其他區別。

c++ 規定,全域性 const 變數的作用域仍然是當前檔案,但是它在其他檔案中是不可見的。

c和c++中全域性 const 變數的作用域相同,都是當前檔案,不同的是它們的可見範圍:c語言中 const 全域性變數的可見範圍是整個程式,在其他檔案中使用 extern 宣告後就可以使用;而c++中 const 全域性變數的可見範圍僅限於當前檔案,在其他檔案中不可見,所以它可以定義在標頭檔案中,多次引入後也不會出錯。

函式呼叫是有時間和空間開銷的。c++ 提供一種提高效率的方法,即在編譯時將函式呼叫處用函式體替換,類似於c語言中的巨集展開。這種在函式呼叫處直接嵌入函式體的函式稱為內聯函式(inline function)

注意,要在函式定義處新增 inline 關鍵字,在函式宣告處新增 inline 關鍵字雖然沒有錯,但這種做法是無效的,編譯器會忽略函式宣告處的 inline 關鍵字。

可以用內聯函式來代替巨集定義,內聯函式可以定義在標頭檔案中(不用加 static 關鍵字),並且標頭檔案被多次#include後也不會引發重複定義錯誤。內聯函式在編譯時會將函式呼叫處用函式體替換,編譯完成後函式就不存在了,所以在鏈結時不會引發重複定義錯誤。

內聯函式看起來簡單,但是有很多細節需要注意,從**重複利用的角度講,內聯函式已經不再是函式了。我認為將內聯函式作為帶參巨集的替代方案更為靠譜,而不是真的當做函式使用。

在多檔案程式設計時,我建議將內聯函式的定義直接放在標頭檔案中,並且禁用內聯函式的宣告(宣告是多此一舉)。

定義:在c++中,定義函式時可以給形參指定乙個預設的值,這樣呼叫函式時如果沒有給這個形參賦值(沒有對應的實參),那麼就使用這個預設的值。也就是說,呼叫函式時可以省略有預設值的引數。如果使用者指定了引數的值,那麼就使用使用者指定的值,否則使用引數的預設值。

c++規定,預設引數只能放在形參列表的最後,而且一旦為某個形參指定了預設值,那麼它後面的所有形參都必須有預設值

函式的預設引數和函式過載盡量不用同時使用

函式的過載的規則:

函式名稱必須相同。

引數列表必須不同(個數不同、型別不同、引數排列順序不同等)。

函式的返回型別可以相同也可以不相同。

僅僅返回型別不同不足以成為函式的過載。

c ++**在編譯時會根據引數列表對函式進行重新命名,例如void swap(int a, int b)會被重新命名為_swap_int_int,void swap(float x, float y)會被重新命名為_swap_float_float。當發生函式呼叫時,編譯器會根據傳入的實參去逐個匹配,以選擇對應的函式,如果匹配失敗,編譯器就會報錯,這叫做過載決議.從這個角度講,函式過載僅僅是語法層面的,本質上它們還是不同的函式,占用不同的記憶體,入口位址也不一樣。

型別提公升和型別轉換不是一碼事!型別提公升是積極的,是為了更加高效地利用計算機硬體,不會導致資料丟失或精度降低;而型別轉換是不得已而為之,不能保證資料的正確性,也不能保證應有的精度。型別提公升只有上表中列出的幾種情況,其他情況都是型別轉換。

第一章 C的基本介紹

1 int一般為4個位元組,每個位元組為8bit,以補碼形式儲存在記憶體中 字元型同樣如此 數值範圍 32768 32767,因為數值0已經存在,其補碼為31個全0和1個符號位0,所以規定負0的補碼為儲存的最大數值 32768。2 float一般佔8個位元組,記憶體中以規範化的指數形式儲存,eg 3...

第一章 從C到C 的一些變化 總結

language cc 名稱結構體類成員 成員變數 成員變數 屬性 成員函式 方法 定義結構體變數 物件 例項 定義的過程叫例項化 old c library new c library iostream.h,fstream.h,complex.h iostream,fstream,complex ...

第一章 C 程式設計

今天終於下定決心將資料結構與演算法重新在複習一遍,先是c 的一些比較容易忘記的特性簡單的溫習一遍 包括遞迴呼叫,異常操作,類模板,函式模板等等,這三天寫得原始碼如下 book name c structure and algorithm filename chapter1.cpp version 1...