1,類是一種用戶定義的類型,用于面向?qū)ο蟪绦蛟O(shè)計(jì),與面向過(guò)程程序設(shè)計(jì)相對(duì)。
2,類包含數(shù)據(jù)成員,成員函數(shù),數(shù)組,結(jié)構(gòu),類等。
3,類的成員分三種:public公有;protected保護(hù)段;private私有
私有成員只能在類中可見(jiàn),不能在類外或者派生類中使用。如果私有成員在第一段,則可以省略private
保護(hù)成員在類和派生類中可見(jiàn)
公有成員是類的接口在類中和累外都可見(jiàn)。
4,成員函數(shù)在類外定義是,要使用作用區(qū)分符:: 返回類型 類名::函數(shù)名(參數(shù)表)
5,可以數(shù)組組織對(duì)象,例如 Student student[100];student是一個(gè)有一百個(gè)類類型元素的數(shù)組。
6,訪問(wèn)對(duì)象成員,只有公有成員在類外可見(jiàn),訪問(wèn)運(yùn)算符是.(類名訪問(wèn))和->(指針訪問(wèn))
7,this指針,同一個(gè)類的每個(gè)對(duì)象都有自己數(shù)據(jù)成員的儲(chǔ)存空間,但是系統(tǒng)并不會(huì)給每一個(gè)成員函數(shù)都給一個(gè)函數(shù)副本,也就是說(shuō)數(shù)據(jù)有很多套,但是函數(shù)只有一套,那么為什么每個(gè)對(duì)象直接調(diào)用類內(nèi)的數(shù)據(jù)卻是那個(gè)對(duì)象對(duì)應(yīng)的數(shù)據(jù)呢,這就是因?yàn)閯?chuàng)建對(duì)象時(shí)就會(huì)自動(dòng)建立一個(gè)隱藏的指針叫做this,意思是指向這個(gè)新創(chuàng)建的對(duì)象的數(shù)據(jù)成員。這是一個(gè)隱含常指針,不能顯式說(shuō)明,但可以在成員函數(shù)中顯式使用。主要在運(yùn)算符重載,自引用等場(chǎng)合使用。一旦初始化,就獲得了對(duì)象的地址,指針值就不能再修改和賦值了,以保證不會(huì)指向其他對(duì)象。?小編推薦一個(gè)學(xué)C語(yǔ)言/C++的學(xué)習(xí)裙【 六二七,零一二,四六四 】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享!
常指針,相當(dāng)于 類名*const this 顯式使用 cout<<this->x<<endl
8.類的構(gòu)造函數(shù)和析構(gòu)函數(shù)
當(dāng)一個(gè)用戶定義的類類型對(duì)象時(shí),建立對(duì)象的初始化工作和釋放對(duì)象資源的工作本來(lái)編譯程序很輕松就能完成,但是如果比較復(fù)雜,那么就要用戶自定義構(gòu)造函數(shù)和析構(gòu)函數(shù)。這兩個(gè)函數(shù)都是類里面特殊的成員函數(shù)。兩者都不能在私有部分定義。
(1)構(gòu)造函數(shù)
構(gòu)造函數(shù)和類名一樣,沒(méi)有返回值類型,可以有參數(shù),構(gòu)造函數(shù)在建立對(duì)象時(shí)自動(dòng)調(diào)用。
帶參數(shù)的構(gòu)造函數(shù)可以用指定的數(shù)據(jù)初始化對(duì)象的數(shù)據(jù)成員。初始化數(shù)據(jù)成員有兩種方法:
(2)析構(gòu)函數(shù)
析構(gòu)函數(shù)是在類名前面加一個(gè)符號(hào)~,沒(méi)有返回值類型,也沒(méi)有參數(shù),析構(gòu)函數(shù)在類對(duì)象作用域結(jié)束時(shí)自動(dòng)調(diào)用。但如果類對(duì)象是由new 創(chuàng)建的動(dòng)態(tài)對(duì)象,則必須要用delete來(lái)刪除動(dòng)態(tài)對(duì)象,并這個(gè)過(guò)程會(huì)自動(dòng)調(diào)用析構(gòu)函數(shù)。 ~類名 (){...}
(3)重載構(gòu)造函數(shù)
C++中重載很重要,重載就是一個(gè)函數(shù)名對(duì)應(yīng)著多個(gè)功能不一函數(shù)體,然后程序可以根據(jù)用戶的輸入來(lái)進(jìn)行選擇用哪一個(gè)函數(shù)來(lái)處理數(shù)據(jù)。
就如類Date有多個(gè)構(gòu)造函數(shù),創(chuàng)建對(duì)象的時(shí)候,將根據(jù)參數(shù)匹配調(diào)用其中的一個(gè)構(gòu)造函數(shù)。
例如:
(4)復(fù)制構(gòu)造函數(shù)
在創(chuàng)建對(duì)象時(shí),如果想用一個(gè)同類型對(duì)象的數(shù)據(jù)對(duì)它進(jìn)行初始化,C++可以完成簡(jiǎn)單的復(fù)制,但是用戶自定義的復(fù)制構(gòu)造函數(shù)可用于完成更復(fù)雜的操作。
復(fù)制構(gòu)造函數(shù)要求有一個(gè)類類型的引用參數(shù) 類名::類名(const 類名&引用名,...);
調(diào)用復(fù)制構(gòu)造函數(shù)的時(shí)機(jī):創(chuàng)建對(duì)象時(shí),調(diào)用復(fù)制構(gòu)造函數(shù)進(jìn)行數(shù)據(jù)初始化;函數(shù)具有類類型傳值參數(shù)或者返回類類型的值時(shí),需要調(diào)用復(fù)制構(gòu)造函數(shù)。
(5)淺復(fù)制和深復(fù)制
如果數(shù)據(jù)成員資源是由指針指示的堆,系統(tǒng)復(fù)制對(duì)象數(shù)據(jù)時(shí)只進(jìn)行指針(地址值)的復(fù)制,而不會(huì)重新分配內(nèi)存空間。所以這時(shí)候就要用戶自定義自己的復(fù)制構(gòu)造函數(shù)。
9.類的其他成員
(1)常成員
常數(shù)據(jù)成員: const int M 如果在構(gòu)造函數(shù)中直接用常量進(jìn)行初始化,那么見(jiàn)了的每個(gè)對(duì)象的常數(shù)據(jù)的值都一樣;如果用帶參數(shù)的構(gòu)造函數(shù)來(lái)對(duì)常數(shù)據(jù)成員進(jìn)行初始化,那么就可以建立對(duì)象時(shí)進(jìn)行初始化。
常對(duì)象: 在定義對(duì)象時(shí)加上前綴 const 則該對(duì)象就是常對(duì)象。這個(gè)對(duì)象的所有數(shù)據(jù)成員在作用于中約束為只讀。
常成員函數(shù): class X{ int g() const{};} 它的this 指針類型是 const X *const this. 函數(shù)體代碼不能修改this指針?biāo)赶虻膶?duì)象的成員。
(2)靜態(tài)成員
靜態(tài)數(shù)據(jù)成員: 冠以static ,在類中聲明,但是要在類外定義。盡管從儲(chǔ)存性質(zhì)上看是全局變量,但是它的作用域是類。在類中聲明靜態(tài)數(shù)據(jù)成員時(shí)和其他數(shù)據(jù)成員一樣都不分配內(nèi)存,但是建立對(duì)象時(shí)其他數(shù)據(jù)成員會(huì)分配內(nèi)存,但是靜態(tài)數(shù)據(jù)成員 仍然不會(huì)分配內(nèi)存,因?yàn)樗鼉?chǔ)存空間的建立并不依賴對(duì)象。它在編譯時(shí)建立內(nèi)存并進(jìn)行一次文件范圍初始化,如果沒(méi)有指定初始化值,則自動(dòng)初始化為0.
靜態(tài)成員函數(shù): 不依賴于類數(shù)據(jù)結(jié)構(gòu)的共同操作,沒(méi)有this 指針,靜態(tài)成員函數(shù)只能訪問(wèn)類的靜態(tài)數(shù)據(jù)成員。
(3)友元
友元可以是一個(gè)普通函數(shù),一個(gè)成員函數(shù)或者另一個(gè)類。友元函數(shù)可以訪問(wèn)該類的所有成員。友元關(guān)系是非對(duì)稱,非傳遞的。
友元函數(shù):
在類A中,將關(guān)鍵字friend 冠于一個(gè)函數(shù)原型或一個(gè)類名前,那么該函數(shù)或者那個(gè)類就是類A的友元。
如果 數(shù)據(jù)成員x在類A中是私有,但是在類B中聲明的aobject 是公有的,那么在main 函數(shù)中就可以訪問(wèn)。B類的成員函數(shù)也可以通過(guò)參數(shù)形式獲得A類的對(duì)象參數(shù),達(dá)到訪問(wèn)A類的目的。
10.類的包含
如果你想編寫的一個(gè)新的類,里面一些功能需要用到一個(gè)已經(jīng)定義過(guò)的類的功能,為了少打一些代碼,可以在類里面調(diào)用類,這就是類的包含。
幾點(diǎn)學(xué)習(xí)建議:
1.基本概念很重要。無(wú)論學(xué)C,還是學(xué)C++,基本概念都是第一位的,也是比較困難的,但只有把握了基本概念才能把握整體脈絡(luò),才能居高臨下。
2.C是C++的子集,它的基本概念和設(shè)計(jì)方法相對(duì)比較容易理解,初學(xué)者可從它入手。
3.如果要學(xué)好C++,建議初學(xué)者最好別在如VC,BCB平臺(tái)下寫程序,那種自動(dòng)化的代碼生成,花花綠綠的界面,會(huì)讓你手足無(wú)措。最好先找一片空地(unix,dos),從頭做起,寫幾個(gè)大點(diǎn)的程序,數(shù)個(gè)回合,再到VC,BCB下看看,你會(huì)輕松得很。在我看來(lái),學(xué)好C/C++是成為VC,BCB高手的必由之路。
4.不要妄想速成,必須得一個(gè)byte,一個(gè)bit的去摳,盡量搞清楚每一個(gè)問(wèn)題。