亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

詳解C++編程中的嵌套類的聲明與其中的函數使用

2020-05-23 14:09:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C++編程中的嵌套類的聲明與其中的函數使用,嵌套類即在一個類的范圍內聲明和編寫另一個類,需要的朋友可以參考下
 

可以在一個類的范圍內聲明另一個類。這樣的類稱為“嵌套類”。 嵌套類被視為在封閉類的范圍內且可在該范圍內使用。若要從嵌套類的即時封閉范圍之外的某個范圍引用該類,則必須使用完全限定名。
下面的示例演示如何聲明嵌套類:

// nested_class_declarations.cppclass BufferedIO{public:  enum IOError { None, Access, General };  // Declare nested class BufferedInput.  class BufferedInput  {  public:   int read();   int good()   {     return _inputerror == None;   }  private:    IOError _inputerror;  };  // Declare nested class BufferedOutput.  class BufferedOutput  {   // Member list  };};int main(){}

在 BufferedIO::BufferedInput 中聲明 BufferedIO::BufferedOutput 和 BufferedIO。這些類名稱在類 BufferedIO 的范圍外不可見。但是,BufferedIO 類型的對象不包含 BufferedInput 或 BufferedOutput 類型的任何對象。
嵌套類只能從封閉類中直接使用名稱、類型名稱,靜態成員的名稱和枚舉數。若要使用其他類成員的名稱,您必須使用指針、引用或對象名。
在前面的 BufferedIO 示例中,枚舉 IOError 可由嵌套類中的成員函數、BufferedIO::BufferedInput 或 BufferedIO::BufferedOutput 直接訪問,如函數 good 中所示。
注意
嵌套類僅在類范圍內聲明類型。它們不會導致創建嵌套類的包含對象。前面的示例聲明兩個嵌套類,但未聲明這些類類型的任何對象。
在將類型名稱與前向聲明一起聲明時,會引發嵌套類聲明的范圍可見性的異常。在這種情況下,由前向聲明聲明的類名在封閉類的外部可見,其范圍定義為最小的封閉非類范圍。例如:

// nested_class_declarations_2.cppclass C{public:  typedef class U u_t; // class U visible outside class C scope  typedef class V {} v_t; // class V not visible outside class C};int main(){  // okay, forward declaration used above so file scope is used  U* pu;  // error, type name only exists in class C scope  u_t* pu2; // C2065  // error, class defined above so class C scope  V* pv; // C2065  // okay, fully qualified name  C::V* pv2;}

嵌套類中的訪問權限
將一個類嵌入另一個類中不會為嵌入類的成員函數提供特殊訪問權限。同樣,封閉類的成員函數不具有對嵌套類的成員的特殊訪問權限。
嵌套類中的成員函數
在嵌套類中聲明的成員函數可在文件范圍中定義。前面的示例可能已編寫:

// member_functions_in_nested_classes.cppclass BufferedIO{public:  enum IOError { None, Access, General };  class BufferedInput  {  public:    int read(); // Declare but do not define member    int good(); // functions read and good.  private:    IOError _inputerror;  };  class BufferedOutput  {    // Member list.  };};// Define member functions read and good in// file scope.int BufferedIO::BufferedInput::read(){  return(1);}int BufferedIO::BufferedInput::good(){  return _inputerror == None;}int main(){}

在前面的示例中,qualified-type-name 語法用于聲明函數名稱。聲明:

BufferedIO::BufferedInput::read()

表示“作為 read 類(位于 BufferedInput 類的范圍中)的成員的 BufferedIO 函數。” 由于此聲明使用 qualified-type-name 語法,因此以下形式的構造是可能的:

typedef BufferedIO::BufferedInput BIO_INPUT;int BIO_INPUT::read()

上述聲明與前一個聲明等效,但它使用了 typedef 名稱來代替類名稱。
嵌套類中的友元函數
嵌套類中聲明的友元函數被認為是在嵌套類而不是封閉類的范圍內。因此,友元函數未獲得對封閉類的成員或成員函數的特定訪問權限。如果需要使用在友元函數中的嵌套類中聲明的名稱,并且友元函數是在文件范圍內定義的,請使用限定的類型名稱,如下所示:

// friend_functions_and_nested_classes.cpp#include <string.h>enum{  sizeOfMessage = 255};char *rgszMessage[sizeOfMessage];class BufferedIO{public:  class BufferedInput  {  public:    friend int GetExtendedErrorStatus();    static char *message;    static int messageSize;    int iMsgNo;  };};char *BufferedIO::BufferedInput::message;int BufferedIO::BufferedInput::messageSize;int GetExtendedErrorStatus(){  int iMsgNo = 1; // assign arbitrary value as message number  strcpy_s( BufferedIO::BufferedInput::message,       BufferedIO::BufferedInput::messageSize,       rgszMessage[iMsgNo] );  return iMsgNo;}int main(){}

以下代碼演示聲明為友元函數的函數 GetExtendedErrorStatus。在文件范圍內定義的函數中,將消息從靜態數組復制到類成員中。請注意,GetExtendedErrorStatus 的更佳實現是將其聲明為:

int GetExtendedErrorStatus( char *message )

