第四章-類與物件
物件導向程式設計的主要特點 抽象、封裝、繼承、多型
類的訪問控制
物件所佔據的記憶體空間只用於存放資料成員,函式成員不在每乙個物件中儲存副本,每個函式的**在記憶體中只佔據乙份空間。
在類的成員函式中,既可以訪問目的物件的私有成員,又可以訪問當前類的其他物件的私有成員。
類成員函式的預設值,一定要寫在類定義中,而不能寫在類定義之外的函式實現中。
內聯成員函式
隱式宣告:將函式體直接放在類體內
顯式宣告:在函式體實現時,在函式返回值型別前加上inline
建構函式
作用:在物件被建立時利用特定的值構造物件,將物件初始化為乙個特定的狀態。
一些特殊的性質:建構函式的函式名與類名相同,而且沒有返回值;
建構函式通常被宣告為共有函式;
建構函式在物件被建立的時候被自動呼叫;
類中沒有寫建構函式,編譯器會自動生成乙個隱含的預設建構函式,引數列表和函式體皆為空
複製建構函式
作用:使用乙個已經存在的物件(由複製建構函式的引數指定),去初始化同類的乙個新物件。
具有一般建構函式的所有特性,其形參是本類的物件的引用。
如果程式設計師沒有定義類的複製建構函式,系統會自動生成乙個隱含的複製建構函式,它會把初始值物件的每個資料成員的值都複製到新建立的物件中。
複製建構函式被呼叫的三種情況:
複製建構函式的必要性:
可以有選擇、有變化的複製;
深複製必須編寫複製建構函式。
析構函式
作用:用來完成物件被刪除前的一些清理工作
析構函式是在物件的生存期即將結束的時刻被自動呼叫的。
析構函式不接收任何引數,沒有返回值,但可以是虛函式。
系統也可能生成乙個函式體為空的隱含析構函式。
類的組合
析構函式的呼叫執行順序與建構函式剛好相反
前向引用宣告
解決的問題:兩個類相互引用的情況,也稱迴圈依賴。
在引用未定義的類之前,將該類的名字告訴編譯器,使得編譯器知道那是乙個類名
注意⚠️:
在提供乙個完整的定義之前,不能定義該類的物件,也不能在內聯成員函式中使用該類的物件。
可以宣告該類的物件引用或指標。
當使用前向引用宣告時,只能使用被宣告的符號,而不能涉及類的任何細節。
結構體和聯合體
結構體與類的唯一區別:
對於未指定訪問控制屬性的成員,其訪問控制屬性
在類中,預設為私有型別private
在結構體中,預設為共有型別public
引入結構體的原因:
為了保持和c程式的相容,c++保留了struct關鍵字。
有時需要定義一些資料型別,它們沒有什麼操作,定義他們的目的只是將一些不同型別的資料組合成乙個整體,從而方便地儲存資料,此時可以定義結構體。
聯合體的特點與限制:
聯合體的全部資料成員共享同一組記憶體單元;
它的預設訪問控制屬性也是公共型別的;
聯合體變數中的成員同時至多只有乙個是有意義的;
聯合體的各個物件成員,不能有自定義的建構函式、析構函式和過載的複製賦值運算子,這些物件成員的物件成員也不能有;
聯合體不能繼承。
位域定義方式:
資料型別說明符 成員名 : 位數
出現的原因:
某些資料只需要幾個二進位制位就可以儲存,因此可以將類中多個這樣的資料成員「打包」,讓他們不必從整位元組開始,而是可以只佔據某些位元組的某幾位。
注意事項:
編譯器對打包的處理不同;
只有bool、char、int、enum的成員才可以被定義為位域;
位域雖然節省了記憶體空間,但是由於打包和解包的消耗,執行時間很有可能會增加。
建構函式定義型別轉換
explicit關鍵字使得該建構函式定義的型別轉換只能通過顯式轉換的方式完成。
當函式的實現與在類定義中的宣告是分離的,該關鍵字只能寫在類定義中的函式原型宣告處。
呼叫函式時物件引數的傳遞
通過執行棧,在主調函式和被調函式之間,有一塊二者都要訪問的公共區域,主調函式把實參值寫入其中,函式呼叫發生後,被調函式通過讀取這段區域就可得到形參值。
對於基本資料型別的引數,做一般的記憶體寫操作即可,但是對於物件引數,需要呼叫複製建構函式。
複製建構函式和賦值運算子的不同
複製建構函式可以用於產生物件;
賦值運算子要求左右兩邊的物件均已經存在;
複製建構函式需為指標變數分配記憶體空間,並將實參的值拷貝到其中;
而賦值操作符它實現的功能僅僅是將『=』號右邊的值拷貝至左值,賦值操作符必須檢測是否是自身賦值,若是則直接返回當前物件的引用而不進行賦值操作。
2023年9月c++筆試準備(五)
2023年9月C 筆試準備 五
第五章 資料的共享與保護 作用域函式原型作用域 在函式原型宣告時形式引數的作用範圍就是函式原型作用域 區域性作用域 函式形參列表中形參的作用域,從形參列表中的宣告處開始,到整個函式結束之處為止。函式體內宣告的變數,其作用域從宣告處開始,一直到宣告所在的塊結束的大括號為止。具有區域性作用域的變數也稱為...
Sperax月報 2023年9月
defi很火?各種 淘金 方式層出不窮 搶頭礦 搶空投 搬磚套利,再到發假幣和形形色色的詐騙 這其中,既有正常的投資行為,也有冒險的投機行為,更有依靠作惡而獲利的行為。在sperax看來,去中心化金融的道路還很長,遠不是像某些專案那樣蹭波熱度。這條路是需要認真和用心經營的,接下來,為您奉上本期spe...
2023年9月12日 網易
四題 第一題 第二題 給定乙個字串s,問該字串有多少個長度大於1的子串都是回文?回文 正序文本內容和 倒序文字內容都相同,如 aa,aba 輸入 字串 s,1 length s 100000 輸出 乙個整數,該字串內部有多少個字串都是回文 示例1輸入a輸出 0示例2 輸入abbcbb輸出4 原型 l...