類class
基礎知識:
一、c++類的定義方法
class classname;
類似結構體的定義,類的定義也必須是以分號「;
」作為結束標誌。
訪問許可權說明:有public、
private
和protected
三種訪問許可權,且一般乙個類裡會含有兩種訪問許可權說明,一是必須有
public
,而另乙個是
private
和protected
二選一。
public必需的原因:類具有封裝性,目的是為了資料隱藏,保護成員資料,但類又不得不與外界存在資料交流,故只能以
public
許可權下的成員
(一般是成員函式)作為公共介面來實現。
二、建立物件之後
以類名建立物件:
「classname object;」
對類的訪問和初始化:
不能像對結構體那樣,就直接通過花括號給類的物件整體初始化;
乙個類可以通過兩種途徑賦值:一是通過建構函式,即一已有的物件來初始化另乙個同型別的物件,且建議使用初始化列表來實現;二是通過成員函式實現,通過類的物件直接訪問相關成員函式,進而間接訪問成員資料並修改之的來實現。
訪問成員函式:
訪問格式 —— object.function()
若是想通過匿名類訪問,要這麼幹——calssname::function()
前者用的是
成員運算子「.
」,從結構那裡衍生來的;後者用的是 作用域解析運算子「::」
,雙冒號,這個符號在 區分命名空間
namespace
那也經常用到。
知識高階:
一、成員設計:
類 —— 體現c++
語言是一門物件導向程式設計語言的重要內容,物件導向四大特點:抽象,封裝,多型和繼承。
抽象,體現在
類是一種使用者自定義的資料結構型別,是認為設定、抽象出來的。
封裝,體現在資料隱藏上,也就是對成員資料的拒絕訪問的保護。
由於要訪問到資料成員,故需要設計成員函式,還有乙個是通過友元實現,但友元實際是破壞了封裝性。
多型,體現在c++的函式過載上,可以是成員函式過載,也可以是建構函式過載,還可以是友元函式過載,只要存在形參列表理論上就可以設計函式過載。
繼承,子類繼承基類,且存在三種繼承方式,還是那三個許可權說明關鍵字public、
private
和protected。
由於繼承經常會要求在子類中對基類的成員函式進行重寫,這也體現了c++的多型。
當然,還有虛函式。
二、函式過載,要求函式名稱相同而形參列表不同:
形參列表不同,多為引數型別或引數個數不同,與函式返回型別無關。當形參個數相同時,順序不同則分情況區別,同型別時不是過載、不同型別時是,
比如: fun(int i,double j)與
fun(double i, int j)
是函式過載,但若兩個引數都是
int型別,則不是過載了。
三、建構函式與析構函式:
使用者若是不自己實現類的建構函式和析構函式,那麼編譯器會生成預設的建構函式和析構函式,預設的是「不作為的」。
這有別於結構體的預設「建構函式」——能直接通過等號賦值的函式實現。
建構函式:作為類的成員函式之一,目的是為了給類的成員資料進行初始化操作,它的實現有特定的格式要求,即
建構函式的函式名必須與類名稱相同,且沒有返回值,不過可以有形參列表,也因此存在建構函式過載。
類的成員函式的兩種實現方式:
i 類內宣告並定義函式體;
ii 在類內宣告,但在類外定義函式體。
第一種與一般函式的實現沒啥區別,第二種的宣告也與一般函式的宣告是一樣的,不過在類外定義函式體時,函式頭也就是原先的宣告部分要有一定格式,常為:
返回型別 類名::函式名(形參列表)
其實也就只是要求說明作用域,不過為了是函式在這個類的作用域所以要在函式名稱前緊接限定域,也因此得把返回型別放在最開始部分。
回到建構函式的過載上來,由於沒有返回型別,建構函式的實現只是直接從限定域開始罷了。
析構函式:也是類的成員函式之一,一般是在
建構函式分配了記憶體空間(new)之後需要解除分配(
delete
),使用者才會實現。
析構函式實現格式:
類內實現是—— 「~
析構函式名(與類名相同)()」
類外是現實—— 「~
類名稱::
類名()」
析構函式沒有形參,故也就不存在析構函式過載。
乙個建構函式對應乙個析構函式,
且當乙個程式存在多個類的實現的時候,先構造的類後被析構、後構造的先被析構。
對了,當各個類之間存在繼承關係的時候,
基類先被構造後被析構,子類後被構造但先被析構。
四、類的訪問許可權說明大全
五、類的運算子過載
與 this指標
待更,持續更新中……
我也來說說多核
究竟普通開發者是否需要面對多核,這個問題在很多地方都在討論。很多人都認為不需要,這樣說是基於過去幾年的經驗,認為目前的一般應用單核高速cpu已經足以應付,今後也沒有新的重要應用驅動我們使用多核cpu,多核cpu要麼是廠商狗急跳牆,要麼是僅供科研計算,謝絕參觀。看完myan的這篇,我也來說說 說多核無...
我也來說說TIME WAIT狀態
乙個兄弟問到,自個用go寫了乙個簡略的http效勞端程式,為什麼壓測的時分效勞端會呈現一段時刻的time wait超高的狀況,致使壓測的效果不好呢?記住老王有兩篇文章專門說這個,當時粗粗看了一遍,恰好碰上這個疑問,又翻出來細細摟了。第乙個要弄懂的,是time wait是怎樣發生的。要弄懂time w...
我也來說說DDD 大話目錄
回到佔佔推薦部落格索引 ddd之前沒有接觸過,但一但有了接觸就一發不可收拾,他會帶去進入乙個全新的世界!ddd不是新技術,而是新思想,新模式,是軟體開發領域的一次突破,它更接近於業務,對於業務的改動它更加運用自如,它 模式裡,你可能會涉及到ioc,aop,oop,ood等設計模組,也可能會涉及到mv...