利用前面的接口,許多類可以通過傳遞要復制錯誤消息的內存位置來使用此函數的服務。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品电影久久久| 亚洲国产成人一区| 亚洲欧美色图片| 成人女保姆的销魂服务| 欧美激情性做爰免费视频| 欧美日韩国产一区在线| 亚洲精品久久久久中文字幕二区| 久久人人爽人人爽人人片av高清| 亚洲精品欧美日韩| 日韩av在线免费观看| 亚洲国产私拍精品国模在线观看| 国产精品青青在线观看爽香蕉| 91高清在线免费观看| 日韩在线观看网址| 亚洲风情亚aⅴ在线发布| 亚洲欧美另类人妖| 成人激情免费在线| 在线视频中文亚洲| 国产精品99久久久久久久久| …久久精品99久久香蕉国产| 欧美极品第一页| 色诱女教师一区二区三区| 欧美自拍视频在线| 欧美国产日韩xxxxx| 国产精品黄视频| 中文字幕成人在线| 日韩av在线最新| 欧美日韩亚洲激情| 久久男人的天堂| 国产精品一区二区三区免费视频| 在线观看久久久久久| 国产日韩中文字幕在线| 欧美日韩激情小视频| 国产精品一二区| 欧美日韩亚洲一区二区三区| 欧美人成在线视频| 欧美激情第6页| 午夜精品一区二区三区在线视| 欧美精品激情视频| 久久偷看各类女兵18女厕嘘嘘| 国产suv精品一区二区三区88区| 久久五月天综合| 欧美视频13p| 亚洲午夜久久久影院| 成人午夜高潮视频| 国产专区欧美专区| 日本高清久久天堂| 成人欧美一区二区三区在线| 久久久999国产精品| 国产精品第2页| 国产精品一久久香蕉国产线看观看| 亚洲第一区中文99精品| 成人国产精品一区二区| 国产视频福利一区| 亚洲第一国产精品| 日韩在线观看视频免费| 国产精品丝袜一区二区三区| 亚洲第一页自拍| 欧美日韩加勒比精品一区| 国产精品视频26uuu| 欧美激情精品久久久久久黑人| 最近2019中文字幕大全第二页| 国产经典一区二区| 国产精品91在线| 亚洲国产福利在线| 欧美午夜片欧美片在线观看| 欧美日韩国产区| 欧美性理论片在线观看片免费| 亚洲精品之草原avav久久| 亚洲视频在线播放| 日韩精品亚洲元码| 一本色道久久88精品综合| 欧美亚洲在线播放| 成人精品在线视频| 日韩中文字幕在线精品| 亚洲人午夜色婷婷| 大伊人狠狠躁夜夜躁av一区| 日韩亚洲在线观看| 国产不卡精品视男人的天堂| 最近日韩中文字幕中文| 国产乱人伦真实精品视频| 日韩高清人体午夜| 国产精品爽爽ⅴa在线观看| 在线观看视频亚洲| 亚洲伊人久久大香线蕉av| 亚洲欧洲免费视频| 日韩高清电影好看的电视剧电影| 亚洲一区二区久久久久久| 精品爽片免费看久久| 欧美激情精品在线| 精品免费在线视频| 蜜臀久久99精品久久久无需会员| 欧美黄网免费在线观看| 亚洲国产私拍精品国模在线观看| 成人看片人aa| 亚洲天堂网站在线观看视频| 国产精品久久激情| 国产一区二区三区高清在线观看| 7777免费精品视频| 欧美电影免费观看电视剧大全| 午夜精品国产精品大乳美女| 九九精品视频在线| 欧美尺度大的性做爰视频| 亚洲欧洲一区二区三区久久| 国产噜噜噜噜噜久久久久久久久| 伊人久久免费视频| 亚洲色在线视频| 亚洲aⅴ日韩av电影在线观看| 国产精品99蜜臀久久不卡二区| 久久精品中文字幕免费mv| 91欧美视频网站| 亚洲精品久久视频| 亚洲精品国产欧美| 久久久久久国产精品三级玉女聊斋| 国产+人+亚洲| 亚洲精品电影网| 国产精品专区第二| 91夜夜揉人人捏人人添红杏| 国产欧美一区二区三区四区| 青青久久av北条麻妃黑人| 成人免费网视频| 91在线中文字幕| 成人免费看黄网站| 欧美一区二区三区四区在线| 亚洲天堂色网站| 亚洲欧美一区二区精品久久久| 日韩av免费一区| 丁香五六月婷婷久久激情| 日韩女优人人人人射在线视频| 热久久这里只有精品| 久久亚洲电影天堂| 欧美大全免费观看电视剧大泉洋| 亚洲黄色av女优在线观看| 一区二区欧美激情| 亚洲综合在线播放| 日韩精品免费观看| 欧美猛男性生活免费| www.亚洲免费视频| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲欧洲一区二区三区久久| 亚洲国产欧美久久| 国产一区二区久久精品| 久久精品青青大伊人av| 亚洲精品suv精品一区二区| 国模精品视频一区二区三区| 国产精品视频一区二区高潮| 性欧美长视频免费观看不卡| 久久影视电视剧凤归四时歌| 成人av在线网址| 亚洲第一精品久久忘忧草社区| 亚洲欧美在线免费| 91高清免费在线观看| 日韩精品免费在线视频| 日本免费久久高清视频| 日韩美女免费线视频| 亚洲人在线观看| 国产一区二区精品丝袜| 欧美激情a在线| 91中文字幕一区| 欧美日韩国产精品一区二区不卡中文| 亚洲美女av黄| 国产日本欧美一区二区三区| 亚洲九九九在线观看| 成人黄色免费看|