類的基本概念

2021-10-10 11:16:34 字數 4576 閱讀 3828

例:

#include

using

namespace std;

class

date

//class 是資料型別說明符,date是所定義型別的名稱

void

print()

};void date::

init_date

(int y,

int m,

int d)

void

main()

上述示例中,類date中包含了三個資料項:year,month,day,這些在類中被定義的資料項稱為資料成員。而且date中還包含了三個函式:inti_date,print,isleapyear,這些在類中定義的函式被稱為成員函式

對於成員函式,它們可以定義在類宣告的內部,如void print(),也可以先在類中宣告,之後在類的外部定義,但此時必須用作用域運算子::來通知編譯系統該函式所屬的類。

《函式型別》

《類名》

::《函式名》

(《形式參數列》

)void date::

init_date

(int y,

int m,

int d)

內聯函式:只要在類定義中包含的成員函式就預設宣告為內聯函式

如果只在類內宣告,在類外定義,那麼若要成為內聯函式就需要在類內宣告時,在函式返回值型別前面加上關鍵字inline。

內聯函式避免了函式呼叫的開銷,對於短函式而言是適合的。

inline

void

init_date

(int y,

int m,

int d)

;

訪問限定符:

public:類的公共成員可以直接在類的外部訪問。

如示例中的print、isleapyear、init_date可以直接在外部進行訪問使用。

private:類的私有成員僅可由類的成員函式進行訪問。

protected:類的受保護成員不能直接在類外部訪問。

注意事項:

1.類中的預設訪問許可權是private。如果將程式中的private去掉,year,month,day將遵循預設訪問許可權,即仍然為private。

2.通常資料成員被說明成私有的,成員函式被說明成公有的,從外部只能通過公有函式對資料成員進行操作,資料可以受到良好保護。

3.類是一種資料型別,定義是系統不為類分配儲存空間,故不能對類的資料成員初始化。

class與struct區別

struct與class的預設訪問許可權不一樣。

建構函式用於建立新物件並進行初始化。

《建構函式名》

(《形參列表》

)//建構函式首部一般格式

date (

int y,

int m,

int d)

《類名》

《物件名》

(《實參列表》

);//建立物件一般格式

date today

(2020,11

,8);

注意事項:

1.建構函式的函式名必須與類同名。

2.建構函式可以在類中定義也可以在類外定義。

3.建構函式不需要也不允許有返回型別說明。

4.建構函式可以過載,系統呼叫時一般按函式過載規則選乙個建構函式執行。

預設建構函式:

如果沒有為類提供任何建構函式,編譯器將自動為其生成乙個預設的無參建構函式。

系統提供的預設建構函式如下:

date()

*只要建構函式是無參的或各引數有預設值的,編譯器都認為是預設的建構函式,並且預設的建構函式只能有乙個。

date()

=default

;

如果我們需要預設的行為,那麼可以通過在引數列表後面寫上**=default**來要求編譯器生成建構函式。

委託建構函式

乙個委託建構函式使用它所屬類的其他建構函式執行它自己的初始化過程。

隱式的類型別轉換

如果建構函式只接受乙個實參,則它實際上定義了轉換為此類型別的隱式轉換機制。有時,我們把這種建構函式稱為轉換建構函式。

建構函式過載

使用者對於建構函式可能有多種需求,以此既要有預設建構函式,又要有帶引數的建構函式供使用者選用,這種現象稱為建構函式過載

#include

using

namespace std;

class

date

date()

void

print()

};void

main()

注意事項

1.如果在建立物件時選用的時無參建構函式,應注意正確書寫定義物件的語句。

date day1(2

,2,2000);

// 對

date day1()

;// 錯

date day1;

// 對

2.在建構函式中使用預設引數時,應該注意以下事項:

(1):應該在宣告建構函式時指定預設值,而不能只在定義建構函式時指定預設值。

(2):如果建構函式形參帶預設值,則必須從右到左依次帶預設值,中間不能斷開。

date::

date

(int y=

2010

,int m=8,

int d=29)

;// 對

date::

date

(int y,

int m=8,

int d=29)

;//對

date::

date

(int y,

int m,

int d=29)

;//對

date::

date

(int y=

2010

,int m,

int d=29)

;//錯

(3)如果構造函式引數全部指定了預設值,則在定義物件時可以給出乙個或幾個實參,也可以不給出實參。如果有實參必須從左到右都帶實參,中間不能間斷。

初始化列表

類名::建構函式名(

《引數列表》)[

:《成員初始化列表》

]

常量初始化

類中定義的常量成員由於不能賦值,因此只能通過初始化列表進行初始化。

class

circle

double

area

() };

void

main

()

引用初始化

引用也必須使用初始化列表進行初始化

classa;

void

print()

};

類的析構函式功能是釋放乙個物件,當物件完成使命需要銷毀時呼叫,以釋放物件占用的資源。

析構函式也是類的成員函式,它的名字是在類名前加字元『~』。

與預設建構函式類似,如果類中沒有定義析構函式,系統會自動生成乙個預設析構函式。該函式什麼也不做。但是當成員變數從堆中申請空間後,就必須在析構函式中將其釋放,否則該空間無法自動釋放,就會造成記憶體洩漏。

class

person}~

person()

};void

main()

注意:析構函式沒有函式型別、返回值,也沒有函式引數。因此它不能被過載。乙個類可以有多個建構函式,但只能有乙個析構函式。

1. 複製建構函式

一般形式:

類名 物件2(物件1);

cpoint pt2

(pt1)

;

乙個可變資料成員永遠不會是const,即使他是const物件的成員。

在變數宣告中加入mutable關鍵字。

聚合類使得使用者可以直接訪問其成員,並且具有特殊的初始化語法形式。當乙個類滿足如下條件時我們說它是聚合的:

字面值常量類

資料成員都是字面值型別的聚合類是字面值常量類。

類方法基本概念

在類方法中呼叫本類的類方法可直接呼叫。例項方法也叫做物件方法。類方法是屬於整個類的,而例項方法是屬於類的某個物件的。由於類方法是屬於整個類的,並不屬於類的哪個物件,所以類方法的方法體中不能有與類的物件有關的內容。即類方法體有如下限制 1 類方法中不能引用物件變數 2 類方法中不能呼叫類的物件方法 3...

pair類的基本概念

pair型別 裡面有兩個資料成員的類 pair是一種模板型別,其中包含兩個資料值,兩個資料的型別可以不同,基本的定義如下 paira 表示a中有兩個型別,第乙個元素是int型的,第二個元素是string型別的,如果建立pair的時候沒有對其進行初始化,則呼叫預設建構函式對其初始化。paira jam...

String類的基本概念

2016 08 30 19 53 55 是j a提供的關係運算子,主要功能是進行數值相等的判斷,如果在string物件上表示的是記憶體位址數值的比較 equals 是由string提供的乙個方法,此方法專門負責進行字串內容的比較。1 public class yangge 10 string 字串物...