天天看點

類和對象-c++

1.1、類和對象基本概念

1.2、什麼是對象?

1.3、什麼是類?

2.1、類的聲明

2.2、執行個體化對象

3.1、類的屬性定義--資料成員

3.2、類的資料成員的特例-靜态資料成員

4.0、類的方法--成員函數

4.1、類方法的定義

4.2、靜态成員函數

4.3、成員函數的類别(const 的另一種用法)

5.0、特殊成員函數-構造函數 和 析構函數

5.1、構造函數的概念

5.2、構造函數的 聲明 和 定義

5.3、構造函數的調用(帶參數)

5.4、構造函數調用(不帶參數)

5.5、構造函數聲明(帶有預設參數)

5.6、構造函數的重載

5.7、特殊構造函數--拷貝構造函數

5.8、析構函數

5.9、類和函數的聯系

5.10、this指針

5.11、static變量初始化

1.1、類和對象基本概念

(1)類和對象是面向對象程式設計中最基礎,最重要的兩個概念。

(2)在面向對象程式設計中,所有操作都是以對象為基礎的。

(3)程式中的對象 是對 現實對象的抽象。

1.2、什麼是對象

現實對象包括可感覺的物體,以及思維中的概念;

例如:

汽車客運被看做是一個對象;學校作為一個概念也可以看成一個對象;

現實對象

有個特點:屬性 和 行為的整體

示例:

一輛汽車具有車型、顔色 -》屬性
并有啟動,轉向、刹車等-》行為

程式對象:

屬性可以看做為資料;行為可以抽象為函數。

對象是:資料 和 函數 的集合。

對象是:一個完整的個體。

例如:

所有汽車都具有車型,顔色等屬性,所有屬性的個數相同,所有汽車都具有啟動、轉向、刹車等行為。

1.3、什麼是類?

類:

類是指整個一類實物,一個類定義了一個模闆;

類對 資料 以及 處理資料的方式(函數)進行封裝;

汽車類:包括(汽車對象1、汽車對象2、汽車對象3)

類和對象-c++

類 -具體執行個體-》對象

類《-抽象----對象

類(class):

是将一組對象的 資料結構 和 操作相同的部分 抽出來 組成的集合,是 對象 的 共同特征 。

2.1、類的聲明:

關鍵字class聲明

類和對象-c++

class:隻定義一種資料類型,并不配置設定記憶體單元;

成員通路訓示符:

(1)public:
(公用成員,包括類的 屬性 和 方法);
提供類的外部界面,它允許類的使用者來通路它。
(2)private:
(私有成員,包括類的屬性和方法);
隻能被該類成員函數通路,即隻有類的本身能夠通路它,任何類以外的函數對私有成員通路都是非法的。
(3)protected:
對于派生類來說,保護成員像是公有成員,可以任意通路。
但對于程式的其他部分來說,就像是私有成員不應許通路。
(4)類中的成員預設是私有的。

2.2、執行個體化對象

類是抽象的,不能指派,但是 執行個體化的類 即 對象 能夠指派了,而且可以通過對象直接調用函數。

類和對象-c++

3.1、類的屬性定義--資料成員

類和對象-c++

3.2、類的資料成員的特例-靜态資料成員

static修飾;

在定義類對象時,不會為每個類對象複制一份靜态資料成員,而是讓所有類對象都共享一個靜态資料成員。[無論new多少個,公共使用一個]

如:
class Student
{
static int counter;//用于記錄學生人數
int id;
};
靜态變量在定義時要進行初始化,雖然大多少編譯器對靜态變量會賦預設值,但還是應該自己進行初始化。

4.0、類的方法--成員函數

詳講解:一般定義方法,特殊的成員函數(構造函數 和 析構函數)

4.1、類方法的定義

又稱類的成員函數,成員函數主要處理類的資料成員;

下面是 類體中的聲明和定義 和類體外聲明和定義

類和對象-c++

4.2、靜态成員函數

static修飾,在類的各個執行個體化間是共享的。(和靜态屬性定義意思差不多)

類和對象-c++

4.3、成員函數的類别(const 的另一種用法)

