C 7 類與物件(下)

2021-09-24 20:55:37 字數 3894 閱讀 9852

友元函式:

友元類:

內部類:

小練習①:

小練習②:

宣告為static的類成員稱為類的靜態成員,用static修飾的成員變數,稱之為靜態成員變數;用static修飾的成員函式,稱之為靜態成員函式

classa~

a()a

(const a& a)

static

intgetcount()

private

:int _a;

static

int _count;};

int a::_count =0;

intmain()

靜態成員為所有類物件所共享,不屬於某個具體的例項

靜態成員變數必須在類外定義,定義時不新增static關鍵字

類靜態成員即可用類名::靜態成員或者物件.靜態成員來訪問靜態成員函式沒有隱藏的this指標,不能訪問任何非靜態成員

靜態成員和類的普通成員一樣,有public、protected、private3種訪問級別,可以具有返回值

沒辦法將operator《過載成成員函式。因為cout的輸出流物件和隱含的this指標在搶占第乙個引數的位置.this指標預設是第乙個引數也就是左運算元了.但是實際使用中cout需要是第乙個形參物件,才能正常使用.所以我們要將operator《過載成全域性函式.但是這樣的話,又會導致類外沒辦法訪問成員,那麼這裡就需要友元來解決

不符常理的cout:

ostream&

operator

<<

(ostream& _cout)

intmain()

友元函式可以直接訪問類的私有成員,它是定義在類外部的普通函式,不屬於任何類,但需要在類的內部宣告,宣告時需要加friend關鍵字

class

date

~date()

date

(const date& d)

private

:int _year;

int _month;

int _day;};

ostream&

operator

<<

(ostream& _cout,

const date& d)

intmain()

友元函式可訪問類的私有成員,但不是類的成員函式

友元函式不能用const修飾

友元函式可以在類定義的任何地方宣告,不受類訪問限定符限制乙個函式可以是多個類的友元函式

友元函式的呼叫與普通函式的呼叫和原理相同

友元類的所有成員函式都可以是另乙個類的友元函式,都可以訪問另乙個類中的非公有成員

友元關係是單向的,不具有交換性

友元關係不可傳遞

class

time

~time()

time

(const time& t)

void

printtime()

private

:int _hour;

int _minute;

int _second;};

class

date

~date()

date

(const date& d)

void

settime

(int hour,

int minute,

int second)

void

printdate()

private

:int _year;

int _month;

int _day;

time _t;};

intmain()

宣告日期類為時間類的友元類,則在日期類中就直接訪問time類中的私有成員變數

classa}

;private

:int a =10;

int b =10;

};intmain()

內部類是外部類的友元類外部類對內部類沒有任何優越的訪問許可權注意內部類可以直接訪問外部類中的static、列舉成員,不需要外部類的物件/類名

sizeof(外部類)=外部類,和內部類沒有任何關係

class

solution

sum(

const sum& s)

static

void

reset()

static

intgetsum()

};public

:int

sum_solution

(int n)

private

:static

int _count;

static

int _total;};

int solution::_count=0;

int solution::_total=

0;

日期類的實現

注意事項:

<1>.主函式中的失敗返回-1和結果只能用cout輸出,用return牛客網會報錯

<2>.迴圈輸入使用while(cin>>year>>month>>day)

#include

using

namespace std;

bool

isyear

(int year)

return

false;}

intgetmonthday

(int year,

int month);if

(isyear

(year)

==true

)return days[month];}

bool

nottruedate

(int year,

int month,

int day)

return

false;}

inttransdate

(int year,

int month,

int day)

;int totaldays=0;

if(isyear

(year)

==true

)for

(int i=

1;i++i)

totaldays+

=day;

return totaldays;

}int

main()

else

}return0;

}

C 7 類與物件 友元函式2

程式設計序,求空間中 不是平面中 二點間距離,通過友元函式訪問私有成員 程式 include include using namespace std class point point friend double d point p1,point p2 double d point p1,point...

C 7程式設計模式與實踐

c 7是乙個重大更新,其中提供了很多有意思的新功能。雖然已有大量的文章介紹這些功能可以做什麼,但是鮮有文章介紹應如何使用這些功能。本文將過一遍 net設計規範 net約定慣用法與模式 譯者注 英文書名為 framework design guidelines conventions,idioms,a...

C 7程式設計模式與實踐

c 7是乙個重大更新,其中提供了很多有意思的新功能。雖然已有大量的文章介紹這些功能可以做什麼,但是鮮有文章介紹應如何使用這些功能。本文將過一遍 net設計規範 net約定慣用法與模式 譯者注 英文書名為 framework design guidelines conventions,idioms,a...