最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++的友元和內(nèi)部類你了解嗎

 更新時間:2022年01月24日 08:44:47   作者:Bitdancing  
這篇文章主要為大家介紹了C++的友元和內(nèi)部類,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

友元分為:友元函數(shù) 和 友元類

友元提供了一種突破封裝的方式,有時提供了便利。但是友元會增加耦合度,破壞了封裝,所以友元不宜多用。

友元函數(shù)

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

  • 友元函數(shù)可訪問類的私有和保護(hù)成員,但不是類的成員函數(shù)
  • 友元函數(shù)不能用 const 修飾
  • 友元函數(shù)可以在類定義的任何地方聲明,不受類訪問限定符限制
  • 一個函數(shù)可以是多個類的友元函數(shù)
  • 友元函數(shù)的調(diào)用與普通函數(shù)的調(diào)用和原理相同

案例

friend ostream& operator<<(ostream& _cout, const Date& d);
friend istream& operator>>(istream& _cin, Date& d);

cout的輸出流對象和隱含的this指針再搶占第一個參數(shù)的位置。 this 指針默認(rèn)是第一個參數(shù)也就是左操作數(shù)。 但是實(shí)際使用中 cout 需要是第一個形參對象, 才能正常使用。

所以要將 operator<< 重載成全局函數(shù)。但是這樣的話,又會導(dǎo)致類外沒辦法訪問成員。所以這里就需要友元來解決。

友元類

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

  • 友元關(guān)系是單向的,不具有交換性
  • 友元關(guān)系不能傳遞

如果B是A的友元,C是B的友元,則不能說明C時A的友元。

class A;
class B;

class A {
	// 聲明B類為A類的友元類,則在B類中就直接訪問A類中的私有成員變量
	friend class B;
public:
	A (int a = 0)
		:_a(a)
	{}
private:
	int _a;
};

class B {
public:
	B(int b = 0)
		:_b(b)
	{}

	void SetA(int a)
	{
		// 直接訪問A類私有的成員變量
		_aa._a = a;
	}
private:
	int _b;
	A _aa;
};

在這里插入圖片描述

如果B不是A的友元類,報錯。

內(nèi)部類

如果一個類定義在另一個類的內(nèi)部,這個內(nèi)部類就叫做內(nèi)部類。

此時這個內(nèi)部類是一個獨(dú)立的類,他不屬于外部類,更不能通過外部類的對象去調(diào)用內(nèi)部類。外部類對內(nèi)部類沒有任何優(yōu)越的訪問權(quán)限。

注:

內(nèi)部類就是外部類的友元類。

內(nèi)部類可以通過外部類的對象參數(shù)來訪問外部類中的所有成員,但是外部類不是內(nèi)部類的友元。

  • 內(nèi)部類可以定義在 外部類的 public、protectedprivate
  • 內(nèi)部類可以直接訪問外部類中的 static ,枚舉成員,不需要外部類的對象或者類名
  • sizeof(外部類) = 外部類,和內(nèi)部類沒有關(guān)系
class A {
private:
	int _a;
	static int _k;

public:
	class B {
	public :
		void print(const A& aa)
		{
			cout << aa._a << endl;
			cout << _k << endl;
		}
	};

	A(int a = 10)
		:_a(a)
	{}
};

int A::_k = 0;

int main()
{
	A::B bb;
	bb.print(A());
	return 0;
}

輸出:

10
0

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++?OpenCV實(shí)戰(zhàn)之零部件的自動光學(xué)檢測

    C++?OpenCV實(shí)戰(zhàn)之零部件的自動光學(xué)檢測

    這篇文章主要為大家介紹一個C++?OpenCV的實(shí)戰(zhàn)——零部件的自動光學(xué)檢測,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-09-09
  • C語言SetConsoleCursorInfo函數(shù)使用方法

    C語言SetConsoleCursorInfo函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleCursorInfo函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 關(guān)于C語言操作符的那些事(超級全)

    關(guān)于C語言操作符的那些事(超級全)

    這篇文章主要給大家介紹了關(guān)于C語言操作符的那些事兒,c語言的操作符有很多,包括算術(shù)操作符、移位操作符、位操作符、賦值操作符、單目操作符、關(guān)系操作符、邏輯操作符、條件操作符、逗號表達(dá)式、下標(biāo)引用、函數(shù)調(diào)用和結(jié)構(gòu)成員,需要的朋友可以參考下
    2021-08-08
  • C++中頭文件和源文件詳細(xì)介紹

    C++中頭文件和源文件詳細(xì)介紹

    這篇文章主要介紹了C++中頭文件和源文件詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 詳解c++中的trait與policy模板技術(shù)

    詳解c++中的trait與policy模板技術(shù)

    trait模板和policy模板技術(shù)是把模板的trait和policy這兩個針對不同具體類型有變化的方面抽離出來形成兩個獨(dú)立的模板。由于trait和policy本身是模板,它的行為是可配置的,在模板中通過組合或者以模板實(shí)參傳進(jìn)來的方式使用trait和policy,就可以配置出不同的具體實(shí)現(xiàn)
    2021-06-06
  • Opencv使用Stitcher類圖像拼接生成全景圖像

    Opencv使用Stitcher類圖像拼接生成全景圖像

    這篇文章主要為大家詳細(xì)介紹了Opencv使用Stitcher類圖像拼接生成全景圖像,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++預(yù)定義的流對象基本示例詳解

    C++預(yù)定義的流對象基本示例詳解

    這篇文章主要為大家介紹了C++預(yù)定義的流對象基本示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • C語言typedef與復(fù)雜函數(shù)聲明問題的深入解析

    C語言typedef與復(fù)雜函數(shù)聲明問題的深入解析

    以下是對C語言中的typedef與復(fù)雜函數(shù)聲明問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • C++中左值引用,右值引用,萬能引用的關(guān)系及區(qū)別說明

    C++中左值引用,右值引用,萬能引用的關(guān)系及區(qū)別說明

    這篇文章主要介紹了C++中左值引用,右值引用,萬能引用的關(guān)系及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Objective-C的內(nèi)省(Introspection)用法小結(jié)

    Objective-C的內(nèi)省(Introspection)用法小結(jié)

    這篇文章主要介紹了Objective-C的內(nèi)省(Introspection)用法,這是面向?qū)ο笳Z言和環(huán)境的一個強(qiáng)大特性,需要的朋友可以參考下
    2014-07-07

最新評論

太原市| 平顺县| 纳雍县| 元江| 旺苍县| 乌兰浩特市| 繁峙县| 岱山县| 进贤县| 姜堰市| 克拉玛依市| 西昌市| 罗田县| 铜陵市| 卢龙县| 文昌市| 商都县| 信宜市| 邯郸县| 商丘市| 隆子县| 咸宁市| 竹北市| 溆浦县| 澄江县| 炉霍县| 手机| 滨海县| 舞阳县| 柯坪县| 长子县| 高淳县| 焦作市| 新野县| 隆回县| 贺州市| 伊吾县| 义乌市| 青冈县| 安宁市| 乡宁县|