二、類與對象
一.類的定義
為了以后的筆記方便就把.h文件與.cpp文件合并。
1.訪問權(quán)限:能不能訪問該類中的成員
①Public
②Protected?
③Private

聲明:
在類的內(nèi)部(定義類的代碼內(nèi)部),無論成員被聲明為 public、protected 還是 private,都是可以互相訪問的,沒有訪問權(quán)限的限制。
在類的外部(定義類的代碼之外),只能通過對象訪問成員,并且通過對象只能訪問 public 屬性的成員,不能訪問?private、protected 屬性的成員。
2.成員變量(屬性)
3.成員函數(shù)(方法)
①構(gòu)造函數(shù)
構(gòu)造函數(shù)的調(diào)用是強(qiáng)制性的,一旦在類中定義了構(gòu)造函數(shù),那么創(chuàng)建對象時就一定要調(diào)用,不調(diào)用是錯誤的。如果有多個重載的構(gòu)造函數(shù),那么創(chuàng)建對象時提供的實參必須和其中的一個構(gòu)造函數(shù)匹配;反過來說,創(chuàng)建對象時只有一個構(gòu)造函數(shù)會被調(diào)用。
作用:對成員變量進(jìn)行初始化
a.默認(rèn)構(gòu)造函數(shù)
程序中自己不定義構(gòu)造函數(shù),那必然有一個默認(rèn)的構(gòu)造函數(shù)將對成員變量進(jìn)行初始化

b.程序員定義的構(gòu)造函數(shù)(無參、有參)

c.構(gòu)造函數(shù)的重載:在創(chuàng)建對象時根據(jù)傳遞的實參來判斷調(diào)用哪一個構(gòu)造函數(shù)。


②普通成員函數(shù)
二.對象的創(chuàng)建及訪問類中的成員
創(chuàng)建對象時就一定要調(diào)用構(gòu)造函數(shù),不調(diào)用是錯誤的。
1.普通對象
格式:類 對象名;
例:Date a;
2.指針對象
①在棧上創(chuàng)建對象
創(chuàng)建的對象在棧上分配內(nèi)存,需要使用&
獲取它的地址
類 對象名;
類 *指針名 = &對象;
例:Date a;
? ? ? ?Date *p = &a;
②在堆上創(chuàng)建動態(tài)對象
使用 new 在堆上創(chuàng)建出來的對象是匿名的,沒法直接使用,必須要用一個指針指向它,再借助指針來訪問它的成員變量或成員函數(shù)。
類?*指針名 = new 類;
Date *p = new Date;

3.對象數(shù)組
用構(gòu)造函數(shù)對象數(shù)組中的每個元素進(jìn)行初始化。具體哪些元素用哪些構(gòu)造函數(shù)初始化,取決于定義數(shù)組時的寫法;(也可以這么理解:對象數(shù)組的初始化通常也是由構(gòu)造函數(shù)來完成的)
① 類 對象數(shù)組名[數(shù)組元素個數(shù)];
例:Date a[2] = {Date(),Date()};

②Date *p[3] = {new Date(),new Date(1),new Date(55,88)}


4.對象引用
類 對象名;
類 & 引用名 = 對象;
例:Date a;
? ? ? ?Date & r = a;

三.類成員的修飾符
1.const修飾符
①const修飾類的成員變量
不能在類里直接初始化const成員變量,const成員變量屬于某個對象,不同對象const數(shù)據(jù)成員的值可能不同
const修飾類成員變量只能在類的構(gòu)造函數(shù)的初始化列表中進(jìn)行初始化

②const修飾類的成員函數(shù)
const 成員函數(shù)可以使用類中的所有成員變量,但是不能修改它們的值,這種措施主要還是為了保護(hù)數(shù)據(jù)而設(shè)置的。

③const修飾對象
const 可以用來修飾對象,稱為常對象。一旦將對象定義為常對象之后,就只能調(diào)用類的 const 成員(包括 const 成員變量和 const 成員函數(shù))了。
語法
定義常對象的語法和定義常量的語法類似:const? class ?object(params);
可以定義 const?指針:const class *p = new class(params);
class
為類名,object
為對象名,params
為實參列表,p
為指針名。兩種方式定義出來的對象都是常對象。

2.static修飾符
static可以修飾類中的成員變量(屬性)與成員函數(shù)(方法);可以實現(xiàn)同一類對象之間的數(shù)據(jù)共享,static修飾過的成員屬于類,不屬于某個具體的對象。
①static修飾成員變量(統(tǒng)計案例典型)
聲明? ?static 類 變量名? 例:static int count;
初始化? 必須在類體外部
類? 對象的類::變量名 = xxx;? 例:?int student::count = 10;

②static修飾成員函數(shù)
在C++中,靜態(tài)成員函數(shù)的主要目的是訪問靜態(tài)成員。getTotal()、getPoints() 當(dāng)然也可以聲明為普通成員函數(shù),但是它們都只對靜態(tài)成員進(jìn)行操作,加上 static 語義更加明確。

四.對象成員
一個類的對象是另一個類的成員變量;
類名::構(gòu)造函數(shù)名(參數(shù)表): 成員變量1(參數(shù)表), 成員變量2(參數(shù)表), ...
{
? ? //TODO:
}
對于基本類型的成員變量,“參數(shù)表”中只有一個值,就是初始值,在調(diào)用構(gòu)造函數(shù)時,會把這個初始值直接賦給成員變量。
但是對于成員對象,“參數(shù)表”中存放的是構(gòu)造函數(shù)的參數(shù),它可能是一個值,也可能是多個值,它指明了該成員對象如何被初始化。
