修煉C 基礎知識筆記 第7章 類

2021-09-02 05:26:57 字數 2134 閱讀 1018

1 this 

任何對類成員的直接訪問都被看成this的隱式引用,this是乙個常量指標 (class *const),不允許改變this中儲存的位址。

常量成員函式:在引數列表後面加乙個const,表示this是乙個指向常量的指標(const class *const this);

不能再乙個常量物件上呼叫普通的成員函式,因為this是乙個指向非常量的常量指標,因此無法將常量成員賦給this指標,這時在引數列表之後新增乙個const可以解決問題,所以說這個const其實是將this修改為指向常量的常量指標。

2 建構函式

1)建構函式的名字和類名相同

2)建構函式沒有返回型別

3)建構函式不能被宣告為const型別。

4)建立類的const物件時,直到建構函式完成初始化,物件才能真正取得其常量屬性。

3 合成預設建構函式

預設建構函式,不接受任何引數,因此在類中可以定義預設建構函式,但是問題在於若程式定義了其他建構函式的話,那麼編譯器是否還會生成這個,還是根據編譯器而異???。

若程式沒有顯式的定義建構函式,則編譯器會合成乙個預設建構函式(合成預設建構函式)。

預設建構函式的初始化類的規則為:

1)如果存在類內的初始值,用它來初始化成員(c++11新標準)

2)否則,預設初始化該成員。

4 合成預設建構函式的風險

合成預設建構函式適合那些簡單的類

1)定義在塊中的內建型別或復合型別被預設初始化的話,那麼它的值是未定義的。

2) 有時候編譯器無法為某些情況下生成預設建構函式,如類中包含其他類型別,若類中的類型別沒有預設初始化函式,則編譯器無法合成預設初始化函式。

5 =default

c++11新標準中,如果需要預設行為,那麼可以通過在引數列表後面寫上=default來要求編譯器生成建構函式。

6 某些類不能依賴於合成的版本(先記者,之後再來補充)

管理動態記憶體的類。vector string等有完備的資源管理 在類中無需擔心其構造和析構,賦值問題。

7 訪問許可權實現了封裝。

class 預設訪問許可權是private,在第乙個訪問控制符之前是這樣。

struct 預設訪問許可權是public。

8 封裝

所謂封裝就是將類的實現的細節隱藏起來,讓外界無法直接使用,只能通過某些特定的方式才能訪問。

封裝的目的是增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是通過外部介面以及特定的訪問許可權來使用類的成員。

優點:1 確保使用者**不會無意間破壞封裝物件的狀態。其實提供訪問方式還是可能被修改,但是可以降低風險。

2 被封裝的類的具體實現細節可以隨時改變,而無須調整使用者級別的**。

9 友元函式

友元宣告只能出現在類定義的內部,雖然不受訪問控制符的限制但是最好集中定義在第乙個控制符之前。

友元函式需要兩個宣告,乙個在函式體中,乙個在函式外,這兩個最好放在同乙個標頭檔案中。

類的外部也需要該函式相應的宣告,從而使得該函式可見。

struct x

x() //錯誤:f還沒有被宣告

void g();

void h();

};void x::g() //錯誤:f還沒有被宣告

void f(); //宣告那個定義在x中的函式

void x::h() //正確:現在f的宣告在作用域中了

10 函式過載

函式過載包括一般的函式在其作用域內,還有就是成員函式。(之前一直以為只有類成員函式才可以,誤解了)

11 可變資料型別

即使是在const類也可以被修改,在變數的宣告中加入mutable 關鍵字。乙個const成員函式可以改變乙個可變成員的值(按理說不可以)。

12 *this

從const成員函式返回*this,之前提過的const 改變了this 的型別,因此需要注意的是需要注意此時返回*this 引用的話返回值的型別。

13 類的作用域

類的定義分兩步處理:

首先,編譯成員的宣告。

直到類全部可見後才編譯函式體。

型別名要特殊處理,一般情況下,內層作用域可以重新定義外層作用域中的名字,即使該名字已經在內層已經使用過。但是型別名不可以,所以型別名需要在類開始就定義,這樣保證了類內用的一直是同一種型別。

第01章 基礎知識

1.1 組合語言的組成 組合語言發展至今,由以下3類指令組成 彙編指令 機器碼的助記符,有對應的機器碼。偽指令 沒有對應的機器碼,由編譯器識別,計算機並不執行。其他符號 如 等,由編譯器識別,沒有對應的機器碼。組合語言的核心是彙編指令,它決定了組合語言的特性。1.2 指令和資料 指令和資料是應用上的...

第1章 基礎知識

機器語言是機器指令的集合,由0和1組成,但是很長很複雜,組合語言因此產生。組合語言的主體是彙編指令。彙編指令是機器指令的便於記憶的書寫格式。程式設計師寫完彙編指令通過編譯器轉換為機器碼,機器碼再傳到計算機執行。組合語言有以下三類 1彙編指令 助記符,有對應機器碼 2.偽指令 沒有對應機器碼,編譯器執...

學習筆記 第5章 網路基礎知識

1 從硬體角度看,計算機網路由如下裝置組成 1 計算機及終端裝置,通稱為主機 host 其中部分host充當伺服器,部分host充當客戶端。2 前端處理機 fep 或通訊處理機或通訊控制處理機 ccp 負責傳送 接手資料,最簡單的ccp是網絡卡。3 路由器 交換機等連線裝置。交換機將計算機連線成網路...