1 類基礎
乙個類是乙個使用者自定義的型別,通常是一組成員構成,最常見的成員類別是資料成員和成員函式。成員函式可以定義初始化、拷貝、移動和析構(清理)等語義,對物件使用.操作來訪問成員,對指標使用->來訪問成員。乙個類包含乙個成員的名字空間,public成員提供類的介面,private成員提供實現的細節,struct是成員預設為public的class。
class
x//建構函式
intmf
(int i)
//成員函式
};x var ;
intuser
(x var,x* ptr)
;
1.1 成員函式
struct結構下:
struct date;
由於不同結構可能有同名成員函式,在定義成員函式時必須指定結構名:
void date::
init
(int dd,
int mm,
int yy)
;
1.2 預設拷貝
date d1=my_birthday;
date d2 ;
類似的,類物件也可以通過賦值操作拷貝.
void
f(date& d)
預設拷貝語義是逐成員複製。
1.3 訪問控制
標籤public將類主體分為2部分,第一部分的名字是私有(private)的,它們只能被成員函式使用;第二部分是公有(public)的,構成類物件的公共介面。沒有宣告之前,類成員和成員函式預設是私有的,且非成員函式禁止使用私有成員。
1.4 class和struct區別
class x;根據定義,struct就是乙個成員預設為公有的類,即struct s;就是下面定義的簡寫
classs;
class
date1
;struct date2
;
事實上,date1和date2是等價的,除了名字不一樣外。c++並不要求在類定義中首先宣告資料,實際上,將資料成員放在最後以強調提供公共使用者介面的函式是很有意義的。
class
date3
;
在乙個類宣告中可以多次使用訪問說明符。
class
date4
;
1.5 建構函式
允許程式設計師宣告乙個函式,顯式表明自己是專門完成物件初始化任務的。由於這種函式本質是構造乙個給定型別的值,稱為建構函式。建構函式的顯著特徵是與類具有相同的名字。
class
date1
;//建構函式初始化引數:
date today=date (23,
6,1983);
date xmas (25,
3,1993);
date today=date
;date xmas
;
建構函式的過載規則與普通函式相同,只要建構函式的引數型別明顯不同,編譯器就能選擇正確的版本使用。
1.6 explicit建構函式
我們可以指明建構函式不能用作隱式型別轉換,如果建構函式的宣告帶有關鍵字explicit,則它只能用於初始化和顯式型別轉換。用=進行初始化可看作拷貝初始化,一般來說這種拷貝可能會被優化掉,而採取移動操作。省略=將會變為顯式初始化,顯式初始化又稱直接初始化。
struct x
;x x1=
;//錯誤,隱式的;
x x2=
;//錯誤,隱式的;
x x3
;//正確,顯式的;
x x4
;//正確,顯式的;
intf
(x);
int i1=f(
);//錯誤,隱式的;
int i2=f(
);//錯誤,隱式的;
int i3 f()
;//正確,顯式的;
int i4 f()
;//正確,顯式的;
1.7 類內函式定義
如果乙個函式不僅在類中宣告,還在類中定義,那麼它就被當做內聯函式處理。
class
date
;//....
private
:int d,m,y;};
等價於:
class
date
;//....
private
:int d,m,y;};
inline
void date::
add_month
(int n)
;
1.8 可變性
const和非const物件都可以呼叫cosnt成員函式,而非const成員函式只能被非const物件呼叫,const函式不能修改其資料成員。例如:
void
f(date &d,
const date &cd)
;
我們可以將乙個類成員定義為mutable,即使是在const物件中,也可以修改此成員。因此該函式即可用於const物件,也可以用於非const物件。
1.9 成員訪問
通過對類x的物件使用.或者->操作來訪問x的成員。
struct x;
void x::f(
);
是類的一部分但不是某個類物件一部分的變數稱為static成員,類似的,需要訪問類成員而不需要通過特定物件呼叫的函式稱為static成員函式。巢狀類能訪問其所屬類的成員,甚至是private成員,相反,乙個類並沒有任何特殊許可權能訪問其嵌入類的成員。
2 構造、清理、拷貝和移動
class
x;
2.1 建構函式和析構函式
與類同名的成員稱為建構函式。建構函式的宣告指出與引數列表,但未指出返回型別,類名不可用於此類內的普通成員函式、資料成員、成員型別等等。
class
vector
;
某些類需要乙個函式,在物件銷毀時保證被呼叫,就像在物件建立時保證建構函式會被呼叫一樣,這樣的函式稱為析構函式。析構函式不接受引數,且每一類只能有乙個析構函式。
2.2基類和成員析構函式
構造函式呼叫其基類的建構函式,然後呼叫成員的建構函式,最後執行自身的函式體。析構函式執行自身的函式體,然後呼叫成員的析構函式,最後呼叫基類的析構函式。
2.3 呼叫建構函式和析構函式
2.4 virtual析構函式
析構函式可以宣告為virtual,而且對含有虛函式的類通常這麼執行。
2.5 static成員初始化
乙個static類成員是靜態分配,而不是每個類物件的一部分。一般來說,static成員宣告充當類外定義的宣告。但是在少數情況下,在類內宣告中初始化static成員也是可能的,條件是static成員必須是整型或列舉型別的const,或者字面值型別的constexpr.
class
curious
;
2.6 拷貝和移動
類拷貝操作兩種方式:
預設建構函式:x()
拷貝建構函式:x (const x&)
拷貝賦值運算子: x& operator=(const x&)
移動建構函式:x (x &&)
移動賦值運算子: x& operator=(x &&)
析構函式:~x()
C 類操作知識
1 類基礎 乙個類是乙個使用者自定義的型別,通常是一組成員構成,最常見的成員類別是資料成員和成員函式。成員函式可以定義初始化 拷貝 移動和析構 清理 等語義,對物件使用.操作來訪問成員,對指標使用 來訪問成員。乙個類包含乙個成員的名字空間,public成員提供類的介面,private成員提供實現的細...
檔案操作相關類知識
檔案操作相關類知識 file 操作檔案,靜態類,對檔案整體操作。拷貝 刪除 剪下等。directory 操作目錄 資料夾 靜態類。directoryinfo 資料夾的乙個 類 用來描述乙個資料夾物件 獲取指定目錄下的所有目錄時返回乙個directoryinfo陣列。fileinfo 檔案類,用來描述...
c 類的知識
在英語中類 class 是分類 classification 的根詞。設計類的過程就是對資訊進行分類,將相關資訊放到有意義的實體中。封裝的目的 封裝就是定義類的重要原則。中心思想是 使用類的程式不應該關心類內部如何工作。程式值需要建立類的例項並呼叫類中的方法。類為了執行其存在的方法,可能要維護各種內...