struct和class都是類,但class中可以加入函數。類的基本思想是數據抽象與封裝。數據抽象是一種依賴接口和實現分離編程的技術。
數據抽象包括兩部分,包括一組數據和對這些數據的操作。Struct所定義的類中的數據都是默認爲public,即是類外的函數也可以對這些數據進行操作,而對於class定義的類,數據在沒有說明的時候默認爲私有,則若要訪問這些數據就必須通過類中的函數或則是友元函數,也可以通過將數據定義在public中,這樣定義的數據便與struct中的數據一樣,任何函數都可以進行訪問。
爲了防止數據被他人修改,需要對數據進行加密,這就引進了訪問限定符
Public:公有成員聲明
此限定符下的數據都可以訪問
Private:私有成員聲明
只有內部函數和友元函數對其中的數據進行訪問。
內部函數:
定義內部函數時可以在類內部對內部函數的內容進行說明,也可以在類外進行說明,類外說明的方式:
Class nh{
Public
Int ex();
};在定義完類之後一定要加;
Int nh::ex()
{
函數體; }
友元函數:
友元函數也可以訪問類中的私有成員,定義友元函數樣例:friend 函數返回類型 函數名();緊跟類的最後對友元函數進行定義。但友元函數的關係不能進行傳遞,即a是b的友元函數,b是c的友元函數,但是a不是c的友元函數。同時友元函數的關係不能進行繼承
Protected:被保護成員聲明
訪問器與修改器:
訪問器與修改器一般命名爲set與get,其他的名字也可以,放在public中,其中的函數體則是對類中的數據進行修改或則讀取。
以下就是對以上知識點的一個案例。
Class student{
Int m;
Public:\\public下的成員皆爲共有的,即不必須用成員函數和友元函數來訪問public中的數據
Int getm();
Friend int print(student &a);\\一般在定義友元函數時最好用傳引用 };
Int student::getm()\\成員函數的類外定義(::前面是成員函數所屬類,後面則是函數的名字,代表函數是屬於student類的)
{ Return m;} Int print(student &a) \\print 爲全局函數,但print是友元函數,故也可以訪問類中的元素
{ Cout<<a.m; Return 0;}
這樣便可以通過成員函數和友元函數來訪問內部元素。
在類中有着一種新型的指針,稱爲this指針,每個成員函數又有一個隱含的參數,就是this指針,即在某個類中的this指針相當於該類的指針,例如有一個類爲x,則該類的this指針類型爲x*.類的this指針只能在成員函數中使用,尤其是在函數的參數與類中的一個變量相同時就可以使用,例如:
Int m;
Int lk(int m){ this->m=m;}\\函數中參數m的值賦給類中的m
構造函數與析構函數:
構造函數用於對內部數據的初始化,既可以對類中的內部數據進行初始化,是的數據變得有意義,構造函數的函數名必須與類的名字相同。析構函數與構造函數的作用悄悄相反,析構函數則是在類被使用結束之後,進行善後,即是返回已經使用完的類的資源he自動釋放資源。像定義的new類型變量,在用delete進行銷燬時就會自動調用析構函數,定義時析構函數的名字應是~類的名字。類中有默認的構造函數與析構函數 ,在未對他們進行定義時,系統會默認調用系統中默認的構造函數與析構函數。定義構造函數時至少定義兩個構造函數,其中一個構造函數是有參的,另一個是無參的,構造函數後可接賦值列表,賦值列表在函數名之後,後接一個:,之後便是賦值列表,賦值順序是定義成員的順序,並且構造函數是無返回值的,但不同於void。雖然可以在定義成員之後在對成員進行賦值,但是構造函數時還可以在進行賦值的同時,對這些數據還可以進行各種操作,而自定義析構函數的作用也是如此,可以在該類消亡時做一些你所期望的操作,例如在文件結束時可以輸出一段話,或更改一些東西。
例:
Class KL{
Int m;
Public:
KL() {}
KL(int k):m(k)\\構造函數{ } ~KL()\\析構函數 { 函數體 }
};
Static函數:
一個類中的對象數據只有自己的對象使用,而爲了是他們同類的數據可以進行共享,便引入了static成員,這種成員共享於這個類,這個類中不同的對象可以共用這個函數。
Static成員可以是變量也可以是一個函數定義方式:static 要定義的成員。
類的定義使得數據有了封裝性,並且更好的保證數據的安全,例如在一些比較重要的數據向客戶展現時,爲了不使客戶不修改數據,可將開放的成員函數只有讀的函數,從而只能看,而不能寫,構造函數則使得一些數據的初始化有了新的方法,const的函數可以更加保護類中數據不被修改,而static函數則是將相同類的對象連接在一起。