生活随笔
收集整理的這篇文章主要介紹了
C和C++中static的用法及友元
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C和C++中static的用法
文章目錄
- C和C++中static的用法
- 一、**C語(yǔ)言中**:
- 二、**C++中**:
- 三、**友元**:
一、C語(yǔ)言中:
static 修飾全局變量表示該變量只在本文件可用static修飾局部變量,使得局部變量的生命周期的延長(zhǎng)至程序結(jié)束static修飾函數(shù)表示該函數(shù)只在本文件可用,不能被外部文件引用
二、C++中:
- static修飾類中成員變量與類中普通成員變量的區(qū)別
靜態(tài)成員變量普通成員變量
| 在類內(nèi)聲明時(shí)要加static修飾 | 不用加static |
| 在類外進(jìn)行定義初始化 | 在構(gòu)造函數(shù)的初始化列表進(jìn)行初始化 |
| 不屬于某個(gè)具體的實(shí)例,為所有類對(duì)象所共享 | 每個(gè)類對(duì)象都包含所有普通成員變量 |
| 可以通過(guò)類名::靜態(tài)成員變量或?qū)ο竺?靜態(tài)成員變量名進(jìn)行訪問(wèn) | 只能通過(guò)對(duì)象名.普通成員名進(jìn)行訪問(wèn) |
| 因?yàn)殪o態(tài)成員變量不屬于某個(gè)具體實(shí)例,所以不影響類的大小(sizeof) | 影響 |
| 存儲(chǔ)位置在靜態(tài)區(qū) | 看在具體哪里創(chuàng)建 |
- static修飾類中成員函數(shù)與類中普通成員函數(shù)的區(qū)別
靜態(tài)成員函數(shù)普通成員函數(shù)
| 不能訪問(wèn)普通成員變量,只能訪問(wèn)靜態(tài)成員變量 | 既能訪問(wèn)普通成員變量,還能訪問(wèn)靜態(tài)成員變量 |
| 因?yàn)闆](méi)有隱藏的this指針,所以不能用const修飾函數(shù) | 有this指針,可以根據(jù)情況用const修飾函數(shù) |
| 可以通過(guò)類名::靜態(tài)成員函數(shù)或?qū)ο竺?靜態(tài)成員函數(shù)名進(jìn)行調(diào)用 | 只能通過(guò)對(duì)象名.靜態(tài)成員函數(shù)名進(jìn)行調(diào)用 |
| 靜態(tài)成員函數(shù)只能調(diào)用靜態(tài)成員函數(shù),不能調(diào)用非靜態(tài)成員函數(shù) | 非靜態(tài)成員函數(shù)既可以調(diào)用非靜態(tài)成員函數(shù)也可以調(diào)用靜態(tài)成員函數(shù) |
三、友元:
友元函數(shù)提供了一種突破封裝的方式,有時(shí)提供了便利,但是友元會(huì)增加耦合度,破壞了封裝。問(wèn)題:對(duì)于重載cout、cint
友元函數(shù)的特點(diǎn)
| 必須重載為全局函數(shù) |
| 第一個(gè)參數(shù)必須為ostream&,第二個(gè)參數(shù)必須為類類型對(duì)象的引用 |
| 必須有返回值,方便連續(xù)輸入輸出 |
| 盡量不要在重載函數(shù)內(nèi)部進(jìn)行格式化操作(換行) |
| 其可以直接訪問(wèn)類的所有成員,包括私有成員 |
| 友元函數(shù)不屬于任何類,但要在類的內(nèi)部任何地方進(jìn)行聲明,并加上friend關(guān)鍵字,不受任何類訪問(wèn)限定符限制, |
| 友元函數(shù)不能用const修飾, |
| 一個(gè)友元函數(shù)可以是多個(gè)類的友元函數(shù) |
- (二)、友元類:
- 友元類的特點(diǎn):友元關(guān)系是單項(xiàng)的,不能繼承,不能交換,不能傳遞
class Date
{
public:Date(){}Date(int year
, int month
, int day
):_year(year
),_month(month
),_day(day
){}void Show(){cout
<< _year
<< '-' << _month
<< '-' << _day
<< endl
;}static int GetCount(){return count
;}
private:int _year
;int _month
;int _day
;static int count
;
};
int Date
::count
= 10;int main()
{Date a
;a
.Show();Date
b(2019, 10, 19);b
.Show();cout
<< a
.GetCount() << endl
;cout
<< Date
::GetCount() << endl
;system("pause");return 0;
}
總結(jié)
以上是生活随笔為你收集整理的C和C++中static的用法及友元的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。