国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

c++中static靜態(tài)成員變量和靜態(tài)成員函數(shù)、explcit和隱式類型轉(zhuǎn)換、友元函數(shù)()詳解

這篇具有很好參考價(jià)值的文章主要介紹了c++中static靜態(tài)成員變量和靜態(tài)成員函數(shù)、explcit和隱式類型轉(zhuǎn)換、友元函數(shù)()詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

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

1.1概念

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

1.2特征

?靜態(tài)成員所有類對(duì)象所共享,不屬于某個(gè)具體的對(duì)象,存放在靜態(tài)區(qū)

?靜態(tài)成員變量必須在類外定義,定義時(shí)不添加static關(guān)鍵字,類中只是聲明

靜態(tài)成員變量也不能給缺省值,因?yàn)槿笔≈凳墙o初始化列表的,而初始化列表是初始化某個(gè)對(duì)象的,靜態(tài)成員變量是屬于整個(gè)類的,不屬于某一個(gè)具體對(duì)象。

class A {

//靜態(tài)成員變量在類中聲明
public:
	static int Count1;
private:
	static int Count2;
};
//靜態(tài)成員變量在類外定義并且初始化,
//不需要static修飾,但需要類名::的形式指定類域
int A::Count1 = 1;	
int A::Count2 = 2;
類靜態(tài)成員即可用 類名 :: 靜態(tài)成員 或者 對(duì)象 . 靜態(tài)成員 來(lái)訪問(wèn)
靜態(tài)成員也是類的成員,受 public 、 protected 、 private 訪問(wèn)限定符的限制
class A {
public:
	void abc1()
	{
		//A::public靜態(tài)成員變量可以在類內(nèi)表示
		cout << A::Count1<<endl;
	}
	void abc2()
	{
		//A::private靜態(tài)成員變量可以在類內(nèi)表示
		cout << A::Count2 << endl;
	}
//靜態(tài)成員變量在類中聲明
public:
	static int Count1;
private:
	static int Count2;
};
//靜態(tài)成員變量在類外定義并且初始化,
//不需要static修飾,但需要類名::的形式指定類域
int A::Count1 = 1;	
int A::Count2 = 2;
int main()
{
	A aa;
	aa.abc1();
	//public修飾的成員變量可以在類外訪問(wèn)
	cout << A::Count1 << endl;
	cout << aa.Count1 << endl;
	aa.abc2();
	//private修飾的成員變量不能再類外訪問(wèn)
	//cout << A::Count2 << endl;
	//cout << aa.Count2 << endl;
	return 0;
}
靜態(tài)成員函數(shù) 沒(méi)有 隱藏的 this 指針 ,不能訪問(wèn)任何非靜態(tài)成員

靜態(tài)成員函數(shù)不能調(diào)用非靜態(tài)成員函數(shù),因?yàn)?strong>沒(méi)有this指針

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

class A {
public:
	static int abc1()
	{
		//A::public靜態(tài)成員變量可以在類內(nèi)表示
		return Count1;
	}
	static int abc2()
	{
		//A::private靜態(tài)成員變量可以在類內(nèi)表示
		return Count2;
	}
	//靜態(tài)成員變量在類中聲明
public:
	static int Count1;
private:
	static int Count2;
};
//靜態(tài)成員變量在類外定義并且初始化,
//不需要static修飾,但需要類名::的形式指定類域
int A::Count1 = 1;
int A::Count2 = 2;
int main()
{
	A aa;
	//靜態(tài)成員函數(shù)調(diào)用時(shí),突破類域就可以
	cout << A::abc1() << endl;
	cout << aa.abc1() << endl;
	return 0;
}

1.3總結(jié)

靜態(tài)成員函數(shù)和靜態(tài)成員變量,本質(zhì)是受限制的全局變量和全局函數(shù),專屬這個(gè)類,受訪問(wèn)限定符和類域限制

2.explicit

2.1隱式類型轉(zhuǎn)換

class Date
{
public:
	Date(int year = 2023, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date a1(2023,11,13);
	Date a2;
	Date a3;
	//相當(dāng)于2024這個(gè)整形隱式類型轉(zhuǎn)換為了Date形
	//用2024構(gòu)造一個(gè)臨時(shí)變量,類型為const Date,臨時(shí)變量再去賦值構(gòu)造a2;
	a2 = 2024;
	//c++11規(guī)定可以傳多個(gè)參數(shù)
	a3 = { 2024,3,3 };
	return 0;
}

需要注意的是,隱式類型轉(zhuǎn)換的臨時(shí)變量是const類型,需要考慮權(quán)限問(wèn)題

權(quán)限可以平移,可以縮小,但不能被放大?。?!

const可以傳給const(權(quán)限平移),const可以傳給非const(權(quán)限縮小

非const成員函數(shù)?不能?傳給非const(權(quán)限放大),非const可以傳給const(權(quán)限平移

2.2expilcit的作用

explicit 修飾構(gòu)造函數(shù),將會(huì)禁止構(gòu)造函數(shù)的隱式轉(zhuǎn)換 。
但如果是顯示類型轉(zhuǎn)換,expilcit是禁止不了的

3.友元

3.1友元函數(shù)

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

當(dāng)我們需要在一個(gè)全局函數(shù)中訪問(wèn)一個(gè)對(duì)象中的私有或者保護(hù)成員時(shí),需要在類中聲明友元函數(shù)

class Date
{
	//聲明友元函數(shù),注意是聲明,不是定義?。?!
	friend int add(Date aa);
public:
private:
	int _year;
	int _month;
	int _day;
};
int add(Date aa)
{
	//在全局函數(shù)中需要訪問(wèn)一個(gè)類的私有時(shí),需要在類中聲明友元函數(shù)
	return aa._year + aa._month;
}
友元函數(shù) 可訪問(wèn)類的私有和保護(hù)成員,但 不是類的成員函數(shù)
友元函數(shù) 不能用 const 修飾
友元函數(shù) 可以在類定義的任何地方聲明, 不受類訪問(wèn)限定符限制
一個(gè)函數(shù)可以是多個(gè)類的友元函數(shù)
友元函數(shù)的調(diào)用與普通函數(shù)的調(diào)用原理相同

3.2友元類

友元類的所有成員函數(shù)都可以是另一個(gè)類的友元函數(shù),都可以訪問(wèn)另一個(gè)類中的非公有成員。
友元關(guān)系是單向的,不具有交換性。

如果CB的友元, BA的友元,則不能說(shuō)明C時(shí)A的友元。 文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-756553.html

class Date1
{
	//聲明Date2是Date1的友元類,
	//Date2可以訪問(wèn)Date1的私有或者保護(hù)成員
	friend class Date2;
private:
	int _year1;
	int _month1;
	int _day1;
};
class Date2
{
public:
	//可以訪問(wèn)Date1中的私有或者保護(hù)成員
	int add(Date1 d1)
	{
		return d1._year1;
	}
private:
	int _year2;
	int _month2;
	int _day2;
};

到了這里,關(guān)于c++中static靜態(tài)成員變量和靜態(tài)成員函數(shù)、explcit和隱式類型轉(zhuǎn)換、友元函數(shù)()詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包