在C++語言中乞巧,對象的類型被稱為類涨椒,類代表了某一批對象的共性和特征。
類是對象的抽象绽媒,而對象是類的具體實例蚕冬。如同C中的結(jié)構(gòu)體一樣,我們要先定義一個結(jié)構(gòu)體是辕,再使用結(jié)構(gòu)體去定義一個變量囤热。同一個結(jié)構(gòu)體可以定義出多個不同的結(jié)構(gòu)體變量。我們要使用類也是如此获三。
類是對象的模板旁蔼,如同我們在建造房屋時候的圖紙,然后我們就可以利用這個圖紙去建造許多個房屋疙教。我們可以使用別人已經(jīng)定義好的類棺聊。更多的時候,我們要根據(jù)需要定義自己的類贞谓。
定義類
定義結(jié)構(gòu)體的方法:
struct Student
{
char name[128];
int age;
char add[128];
};
類的定義格式:
class類名
{
private : //成員訪問限制符
成員數(shù)據(jù);
成員函數(shù)限佩;
public : //public設(shè)置之前的成員都是上面所設(shè)置的私有的
成員數(shù)據(jù);
成員函數(shù);
protected:
成員數(shù)據(jù);
成員函數(shù)裸弦;
};
類也是一種數(shù)據(jù)類型祟同,它是一種我們自己定義的廣義的數(shù)據(jù)類型。
private
私有的理疙,只能在類的內(nèi)部訪問晕城,類的外部不能訪問。
protected
受保護的沪斟,只能在類的內(nèi)部訪問广辰,類的外部不能訪問暇矫,還可以在它的派生類中訪問主之,派生類后面會詳細介紹。
public
公有的李根,類的外部和內(nèi)部都可以訪問槽奕。
一個類可以包含多個成員訪問限制符,每一個生效的范圍直到下一個限制符被設(shè)置房轿,如果沒有被設(shè)置的話粤攒,默認為私有的所森。雖然同一個訪問限制符可以出現(xiàn)多次,但是為了代碼的簡潔夯接,我們應當讓它們只出現(xiàn)一次焕济。還有讓public的成員放在類的聲明前面。因為別人在觀看你的代碼的時候只會在意你的public成員盔几,其它對外界隱藏的成員對于外界是沒有意義的晴弃。
C++中新增了類這個關(guān)鍵字,依然保留了結(jié)構(gòu)逊拍,只是將結(jié)構(gòu)進行了擴展上鞠,使它也可以定義成員函數(shù)。與類不同的是芯丧,結(jié)構(gòu)中未聲明訪問限制的時候就會默認為公有的芍阎。
如下面這個print()函數(shù)在結(jié)構(gòu)體中就是公有的,如果在類中沒有被聲明訪問限制就是私有的缨恒。
定義對象
class類名 對象名谴咸;
類名對象名;//我們經(jīng)常使用這種方法來創(chuàng)建一個對象
類的成員函數(shù)
類的成員函數(shù)也被稱為類的方法骗露,它也是函數(shù)的一種寿冕,它和基本的函數(shù)是一樣的。它跟一般函數(shù)的區(qū)別只是它是一個類的成員椒袍,它是定義在類的內(nèi)部的驼唱,同時它有訪問控制符。
私有的成員函數(shù)只能在本類中被調(diào)用驹暑,將需要被外界調(diào)用的成員聲明為公有的玫恳,公有的成員函數(shù)就成了一個接口。如果我們只是希望一個函數(shù)在類的內(nèi)部被其它函數(shù)所調(diào)用优俘,我們就可以將它聲明為私有的京办,因為這樣的函數(shù)用來支持其它函數(shù)實現(xiàn)一些功能,我們稱這樣的函數(shù)為工具函數(shù)帆焕。
我們也可以不用定義成員函數(shù)惭婿,但是這就體現(xiàn)不出類的作用,就相當于C的結(jié)構(gòu)體了叶雹。
下面我們通過一個實例來了解一下類的結(jié)構(gòu)财饥。
在四號區(qū)域,我們創(chuàng)建了一個類的對象stu折晦,并通過它調(diào)用了類的兩個公共的方法钥星,私有和保護的方法在外界是不能被調(diào)用的。在一號區(qū)域满着,我們完成了print()函數(shù)的聲明和定義谦炒,但是getAge()函數(shù)僅僅只是聲明了贯莺,我們在三號區(qū)域當中,也就是類的外部定義了它宁改。當我們在類的外部定義成員函數(shù)的時候缕探,我們要在函數(shù)名前面加上類名和作用域限制符,它表示這個成員函數(shù)是屬于這個類的还蹲。二號區(qū)域中定義了一些私有的成員屬性撕蔼。在類的內(nèi)部進行成員函數(shù)的聲明,類的外部進行成員函數(shù)的定義秽誊,這是一個非常好的習慣鲸沮。這樣使類的長度更加短,結(jié)構(gòu)層次更加清晰锅论,便于我們閱讀讼溺,而且有助于把類的聲明和實現(xiàn)分離,從類的定義體中最易,用戶只看到了類的原型怒坯,這對我們實現(xiàn)數(shù)據(jù)隱藏是有好處的。
在類的內(nèi)部進行聲明和實現(xiàn)的時候藻懒,編譯器自動的將這些函數(shù)定義為內(nèi)聯(lián)函數(shù)剔猿。如print()函數(shù)。在類之外定義的函數(shù)默認就不是內(nèi)聯(lián)函數(shù)嬉荆,我們可以在定義函數(shù)的時候顯式的加上inline關(guān)鍵字使它變成內(nèi)聯(lián)函數(shù)归敬。如getAge()函數(shù)就可以在類外部定義的時候加上inline關(guān)鍵字聲明使它變?yōu)閮?nèi)聯(lián)函數(shù)。