C++中的類(lèi)有兩個(gè)成分:
(1)成員變量
成員變量按照作用域分為靜態(tài)成員變量和非靜態(tài)成員變量骨宠,C++中成員變量的默認(rèn)控制符是private,這點(diǎn)與Java不太一樣纵装。;按照控制符又可以分為public, private, protected扇苞;
靜態(tài)成員變量本質(zhì)上只是說(shuō)明了該變量的持續(xù)性和作用域欺殿,而不是定義
靜態(tài)成員變量不能重復(fù)定義,故靜態(tài)成員變量不能在類(lèi)中或者構(gòu)造函數(shù)中初始化鳖敷,因?yàn)閷?duì)象創(chuàng)建的時(shí)候會(huì)執(zhí)行一次脖苏;靜態(tài)成員變量一般在類(lèi)的外部進(jìn)行初始化,并且要放在所有代碼塊之外(全局作用域)定踱。如果靜態(tài)成員變量是const類(lèi)型則可以在類(lèi)定義中初始化棍潘。
靜態(tài)成員變量的初始化格式 type class::variable=value;
非靜態(tài)成員變量在對(duì)象創(chuàng)建時(shí)(分配內(nèi)存)才被定義,并由構(gòu)造函數(shù)初始化
(2)成員函數(shù)
C++中的成員函數(shù)定義的位置有兩種:
(1)定義在類(lèi)中
優(yōu)點(diǎn):簡(jiǎn)單方便明了
缺點(diǎn):類(lèi)定義包含類(lèi)實(shí)現(xiàn)崖媚,可定制性差
(2)定義在類(lèi)外
優(yōu)點(diǎn):可定制性好
缺點(diǎn):每次定義的時(shí)候要加上類(lèi)名class:: class_function(){}
同樣的亦歉,按照作用域來(lái)分,有靜態(tài)成員函數(shù)和非晶態(tài)成員函數(shù)畅哑,按照控制符來(lái)分肴楷,有public, private, protected
靜態(tài)成員函數(shù)在類(lèi)沒(méi)有定義前就可以使用,故靜態(tài)成員函數(shù)無(wú)法訪問(wèn)非靜態(tài)成員變量荠呐,它只能訪問(wèn)靜態(tài)成員函數(shù)內(nèi)部定義的變量或者靜態(tài)成員變量
Java中的類(lèi)是可以訪問(wèn)私有成員變量的赛蔫;
靜態(tài)成員函數(shù)要想訪問(wèn)私有成員變量绷杜,有兩種方案:
方案一:將所有訪問(wèn)的數(shù)據(jù)都定義成靜態(tài)成員變量;
方案二:
class a
?{?
public:? static FunctionA(a* _a)?
? ? {? ? a-> menber = 1;? }??
? ? private:? int menber;?
}
靜態(tài)成員函數(shù)與非靜態(tài)成員函數(shù)的根本區(qū)別是:非靜態(tài)成員函數(shù)有 this 指針濒募,而靜態(tài)成員函數(shù)沒(méi)有 this 指針鞭盟。由此決定了靜態(tài)成員函數(shù)不能訪問(wèn)本類(lèi)中的非靜態(tài)成員
注:友元
成員函數(shù)是屬于類(lèi)的,而類(lèi)中的私有成員變量只有成員函數(shù)才能訪問(wèn)瑰剃,非成員函數(shù)想訪問(wèn)私有成員函數(shù)齿诉,可以在函數(shù)定義前加上friend。成員函數(shù)的調(diào)用形式是
class A{}晌姚;
A a;
a.function();
非成員函數(shù)可以直接調(diào)用粤剧;
在對(duì)某些成員函數(shù)多次調(diào)用時(shí),由于參數(shù)傳遞挥唠,類(lèi)型檢查和安全性檢查等都需要時(shí)間開(kāi)銷(xiāo)抵恋,而影響程序的運(yùn)行效率。為了解決上述問(wèn)題宝磨,提出一種使用友元的方案弧关。友元是一種定義在類(lèi)外部的普通函數(shù),但它需要在類(lèi)體內(nèi)進(jìn)行說(shuō)明唤锉,為了與該類(lèi)的成員函數(shù)加以區(qū)別世囊,在說(shuō)明時(shí)前面加以關(guān)鍵字friend。友元不是成員函數(shù)窿祥,但是它可以訪問(wèn)類(lèi)中的私有成員株憾。友元的作用在于提高程序的運(yùn)行效率,但是晒衩,它破壞了類(lèi)的封裝性和隱藏性嗤瞎,使得非成員函數(shù)可以訪問(wèn)類(lèi)的私有成員。
注:Java與C++中關(guān)于static的區(qū)別與聯(lián)系
java中的“static”和C++中的“static”含義并不完全一樣L怠1雌妗!C++中的關(guān)鍵字static被復(fù)寫(xiě)了三次跛锌,有三種含義弃秆,分別為:
1:變量一直存在
2:不能被其他文件訪問(wèn)的全局變量和函數(shù)
3:屬于類(lèi)且不屬于對(duì)象的全局變量和函數(shù)
在一大部分人心中可能只把它理解為“靜態(tài)”的意思届惋,實(shí)際上Java僅僅取了C++中static的最后一個(gè)含義:即髓帽,不與類(lèi)的實(shí)例相關(guān)聯(lián),僅與類(lèi)相關(guān)聯(lián)脑豹。