類產生的原因及相關特性

2021-09-27 23:39:31 字數 2238 閱讀 9330

類的產生其實就是為了使用者方便定義自己的資料型別,類性質和c++中的標準庫型別如string型別是一樣的。

可使用關鍵字class或struct來定義類,二者唯一的差別就是類內部成員的預設訪問級別,預設情況下struct的成員為public,而class成員為private。

資料抽象和封裝是類的基本思想。

資料抽象是一種介面和實現分離的程式設計技術。類的設計者關注類內部具體的實現過程,而類的使用者只需要知道如何使用該類以及該類可以做些什麼,而不需要關注具體的實現過程。

封裝就是將低層次的元素組合起來形成新的,高層次實體。函式就是封裝的一種形式,可以呼叫乙個函式但不能訪問他所執行的語句。同樣,類也是封裝的實體。

c++中,通過使用訪問標號(public,protected,private)來定義類的抽象介面和實施封裝。一般把函式放在public部分,這樣程式的任何**都可以呼叫這些函式。把資料成員放在private部分。子類與程式中其他部分一樣,只能訪問基類的public部分,不能訪問private部分。如果基類希望子類能夠訪問某些成員,但仍不希望程式中其他部分去訪問這些成員的話,可將這些成員設定為protected即可。

使用抽象與封裝的優點:1.僅在類的私有部分定義資料成員,類的設計者就可以自由修改這些資料,並且只有成員函式能修改這些資料,容易定位bug。

將類的定義放在標頭檔案中,這樣可以保證每個使用該類的檔案均能以相同的方式定義該類,使用標頭檔案保護符來保證即使標頭檔案在同一檔案中被包含多次,類的定義也只出現一次。

建構函式是特殊的成員函式,建立類型別的新物件時,預設執行建構函式。建構函式沒有返回值,函式名與類名相同。

建構函式可以被過載,使得使用者可以通過不同的方式來初始化資料成員。

由於建構函式的目的在於初始化物件的資料成員,所以建構函式不能宣告為常量成員函式(形參列表後有const修飾)。這是因為函式的執行必須依靠物件,類的成員函式預設有乙個this指標,指向呼叫該成員函式的物件的位址,而常量成員函式修改了隱藏的this指標型別,使其指向的物件的成員不可改變!!!!而建構函式的作用就是用來改變物件的資料成員,所以建構函式不能定義為常量成員函式!!!!

在建構函式中,按照與變數宣告一致的次序編寫建構函式初始化列表是個好主意。

預設建構函式:為所有形參提供預設實參的建構函式,乙個類只有沒有定義任何建構函式時,編譯器才會自動生成乙個預設的建構函式。

類成員的顯示初始化對於沒有定義建構函式且全體資料成員均為public的類,可採用與初始化陣列元素相同的方式初始化其成員:

struct data

;

data val =

;

預設建構函式初始化成員的過程:對於類型別的成員(如string)通過執行各自的預設建構函式來進行初始化。只對全域性作用域中的內建和符合型別的成員,如指標和陣列進行初始化。所以,如果類包含內建或復合型別成員,則該類最好定義自己的建構函式來初始化這些成員,否則那些區域性作用域中的內建或復合型別成員不能完成初始化。

預設建構函式的使用假設已定義類sales_item,則可使用以下兩種方式使用預設建構函式來建立乙個物件:

sales_item myobj;
sales_item myobj = sales_item;
友元

友元機制允許乙個類將其非公有成員的訪問許可權授予指定的類或函式。友元宣告以關鍵字friend開始。友元宣告只能出現在類的內部,但不屬於類的成員,所以可以出現在類內部的任何位置不受訪問許可權控制。

例如:

class

screen

;

則以上**使得類window_mgr的成員可以訪問screen類的私有成員『

可變成員

靜態成員

靜態成員屬於類,不屬於任何物件,由給定類的全體物件所共享。

static成員函式 屬於類而不是屬於物件,所以沒有this指標,也不能定義為常量成員函式,畢竟常量成員函式改變了this指標的性質,使其指向的物件不可改變。

static資料成員

不管是static成員函式,還是static資料成員,關鍵字static只能出現在類內部的宣告中,不能出現在類外部的定義中。

死鎖產生的原因及條件

一 死鎖的定義 死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。二 原因 1 因為系統資源不足。2 資源分配不當等。3 程序執行推進順序不合適。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則就會因爭奪...

close wait狀態的產生原因及解決

最近需要上線的邏輯server由於需要與大量的後台server互動,今天突然發現有大量的close wait產生,於是仔細研究了一下 首先我們知道,如果我們的伺服器程式處於close wait狀態的話,說明套接字是被動關閉的!因為如果是client端主動斷掉當前連線的話,那麼雙方關閉這個tcp連線共...

close wait狀態的產生原因及解決

最近測試環境server由於需要與大量的後台server互動,今天突然發現有大量的close wait產生,於是仔細研究了一下 如果我們的伺服器程式處於close wait狀態的話,說明套接字是被動關閉的!因為如果是client端主動斷掉當前連線的話,那麼雙方關閉這個tcp連線共需要四個packet...