欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++示例講解friend static const關(guān)鍵字的用法

 更新時(shí)間:2022年06月17日 11:06:53   作者:努力變好的zz  
靜態(tài)成員static是解決同一個(gè)類的不同對(duì)象之間數(shù)據(jù)和函數(shù)共享問題。區(qū)分全局變量,全局變量也能實(shí)現(xiàn)數(shù)據(jù)共享,但安全性和封裝性被破壞了,友元提供了不同類或?qū)ο蟮某蓡T函數(shù)之間、類的成員函數(shù)與一般函數(shù)之間進(jìn)行數(shù)據(jù)共享的機(jī)制,const常引用-被引用的對(duì)象不能被更新

一、友元函數(shù)

1.1重載operator<<

問題:現(xiàn)在我們嘗試去重載operator<<,然后發(fā)現(xiàn)我們沒辦法將operator<<重載成成員函數(shù)。因?yàn)閏out的輸出流對(duì)象和隱含的this指針在搶占第一個(gè)參數(shù)的位置。this指針默認(rèn)是第一個(gè)參數(shù)也就是左操作數(shù)了。但是實(shí)際使用中cout需要是第一個(gè)形參對(duì)象,才能正常使用。所以我們要將operator<<重載成全局函數(shù)。但是這樣的話,又會(huì)導(dǎo)致類外沒辦法訪問成員,那么這里就需要友元來解決。operator>>同理。

class Date
{
public:
Date(int year, int month, int day)
: _year(year)
, _month(month)
, _day(day)
{}
ostream& operator<<(ostream& _cout)
{
_cout<<d._year<<"-"<<d._month<<"-"<<d._day;
return _cout;
}
prvate:
int _year;
int _month;
int _day
};
int main()
{
Date d(2017, 12, 24);
d<<cout;
return 0;
}

但"d<<cout"可讀性很低,所以我們嘗試需要在類外部重載operator<<

1.2友元函數(shù)

友元函數(shù)可以直接訪問類的私有成員,它是定義在類外部的普通函數(shù),不屬于任何類,但需要在類的內(nèi)部聲明,聲明時(shí)需要加friend關(guān)鍵字。