const放在 函數的參數清單 和 函數體之間。

const成員函數隻能讀類資料成員,而不能修改類成員資料。

類和對象-c++

5.0、特殊成員函數-構造函數 和 析構函數

定義類後,經常需要一一為 對象的 成員變量指定 初始值;

虛構函數 用于定義了 類的 對象數組 後進行 初始化。

5.1、構造函數的概念

類 包含 資料成員 和 成員函數;

一個類可以建立多個對象,建立對象後,需要為每個對象的資料成員賦初值。

但一一為多個資料成員賦初值是非常煩瑣的;

并且在類中聲明的資料成員,是不給資料成員賦初值的。

錯誤例子:

class A

{

int a=0;//錯誤,此處不能給資料成員a指派

};

是以c++通常使用 構造函數 來解決 這個問題。

構造函數 的 定義 和 主要功能:

類和對象-c++

構造函數性質:

類和對象-c++

5.2、構造函數的 聲明 和 定義

類和對象-c++

實際應用中,一般都要給類聲明和定義構造函數;

如果沒有聲明和定義,編譯系統會自動生成一個預設的構造函數,這個預設的構造函數不帶任何參數,隻能給對象開辟一個存儲空間,而不能為對象中的資料成員賦初值,此時資料成員的值是随機的。程式運作時可能會出錯。

5.3、構造函數的調用(帶參數)

在定義了構造函數後就可以調用,一般來說,在定義對象的同時調用構造函數。

類和對象-c++

注意:一般不需要顯示調用,在聲明對象時系統會自動調用構造函數。

類和對象-c++

5.4、構造函數調用(不帶參數)

構造函數一般需要完成對類中私有資料成員的初始化,是以它需要包含參數完成對象的初始化。

事實上,構造函數可以不帶參數。

類和對象-c++

5.5、構造函數聲明(帶有預設參數)

類和對象-c++

5.6、構造函數的重載

C++支援函數的重載,一個類中可以有多個不同參數形式構造函數。

用類去建立一個對象,也就是在記憶體中産生一個類的執行個體時,程式将根據參數在動調用該類中的構造函數。

增加了程式設計的靈活性。

同一個類中不同構造函數的差別:參數個數,參數類型。

類和對象-c++

注意:當定義帶參數的構造函數時采用預設參數,在調用時若指定了參數值,則使用指定參數值。

5.7、特殊構造函數--拷貝構造函數

C++中除了普通的構造函數外,還有特殊構造函數--拷貝構造函數

類和對象-c++

分類:

1、使用者自定義拷貝構造函數

類和對象-c++

例子1:

類和對象-c++

例子2:系統預設拷貝構造函數。

當用一個已經存在的對象初始化本類的新對象時,如果沒有自定義拷貝構造函數,系統會自動生成一個預設的拷貝構造函數來完成初始化的工作。

類和對象-c++

5.8、析構函數

與構造函數類似,析構函數也是一種特殊的成員函數。

作用:釋放配置設定給對象的記憶體空間,并做一些善後工作。

類和對象-c++

例子:

類和對象-c++

5.9、類和函數的聯系

(1)類對象可以作為函數參數,也可以作為函數傳回值。

(2)類對象作為函數參數傳遞時,可以值傳遞和引用傳遞。

(3)類對象值傳遞時,實參中的成員變量目錄中的變量被拷貝到形參中相應的成員變量。

5.10、this指針

是隐含在成員函數内的一種指針,稱為本對象的指針。

作用:

(1)顯示指明類中資料成員,尤其是和形參以及全局變量相區分。(當他們同名時)

(2)傳回本對象的指針和引用。

在函數成員傳回時:

如果需要傳回該對象的指針,使用”return this“;

如果需要傳回對象的引用時,使用”return *this“;

(3)類對象值傳遞時,實參中的成員變量目錄中的變量被拷貝到新參中相應的成員變量。

5.11、static變量初始化

class aclass{

public:
static  int a;

};

static int aclass::a=0; //初始化

void main(void)

{

int amain=0;
amain=aclass::a;//使用,無需定義相關類的變量而直接使用之。

}

繼續閱讀