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

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

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

2020-01-26 14:44:49
字體:
來源:轉載
供稿:網友

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

// 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
欧美日本高清一区| 日韩欧美中文免费| 中国人与牲禽动交精品| 中文字幕日本精品| 亚洲伊人一本大道中文字幕| 国产精品对白刺激| 3344国产精品免费看| 国产精品一区二区女厕厕| 91九色在线视频| 国产精品久久久久久久久久免费| 欧美另类99xxxxx| 国产精品久久久久久久久久三级| 久久精品99国产精品酒店日本| 日本国产一区二区三区| 亚洲精品久久久久中文字幕二区| 欧美亚洲伦理www| 国产狼人综合免费视频| 久久成人18免费网站| 黑人极品videos精品欧美裸| 亚洲影院高清在线| 97视频在线观看免费高清完整版在线观看| 黑人巨大精品欧美一区二区一视频| 亚洲精品理论电影| 日韩在线欧美在线| 国产亚洲精品91在线| 国产精品流白浆视频| 国产成人免费av| 全色精品综合影院| 日韩在线播放av| 日本成人激情视频| 亲爱的老师9免费观看全集电视剧| 成人激情电影一区二区| 欧美一区三区三区高中清蜜桃| 国产精品入口夜色视频大尺度| 97欧美精品一区二区三区| 欧美性理论片在线观看片免费| 色小说视频一区| 欧美日韩亚洲系列| 国产亚洲美女精品久久久| 精品中文字幕在线观看| 日韩在线观看av| 成人欧美一区二区三区黑人孕妇| 欧美极品美女电影一区| 亚洲成av人片在线观看香蕉| 欧美激情高清视频| 亚洲日韩中文字幕在线播放| 狠狠躁夜夜躁人人爽超碰91| 国产精品视频免费在线| 国产精品成人免费电影| 狠狠干狠狠久久| 日本免费在线精品| 欧美电影在线观看高清| 日韩在线观看免费全集电视剧网站| 日韩福利伦理影院免费| 精品偷拍一区二区三区在线看| 黄网站色欧美视频| 亚洲欧美一区二区精品久久久| 国产精品劲爆视频| 久久久久北条麻妃免费看| 亚洲最大成人网色| 国内精品小视频在线观看| 深夜精品寂寞黄网站在线观看| 欧美一级淫片aaaaaaa视频| 日韩免费在线观看视频| 亚洲综合最新在线| 日韩不卡在线观看| 国产在线观看不卡| 一区二区av在线| 欧美国产中文字幕| 91国产精品视频在线| 欧美精品亚州精品| 国模精品视频一区二区| 亚洲深夜福利网站| 日韩精品在线视频美女| 欧美xxxx综合视频| 日韩风俗一区 二区| 中文字幕一精品亚洲无线一区| 亚洲男人的天堂在线| 精品日韩美女的视频高清| 欧美裸体xxxx极品少妇软件| 久久久久久国产精品| 精品国产一区二区三区在线观看| 欧美俄罗斯性视频| 久久精品亚洲国产| 久久影视电视剧凤归四时歌| 欧美成aaa人片免费看| www国产精品com| 久久久久久国产免费| 日韩精品免费一线在线观看| 亚洲色图在线观看| 国模吧一区二区| 欧美视频免费在线| 欧美性精品220| 国产精品一区二区三区毛片淫片| 午夜精品免费视频| 国产精品91视频| 日韩视频免费中文字幕| 欧美日韩亚洲网| 2019中文字幕在线| 欧美人在线视频| 91精品在线播放| 麻豆精品精华液| 狠狠色狠狠色综合日日小说| 亚洲精品日韩在线| 国产精品私拍pans大尺度在线| 亚洲国产精久久久久久久| 欧美视频在线观看免费网址| 亚洲欧美国产精品va在线观看| 欧美成人国产va精品日本一级| 欧美中在线观看| 在线视频欧美日韩精品| 国产一区二区三区毛片| 欧美成人一二三| 成人在线激情视频| 欧日韩在线观看| 亚洲国产又黄又爽女人高潮的| 日韩av最新在线观看| 日韩在线播放视频| 亚洲最新av网址| 亚洲自拍欧美色图| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲天堂免费在线| 日韩在线观看av| 青青草原成人在线视频| 欧美精品在线看| 久久久久久成人| 亚洲免费视频在线观看| 亚洲最大av网| 亚洲精品久久久久| 日韩欧美国产一区二区| 亚洲xxx大片| 亚洲欧美日韩视频一区| 日本三级久久久| 欧美高清第一页| 九九久久久久久久久激情| 国产一区二区三区欧美| 久久免费视频这里只有精品| 亚洲午夜精品视频| 高清欧美性猛交| 欧美日韩在线一区| 国产情人节一区| 亚洲精品xxx| 日韩成人高清在线| 久久精品国产清自在天天线| 欧美性理论片在线观看片免费| 精品国产欧美成人夜夜嗨| 欧美精品激情在线观看| 国产精品亚发布| 成人在线一区二区| 国产视频精品xxxx| 成人激情av在线| 91性高湖久久久久久久久_久久99| 国产欧美精品xxxx另类| 欧洲中文字幕国产精品| www.日本久久久久com.| 日韩中文字幕国产精品| 日韩av资源在线播放| 久久男人的天堂| 国产精品成人免费电影| www.欧美精品一二三区| 国产亚洲人成网站在线观看| 久久偷看各类女兵18女厕嘘嘘| 欧美专区在线播放| 亚洲福利视频网|