C++分析類的對象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員_第1頁
C++分析類的對象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員_第2頁
C++分析類的對象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員_第3頁
C++分析類的對象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員_第4頁
C++分析類的對象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第C++分析類的對象作類成員調(diào)用構(gòu)造與析構(gòu)函數(shù)及靜態(tài)成員目錄類對象作為成員靜態(tài)成員定義和分類靜態(tài)成員變量靜態(tài)成員函數(shù)總結(jié)

類對象作為成員

C++類中的成員可以是另一個類的對象,我們稱該成員為對象成員

例如:

classPhone{}

classPerson

Phonep;

}

tips:當(dāng)類中成員是其他類對象時,我們稱該成員為對象成員

Person類中有對象p作為成員,Phone為對象成員,那么當(dāng)創(chuàng)建Person對象時,Phone與Person的構(gòu)造和析構(gòu)的順序是誰先誰后?

那讓我們在兩個類中加上一些輸出語句做提示就好了,可以清晰的看到構(gòu)造和析構(gòu)的順序。

示例:

#includeiostream

usingnamespacestd;

//類對象作為類成員

classPhone

public:

Phone(stringP_name)

p_name=P_name;

cout"Phone類有參構(gòu)造"endl;

~Phone()

cout"Phone析構(gòu)"endl;

stringp_name;

classPerson

public:

Person(stringm_Name,stringp_Name):m_name(m_Name),m_PName(p_Name){

cout"Person構(gòu)造"endl;}//初始化列表

~Person()

cout"Person析構(gòu)"endl;

stringm_name;

Phonem_PName;

voidtest01()

Personp1("張三","華為nova7");

Personp3(p1);//調(diào)用默認(rèn)拷貝構(gòu)造函數(shù)

p3.m_name="李白";p3.m_PName.p_name="iphoneMAX";

coutp1.m_name"拿著"p1.m_PName.p_nameendl;

coutp3.m_name"拿著"p3.m_PName.p_nameendl;

intmain()

test01();

}

從結(jié)果圖中看出同時調(diào)用有參構(gòu)造的時候,先調(diào)用對象成員的構(gòu)造,再調(diào)用本類構(gòu)造

析構(gòu)的順序相反

靜態(tài)成員

定義和分類

靜態(tài)成員就是在成員變量和成員函數(shù)前加上關(guān)鍵字static,稱為靜態(tài)成員

靜態(tài)成員分為:

靜態(tài)成員變量

所有對象共享同一份數(shù)據(jù)在編譯階段分配內(nèi)存類內(nèi)聲明,類外初始化

靜態(tài)成員函數(shù)

所有對象共享同一個函數(shù)靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量

靜態(tài)成員變量

classPerson

public:

staticintm_A;

private:

staticintm_B;

intPerson::m_A=10;

intPerson::m_B=10;

voidtest01()

//靜態(tài)成員變量兩種訪問方式

//1、通過對象

Personp1;

p1.m_A=100;

cout"p1.m_A="p1.m_Aendl;

Personp2;

p2.m_A=200;

cout"p1.m_A="p1.m_Aendl;//共享同一份數(shù)據(jù)

cout"p2.m_A="p2.m_Aendl;

//2、通過類名

cout"m_A="Person::m_Aendl;

//cout"m_B="Person::m_Bendl;//私有權(quán)限訪問不到

intmain(){

test01();

system("pause");

return0;

}

靜態(tài)成員變量也是有訪問權(quán)限的,無論是public或者是private在類內(nèi)都可以被訪問,m_A和m_B在類內(nèi)定義在類外初始化,還記得類外初始化嗎,就是變量類型加類名加::變量名=值;同時可以通過對象和類名兩種方式訪問靜態(tài)成員變量。

靜態(tài)成員函數(shù)

classPerson

public:

intgetB()

returnm_B;

staticintm_A;

intm_C;//非靜態(tài)成員變量

//靜態(tài)成員函數(shù)

staticvoidfunc()

m_A=100;

//m_C=20;

cout"staticvoidfunc的調(diào)用"endl;

private:

staticintm_B;

staticvoidfunc2()

cout"staticvoidfunc的調(diào)用"endl;

intPerson::m_A=100;//類外外面初始化

intPerson::m_B=200;

voidtest03()

//調(diào)用方式有兩種

//1、通過對象調(diào)用

Personp;

p.func();

//通過類名調(diào)用

Person::func();

//類外訪問不到靜態(tài)成員函數(shù),靜態(tài)成員函數(shù)也有訪問權(quán)限

}

靜態(tài)成員函數(shù)也有權(quán)限的控制,代碼里寫了func是公共權(quán)限,func2是私有權(quán)限;靜態(tài)成員函數(shù)也有對象調(diào)用和類名調(diào)用兩種方式,但是都無法調(diào)用私有權(quán)限的靜態(tài)成員函數(shù)。

注意事項:靜態(tài)成員函數(shù)不可以訪問非靜態(tài)成員變量,無法區(qū)分到底是哪個對象的屬

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論