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)
類 -具體執行個體-》對象
類《-抽象----對象
類(class):
是将一組對象的 資料結構 和 操作相同的部分 抽出來 組成的集合,是 對象 的 共同特征 。
2.1、類的聲明:
關鍵字class聲明
class:隻定義一種資料類型,并不配置設定記憶體單元;
成員通路訓示符:
(1)public:(公用成員,包括類的 屬性 和 方法);提供類的外部界面,它允許類的使用者來通路它。(2)private:(私有成員,包括類的屬性和方法);隻能被該類成員函數通路,即隻有類的本身能夠通路它,任何類以外的函數對私有成員通路都是非法的。(3)protected:對于派生類來說,保護成員像是公有成員,可以任意通路。但對于程式的其他部分來說,就像是私有成員不應許通路。
(4)類中的成員預設是私有的。
2.2、執行個體化對象
類是抽象的,不能指派,但是 執行個體化的類 即 對象 能夠指派了,而且可以通過對象直接調用函數。
3.1、類的屬性定義--資料成員
3.2、類的資料成員的特例-靜态資料成員
static修飾;
在定義類對象時,不會為每個類對象複制一份靜态資料成員,而是讓所有類對象都共享一個靜态資料成員。[無論new多少個,公共使用一個]
如:class Student{
static int counter;//用于記錄學生人數int id;
};
靜态變量在定義時要進行初始化,雖然大多少編譯器對靜态變量會賦預設值,但還是應該自己進行初始化。
4.0、類的方法--成員函數
詳講解:一般定義方法,特殊的成員函數(構造函數 和 析構函數)
4.1、類方法的定義
又稱類的成員函數,成員函數主要處理類的資料成員;
下面是 類體中的聲明和定義 和類體外聲明和定義
4.2、靜态成員函數
static修飾,在類的各個執行個體化間是共享的。(和靜态屬性定義意思差不多)
4.3、成員函數的類别(const 的另一種用法)
const放在 函數的參數清單 和 函數體之間。
const成員函數隻能讀類資料成員,而不能修改類成員資料。
5.0、特殊成員函數-構造函數 和 析構函數
定義類後,經常需要一一為 對象的 成員變量指定 初始值;
虛構函數 用于定義了 類的 對象數組 後進行 初始化。
5.1、構造函數的概念
類 包含 資料成員 和 成員函數;
一個類可以建立多個對象,建立對象後,需要為每個對象的資料成員賦初值。
但一一為多個資料成員賦初值是非常煩瑣的;
并且在類中聲明的資料成員,是不給資料成員賦初值的。
錯誤例子:
class A
{
int a=0;//錯誤,此處不能給資料成員a指派
};
是以c++通常使用 構造函數 來解決 這個問題。
構造函數 的 定義 和 主要功能:
構造函數性質:
5.2、構造函數的 聲明 和 定義
實際應用中,一般都要給類聲明和定義構造函數;
如果沒有聲明和定義,編譯系統會自動生成一個預設的構造函數,這個預設的構造函數不帶任何參數,隻能給對象開辟一個存儲空間,而不能為對象中的資料成員賦初值,此時資料成員的值是随機的。程式運作時可能會出錯。
5.3、構造函數的調用(帶參數)
在定義了構造函數後就可以調用,一般來說,在定義對象的同時調用構造函數。
注意:一般不需要顯示調用,在聲明對象時系統會自動調用構造函數。
5.4、構造函數調用(不帶參數)
構造函數一般需要完成對類中私有資料成員的初始化,是以它需要包含參數完成對象的初始化。
事實上,構造函數可以不帶參數。
5.5、構造函數聲明(帶有預設參數)
5.6、構造函數的重載
C++支援函數的重載,一個類中可以有多個不同參數形式構造函數。
用類去建立一個對象,也就是在記憶體中産生一個類的執行個體時,程式将根據參數在動調用該類中的構造函數。
增加了程式設計的靈活性。
同一個類中不同構造函數的差別:參數個數,參數類型。
注意:當定義帶參數的構造函數時采用預設參數,在調用時若指定了參數值,則使用指定參數值。
5.7、特殊構造函數--拷貝構造函數
C++中除了普通的構造函數外,還有特殊構造函數--拷貝構造函數
分類:
1、使用者自定義拷貝構造函數
例子1:
例子2:系統預設拷貝構造函數。
當用一個已經存在的對象初始化本類的新對象時,如果沒有自定義拷貝構造函數,系統會自動生成一個預設的拷貝構造函數來完成初始化的工作。
5.8、析構函數
與構造函數類似,析構函數也是一種特殊的成員函數。
作用:釋放配置設定給對象的記憶體空間,并做一些善後工作。
例子:
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;//使用,無需定義相關類的變量而直接使用之。
}