C++中的成員變量和成員函數(shù)

C++中的類有兩個(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)成員變量不能在類中或者構(gòu)造函數(shù)中初始化,因?yàn)閷?duì)象創(chuàng)建的時(shí)候會(huì)執(zhí)行一次;靜態(tài)成員變量一般在類的外部進(jìn)行初始化,并且要放在所有代碼塊之外(全局作用域)。如果靜態(tài)成員變量是const類型則可以在類定義中初始化。

靜態(tài)成員變量的初始化格式 type class::variable=value;

非靜態(tài)成員變量在對(duì)象創(chuàng)建時(shí)(分配內(nèi)存)才被定義,并由構(gòu)造函數(shù)初始化

(2)成員函數(shù)

C++中的成員函數(shù)定義的位置有兩種:

(1)定義在類中

優(yōu)點(diǎn):簡(jiǎn)單方便明了

缺點(diǎn):類定義包含類實(shí)現(xiàn),可定制性差

(2)定義在類外

優(yōu)點(diǎn):可定制性好

缺點(diǎn):每次定義的時(shí)候要加上類名class:: class_function(){}

同樣的,按照作用域來(lái)分,有靜態(tài)成員函數(shù)和非晶態(tài)成員函數(shù),按照控制符來(lái)分,有public, private, protected

靜態(tài)成員函數(shù)在類沒(méi)有定義前就可以使用,故靜態(tài)成員函數(shù)無(wú)法訪問(wèn)非靜態(tài)成員變量,它只能訪問(wèn)靜態(tài)成員函數(shù)內(nèi)部定義的變量或者靜態(tài)成員變量

Java中的類是可以訪問(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)本類中的非靜態(tài)成員

注:友元

成員函數(shù)是屬于類的,而類中的私有成員變量只有成員函數(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ù)傳遞,類型檢查和安全性檢查等都需要時(shí)間開銷,而影響程序的運(yùn)行效率。為了解決上述問(wèn)題,提出一種使用友元的方案。友元是一種定義在類外部的普通函數(shù),但它需要在類體內(nèi)進(jìn)行說(shuō)明,為了與該類的成員函數(shù)加以區(qū)別,在說(shuō)明時(shí)前面加以關(guān)鍵字friend。友元不是成員函數(shù),但是它可以訪問(wèn)類中的私有成員。友元的作用在于提高程序的運(yùn)行效率,但是,它破壞了類的封裝性和隱藏性,使得非成員函數(shù)可以訪問(wèn)類的私有成員

注:Java與C++中關(guān)于static的區(qū)別與聯(lián)系

java中的“static”和C++中的“static”含義并不完全一樣?。?!C++中的關(guān)鍵字static被復(fù)寫了三次,有三種含義,分別為:

1:變量一直存在

2:不能被其他文件訪問(wèn)的全局變量和函數(shù)

3:屬于類且不屬于對(duì)象的全局變量和函數(shù)

在一大部分人心中可能只把它理解為“靜態(tài)”的意思,實(shí)際上Java僅僅取了C++中static的最后一個(gè)含義:即,不與類的實(shí)例相關(guān)聯(lián),僅與類相關(guān)聯(lián)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容