日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++友元和内部类

發布時間:2024/3/24 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++友元和内部类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、友元
1.1 友元分為:友元函數和友元類

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

1.2 友元函數:友元函數可以直接訪問類的私有成員,它是定義在類外部的普通函數,不屬于任何類,但需要在類的內部聲明,聲明時需要加friend關鍵字。
說明:
① 友元函數可訪問類的私有成員,但不是類的成員函數
② 友元函數不能用const修飾
③ 友元函數可以在類定義的任何地方聲明,不受類訪問限定符限制
④ 一個函數可以是多個類的友元函數
⑤ 友元函數的調用與普通函數的調用和原理相同

1.3 友元成員函數:friend函數不僅可以是一般函數(非成員函數),而且可以是另一個類中的成員函數。注意:可能會用到類的提前引用聲明。

#include <iostream> using namespace std;class Date; //對Date類的提前引用聲明 class Time { public:Time(int hour, int minute, int second):hour(hour), minute(minute), second(second){}void display(Date& d); //引用Date類的對象 private:int hour;int minute;int second; };class Date //Date類的聲明 { public:Date(int year, int month, int day):year(year), month(month), day(day){}friend void Time::display(Date& d); //聲明Time類中display函數為本類的友元函數 private:int year;int month;int day; };void Time::display(Date& d) //定義display函數,只能在Date類后面定義 {cout << d.year << "-" << d.month << "-" << d.day << " " << hour << ":" << minute << ":" << second << endl; }int main() {Time t(12, 30, 8);Date d(2019, 12, 23);t.display(d);return 0; }

1.3 友元類
①友元類的所有成員函數都可以是另一個類的友元函數,都可以訪問另一個類中的非公有成員。
②友元關系是單向的,不具有交換性。
比如上述Time類和Date類,在Time類中聲明Date類為其友元類,那么可以在Date類中直接訪問Time類的私有成員變量,但想在Time類中訪問Date類中私有的成員變量則不行。
③友元關系不能傳遞
如果B是A的友元,C是B的友元,則不能說明C時A的友元。

1.4友元利弊:友元是對面向對象的封裝性進行破環,但是有助于數據共享,能提高程序的效率。使用時做好權衡!

二、內部類

2.1 概念:如果一個類定義在另一個類的內部,這個內部類就叫做內部類。注意此時這個內部類是一個獨立的類,它不屬于外部類,更不能通過外部類的對象去調用內部類。外部類對內部類沒有任何優越的訪問權限。

注意:內部類就是外部類的友元類。注意友元類的定義,內部類可以通過外部類的對象參數來訪問外部類中的所有成員。但是外部類不是內部類的友元。

2.2 特性:
①內部類可以定義在外部類的public、protected、private都是可以的。
②注意內部類可以直接訪問外部類中的static、枚舉成員,不需要外部類的對象/類名。
③sizeof(外部類)=外部類,和內部類沒有任何關系。

總結

以上是生活随笔為你收集整理的C++友元和内部类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。