溫故而知新,總結過去,展望未來!
一、函式過載
c++中允許通過換名機制實現函式過載,函式過載是指在相同的作用域中,允許存在多個函式名相同的函式(存在條件:他們的引數個數、引數型別、引數排列必須不同,返回值型別不做要求)。
二、異常處理
所謂異常,就是程式執行到某乙個函式或者方法內部時候,出現了與程式涉及流程不一致的情況,即出錯。此時,為了防止程式繼續執行下去而導致程式崩潰或者出錯,需要對異常進行處理,怎麼處理呢?傳送乙個訊號給呼叫上一級函式,上一級函式收到訊號後,進行相應的處理。
使用教程
1、傳送訊號:
丟擲異常
throw 異常值;
2、監聽訊號
捕獲異常:
trycatch(異常值型別1 變數名)
catch(異常值型別2 變數名)
...
幾點注意事項:
1、丟擲異常後,如果沒有匹配成功,就會繼續將該異常值往上一級丟擲,知道被處理(捕獲),或者被作業系統終止(程式崩潰)
2、try和catch不能單獨使用
3、throw相當於return,異常值丟擲後,該函式也就停止執行了。
4、呼叫該函式的上一級函式收到throw過來的異常訊號後,將會進行嚴格的資料型別匹配,不會進行型別轉換!
5、throw的關鍵字用來丟擲異常,異常值可以任意的型別(基本型別、自定義型別)
三、c++中的型別轉換
1、傳統的型別轉換:
型別 變數 = (型別)表示式;
型別 變數 = 型別(表示式);
2、新風格型別轉換:
(1)、靜態轉換:
static_cast《目標型別》(待轉換的值);
用於基本型別之間的轉換,如 int 與char,int 與 double,int與enum...
用於void*與其他任意型別的指標之間的轉換
與傳統的強轉相比,static_cast意圖更加明顯,帶有型別檢查
(2)、重解釋轉換
reinterpret_cast《目標型別》(待轉換的值);
用於任意型別的指標之間的轉換,及指標與整數之間的轉換。
reinterpret_cast 不修改底層的資料,只是以不同的方式去解釋底層的資料
(3)去除常量轉換
const_cast《目標型別》(帶轉換的值);
用於移除指標或者引用 的cv修飾符(const & volatile)
四、字串型別
c++標準庫中提供了乙個自定義型別名為string,專門用來描述字串的
標頭檔案 #include
iostream包含了string
使用方法:
定義:
string str;//定義了乙個空的字串
string str("hello");//定義並初始化字串str
string str;//定義並初始化字串str
string str = "hello world!";
數**算:
+ +=
關係運算:
== != > >= < <=
逐個字元地比較ascii碼值
常用介面函式:
size()/length() 返回字串的長度,實際字元的個數,不包含'\0'
at() 返回字串中指定位置的那個字元,如果指定位置超過字串的長度,就會丟擲異常
c_str() 將c++中的字串轉換成c語言中的字串(const char *)
empty() 判斷字串是否為空,返回值是乙個bool型別
find() 查詢指定的 字元/字串,返回該 字元/字串 首次出現的位置
substr() 裁剪字串
swap() 交換兩個字串的內容
clear() 清空字串
五、bool型別
是c++的基本型別之一,用來表示邏輯概念,只有兩種值:真(true)和假(false),非零即為真。bool型別只佔乙個位元組。主要用於:(1)條件判斷 (2)做為函式的返回值
六、引用 reference
應用就是別名,就是給已經存在了的變數起的另外乙個名字(綽號、小名),主要用於 函式傳參、函式返回值
格式:
型別 &引用別名 = 已經存在的變數(物件)名;
引用與指標的區別:
指標可以指為空(null),但是引用不能為空。
指標定義完了以後,可以修改指向,引用不能修改指向。
指標的加減是改變指向,但是引用的加減是改變引用物件的值。
引用不佔記憶體空間, 不需要分配記憶體空間,但是指標需要分配空間。
指標的大小是固定的為4個位元組(用來儲存位址)(對於32位機),可以提高效率。
引用的優點:
不用重新開闢空間(不需要重新建立物件)
如果引數比較大的時候,建議使用引用作為函式的引數,可以提高效率。
常引用:為了防止值被修改
const int &引用別名 = 已經存在的變數(物件)名;
注: 給已經存在的變數起乙個別名,此時"&"稱為引用宣告符
引用在宣告 的同時,必須初始化,不能有空引用(null)。
引用一旦宣告完成,就不能再更改引用物件了。
函式返回引用時,不能返回區域性變數的引用
七、物件
在物件導向的程式設計中,所有東西(看得見、看不見的)都是物件。每個物件都有自己的屬性和行為
八、自定義型別 class
什麼是型別?
型別就是一種抽象概念(思想、觀點),是同型別物件的抽象,它包含該類所有物件都應該具有屬性和行為
有類 型別這麼乙個模板之後,我們就可以建立物件了,用型別來建立物件的這個過程,我們稱之為例項化乙個物件
如果我們在基礎類中找不到我們想要的模型(概念),我們可以自定義乙個類來表示
定義: class 自定義型別名
; 類成員:
一般用資料來表示屬性,用函式來表示行為(功能)
用來描述屬性的變數,稱之為 成員變數
用來實現行為(功能)的函式,稱之為,成員函式。
在類外定義成員函式
返回值型別 類名 :: 函式名(引數列表)
訪問修飾符:
public:公共的
在整個程式內部都可以被訪問,通常用來定義介面函式。
private:私有的
隱藏起來的,不能直接訪問,只可以通過類的成員函式或者友元函式來訪問。
protected:受保護的
隱藏起來的,不不能直接訪問,可以被類的成員或者友元函式 或者 子類 訪問
注: 在定義類時,如果沒有加訪問修飾符
1 C 學習筆記 記憶體模型
c 和c語言對於變數定義的方式型別,定義的不同方式確定了變數的生存週期 作用範圍以及可以被誰使用的 許可權 問題。一般來講我們把儲存的持續性簡稱為變數在程式中定義的位置,有以下三個位置 1.自動儲存持續性 簡稱自動變數,該變數定義在具體的函式塊中,並且不加 static 這種修飾符,該類變數從函式被...
Unity學習筆記(1) C 的相關筆記
主要分為兩種型別 1 值型別 直接儲存在記憶體的棧上面 2 引用型別 在記憶體的棧上面衍生出乙個引用,在記憶體的堆上面才會儲存具體的值 3 指標型別 僅在不安全專案中使用 值型別 1 內建型別,如int bool等 2 使用者可自定義的struct型別及列舉enum型別 所有的值型別均繼承於syst...
學習筆記1 c 實現LRU演算法
leetcode oj上有一道題目,要程式設計實現cache的lru演算法,剛看到這道題的時候,我想到了用佇列來做,但是若用單鏈表來做,必須要儲存尾節點的上乙個節點指標,才能實現快速增加一條資料,程式設計起來很不方便,所以我採用了雙端佇列實現,為了處理方便,儲存兩個帶節點指標,乙個節點的next指向...