我來說說C 的類

2021-09-30 14:11:05 字數 2493 閱讀 1599

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...