class Date
{
friend ostream& operator<<(ostream& _cout, const Date& d);
friend istream& operator>>(istream& _cin, Date& d);
public:
Date(int year, int month, int day)
: _year(year)
, _month(month)
, _day(day)
{}
private:
int _year;
int _month;
int _day;
};
ostream& operator<<(ostream& _cout, const Date& d)
{
_cout<<d._year<<"-"<<d._month<<"-"<<d._day;
return _cout;
}
istream& operator>>(istream& _cin, Date& d)
{
_cin>>d._year;
_cin>>d._month;
_cin>>d._day;
return _cin;
}
int main()
{
Date d;
cin>>d;
cout<<d<<endl;
return 0;

1.友元函數(shù)可訪問類的私有和保護(hù)成員,但不是類的成員函數(shù)

2.友元函數(shù)不能用const修飾

3.友元函數(shù)可以在類定義的任何地方聲明,不受類訪問限定符限制

4.一個(gè)函數(shù)可以是多個(gè)類的友元函數(shù)

5.友元函數(shù)的調(diào)用與普通函數(shù)的調(diào)用和原理相同

1.3友元類

1.友元類的所有成員函數(shù)都可以是另一個(gè)類的友元函數(shù),都可以訪問另一個(gè)類中的非公有成員。

2.友元關(guān)系是單向的,不具有交換性。

比如上述Time類和Date類,在Time類中聲明Date類為其友元類,那么可以在Date類中直接訪問Time類的私有成員變量,但想在Time類中訪問Date類中私有的成員變量則不行。

3.友元關(guān)系不能傳遞如果B是A的友元,C是B的友元,則不能說明C時(shí)A的友元。

class Date; // 前置聲明
class Time
{
friend class Date; // 聲明日期類為時(shí)間類的友元類,則在日期類中就直接訪問Time類中的私有成
員變量
public:
Time(int hour, int minute, int second)
: _hour(hour)
, _minute(minute)
, _second(second)
{}
private:
int _hour;
int _minute;
int _second;
};
class Date
{
public:
Date(int year = 1900, int month = 1, int day = 1)
: _year(year)
, _month(month)
, _day(day)
{}
void SetTimeOfDate(int hour, int minute, int second)
{
// 直接訪問時(shí)間類私有的成員變量
_t._hour = hour;
_t._minute = minute;
_t.second = second;
}
private:
int _year;
int _month;
int _day;
Time _t;
};

二、關(guān)鍵字const

2.1const修飾類的成員函數(shù)

將const修飾的類成員函數(shù)稱之為const成員函數(shù),const修飾類成員函數(shù),實(shí)際修飾該成員函數(shù)隱含的this指針,表明在該成員函數(shù)中不能對(duì)類的任何成員進(jìn)行修改。

總結(jié):

1.const對(duì)象不能調(diào)用非cosnt成員函數(shù)(權(quán)限放大:const Date* -> Date*)

2.非const對(duì)象可以調(diào)用const成員函數(shù)

3.const成員函數(shù)不能調(diào)用非cosnt成員函數(shù)(權(quán)限放大)

4.非cosnt成員函數(shù)可以調(diào)用const成員函數(shù)

三、關(guān)鍵字static

3.1static類成員

概念:聲明為static的類成員稱為類的靜態(tài)成員,用static修飾的成員變量,稱之為靜態(tài)成員變量;用static修飾的成員函數(shù),稱之為靜態(tài)成員函數(shù)。靜態(tài)的成員變量一定要在類外進(jìn)行初始化

特性:

  • 靜態(tài)成員為所有類對(duì)象所共享,不屬于某個(gè)具體的實(shí)例
  • 靜態(tài)成員變量必須在類外定義,定義時(shí)不添加static關(guān)鍵字
  • 類靜態(tài)成員即可用類名::靜態(tài)成員或者對(duì)象.靜態(tài)成員來訪問
  • 靜態(tài)成員函數(shù)沒有隱藏的this指針,不能訪問任何非靜態(tài)成員
  • 靜態(tài)成員和類的普通成員一樣,也有public、protected、private3種訪問級(jí)別,也可以具有返回值

3.2面試題

面試題:實(shí)現(xiàn)一個(gè)類,計(jì)算中程序中創(chuàng)建出了多少個(gè)類對(duì)象。

class A
{
public:
A() {++_scount;}
A(const A& t) {++_scount;}
static int GetACount() { return _scount;}
private:
static int _scount;
};
int A::_count = 0;
void TestA()
{
cout<<A::GetACount()<<endl;
A a1, a2;
A a3(a1);
cout<<A::GetACount()<<endl;
}

注意:

1.靜態(tài)成員函數(shù)不能調(diào)用非靜態(tài)成員函數(shù)

2.非靜態(tài)成員函數(shù)可以調(diào)用靜態(tài)成員函數(shù)

總結(jié)

以上就是關(guān)于C++關(guān)鍵字friend ,static,const 全部總結(jié),感謝大家的閱讀觀看

到此這篇關(guān)于C++示例講解friend static const關(guān)鍵字的用法的文章就介紹到這了,更多相關(guān)C++ friend static const內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    一篇文章帶你了解C++面向?qū)ο缶幊?-繼承

    這篇文章主要介紹了解析C++面對(duì)象編程--繼承的運(yùn)用,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-08-08
  • C語(yǔ)言數(shù)組超詳細(xì)講解下篇掃雷

    C語(yǔ)言數(shù)組超詳細(xì)講解下篇掃雷

    數(shù)組是一組有序的數(shù)據(jù)的集合,本篇將帶你結(jié)合數(shù)組來實(shí)現(xiàn)掃雷小游戲,上手實(shí)練更快的能夠掌握數(shù)組使用,感興趣的朋友來看看吧
    2022-04-04
  • C++中cin的返回值問題

    C++中cin的返回值問題

    這篇文章主要介紹了C++中cin的返回值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語(yǔ)言示例講解動(dòng)態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)

    C語(yǔ)言示例講解動(dòng)態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)

    通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 一文詳解Qt中的對(duì)象樹機(jī)制

    一文詳解Qt中的對(duì)象樹機(jī)制

    Qt提供了對(duì)象樹機(jī)制,能夠自動(dòng)、有效的組織和管理繼承自QObject的Qt對(duì)象。這篇文章將通過一些示例為大家介紹一下Qt中對(duì)象樹機(jī)制的使用,需要的可以參考一下
    2023-03-03
  • Qt專欄之模態(tài)與非模態(tài)對(duì)話框的實(shí)現(xiàn)

    Qt專欄之模態(tài)與非模態(tài)對(duì)話框的實(shí)現(xiàn)

    這篇文章主要介紹了Qt專欄之模態(tài)與非模態(tài)對(duì)話框的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C++實(shí)現(xiàn)MyString的示例代碼

    C++實(shí)現(xiàn)MyString的示例代碼

    本文主要介紹了C++實(shí)現(xiàn)MyString的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn)

    openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn)

    本文主要介紹了openCV中meanshift算法查找目標(biāo)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 常用C/C++預(yù)處理指令詳解

    常用C/C++預(yù)處理指令詳解

    預(yù)處理指令提供按條件跳過源文件中的節(jié)、報(bào)告錯(cuò)誤和警告條件,以及描繪源代碼的不同區(qū)域的能力。使用術(shù)語(yǔ)“預(yù)處理指令”只是為了與 C 和 C++ 編程語(yǔ)言保持一致。在 C# 中沒有單獨(dú)的預(yù)處理步驟;預(yù)處理指令按詞法分析階段的一部分處理。
    2014-11-11
  • 利用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋游戲

    利用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋游戲

    這篇文章主要為大家詳細(xì)介紹了利用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03

最新評(píng)論