在C++語言中,對象的類型被稱為類,類代表了某一批對象的共性和特征。
類是對象的抽象,而對象是類的具體實例。如同C中的結構體一樣,我們要先定義一個結構體,再使用結構體去定義一個變量。同一個結構體可以定義出多個不同的結構體變量。我們要使用類也是如此。
類是對象的模板,如同我們在建造房屋時候的圖紙,然后我們就可以利用這個圖紙去建造許多個房屋。我們可以使用別人已經定義好的類。更多的時候,我們要根據需要定義自己的類。
定義類
定義結構體的方法:
struct Student
{
char name[128];
int age;
char add[128];
};
類的定義格式:
class 類名
{
private : //成員訪問限制符
成員數據;
成員函數;
public : //public設置之前的成員都是上面所設置的私有的
成員數據;
成員函數;
protected:
成員數據;
成員函數;
};
類也是一種數據類型,它是一種我們自己定義的廣義的數據類型。
private
私有的,只能在類的內部訪問,類的外部不能訪問。
protected
受保護的,只能在類的內部訪問,類的外部不能訪問,還可以在它的派生類中訪問,派生類后面會詳細介紹。
public
公有的,類的外部和內部都可以訪問。
一個類可以包含多個成員訪問限制符,每一個生效的范圍直到下一個限制符被設置,如果沒有被設置的話,默認為私有的。雖然同一個訪問限制符可以出現多次,但是為了代碼的簡潔,我們應當讓它們只出現一次。還有讓public的成員放在類的聲明前面。因為別人在觀看你的代碼的時候只會在意你的public成員,其它對外界隱藏的成員對於外界是沒有意義的。
C++中新增了類這個關鍵字,依然保留了結構,只是將結構進行了擴展,使它也可以定義成員函數。與類不同的是,結構中未聲明訪問限制的時候就會默認為公有的。
如下面這個print()函數在結構體中就是公有的,如果在類中沒有被聲明訪問限制就是私有的。
定義對象
class 類名 對象名;
類名 對象名; //我們經常使用這種方法來創建一個對象
類的成員函數
類的成員函數也被稱為類的方法,它也是函數的一種,它和基本的函數是一樣的。它跟一般函數的區別只是它是一個類的成員,它是定義在類的內部的,同時它有訪問控制符。
私有的成員函數只能在本類中被調用,將需要被外界調用的成員聲明為公有的,公有的成員函數就成了一個接口。如果我們只是希望一個函數在類的內部被其它函數所調用,我們就可以將它聲明為私有的,因為這樣的函數用來支持其它函數實現一些功能,我們稱這樣的函數為工具函數。
我們也可以不用定義成員函數,但是這就體現不出類的作用,就相當於C的結構體了。
下面我們通過一個實例來了解一下類的結構。
在四號區域,我們創建了一個類的對象stu,並通過它調用了類的兩個公共的方法,私有和保護的方法在外界是不能被調用的。在一號區域,我們完成了print()函數的聲明和定義,但是getAge()函數僅僅只是聲明了,我們在三號區域當中,也就是類的外部定義了它。當我們在類的外部定義成員函數的時候,我們要在函數名前面加上類名和作用域限制符,它表示這個成員函數是屬於這個類的。二號區域中定義了一些私有的成員屬性。在類的內部進行成員函數的聲明,類的外部進行成員函數的定義,這是一個非常好的習慣。這樣使類的長度更加短,結構層次更加清晰,便於我們閱讀,而且有助於把類的聲明和實現分離,從類的定義體中,用戶只看到了類的原型,這對我們實現數據隱藏是有好處的。
在類的內部進行聲明和實現的時候,編譯器自動的將這些函數定義為內聯函數。如print()函數。在類之外定義的函數默認就不是內聯函數,我們可以在定義函數的時候顯式的加上inline關鍵字使它變成內聯函數。如getAge()函數就可以在類外部定義的時候加上inline關鍵字聲明使它變為內聯函數。