欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年01月22日 16:27:56   投稿:goldensun  
這篇文章主要介紹了C++編程中的嵌套類的聲明與其中的函數(shù)使用,嵌套類即在一個類的范圍內(nèi)聲明和編寫另一個類,需要的朋友可以參考下

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

// nested_class_declarations.cpp
class 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 類型的任何對象。
嵌套類只能從封閉類中直接使用名稱、類型名稱,靜態(tài)成員的名稱和枚舉數(shù)。若要使用其他類成員的名稱,您必須使用指針、引用或?qū)ο竺?br /> 在前面的 BufferedIO 示例中,枚舉 IOError 可由嵌套類中的成員函數(shù)、BufferedIO::BufferedInput 或 BufferedIO::BufferedOutput 直接訪問,如函數(shù) good 中所示。
注意
嵌套類僅在類范圍內(nèi)聲明類型。它們不會導(dǎo)致創(chuàng)建嵌套類的包含對象。前面的示例聲明兩個嵌套類,但未聲明這些類類型的任何對象。
在將類型名稱與前向聲明一起聲明時,會引發(fā)嵌套類聲明的范圍可見性的異常。在這種情況下,由前向聲明聲明的類名在封閉類的外部可見,其范圍定義為最小的封閉非類范圍。例如:

// nested_class_declarations_2.cpp
class 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;
}

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

// member_functions_in_nested_classes.cpp
class 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 語法用于聲明函數(shù)名稱。聲明:

BufferedIO::BufferedInput::read()

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

typedef BufferedIO::BufferedInput BIO_INPUT;

int BIO_INPUT::read()

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

// 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()
{
}

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

int GetExtendedErrorStatus( char *message )

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

相關(guān)文章

  • C/C++獲取Windows平臺CPU占用率的方法

    C/C++獲取Windows平臺CPU占用率的方法

    最近在做系統(tǒng)信息相關(guān)的接口,為了實現(xiàn)跨平臺,故在linux和Windows平臺獲取占用率信息,文章主要介紹Windows下的方法,文中給出了參考代碼,需要的朋友可以參考下
    2023-12-12
  • C/C++獲取鍵盤事件的方法

    C/C++獲取鍵盤事件的方法

    今天小編就為大家分享一篇C/C++獲取鍵盤事件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C++中類的轉(zhuǎn)換函數(shù)你了解嗎

    C++中類的轉(zhuǎn)換函數(shù)你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++中類的轉(zhuǎn)換函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++動態(tài)內(nèi)存管理詳解

    C++動態(tài)內(nèi)存管理詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++動態(tài)分配內(nèi)存的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • C語言中程序如何調(diào)用Python腳本

    C語言中程序如何調(diào)用Python腳本

    由于python有很多功能強(qiáng)大的開源庫,有時候在寫C語言程序的時候又想利用一下python強(qiáng)大的模塊,那么C語言中程序如何調(diào)用Python腳本,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言程序環(huán)境編譯+鏈接理論

    C語言程序環(huán)境編譯+鏈接理論

    這篇文章主要介紹了C語言程序環(huán)境編譯+鏈接理論,下面文章基于C語言的相關(guān)資料展開對編譯和鏈接的詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • C語言中的強(qiáng)符號和弱符號介紹

    C語言中的強(qiáng)符號和弱符號介紹

    這篇文章主要介紹了C語言中的強(qiáng)符號和弱符號介紹,本文用多個實例來講解強(qiáng)符號和弱符號,需要的朋友可以參考下
    2015-03-03
  • C語言實現(xiàn)大頂堆的示例代碼

    C語言實現(xiàn)大頂堆的示例代碼

    最大堆,又稱大根堆(大頂堆)是指根結(jié)點(亦稱為堆頂)的關(guān)鍵字是堆里所有結(jié)點關(guān)鍵字中最大者,屬于二叉堆的兩種形式之一。本文將用C語言實現(xiàn)大頂堆,感興趣的可以了解一下
    2022-07-07
  • C++設(shè)計模式之享元模式

    C++設(shè)計模式之享元模式

    這篇文章主要介紹了C++設(shè)計模式之享元模式,本文講解了什么是享元模式、享元模式代碼實例、享元模式的優(yōu)點等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語言詳細(xì)分析講解關(guān)鍵字const與volatile的用法

    C語言詳細(xì)分析講解關(guān)鍵字const與volatile的用法

    在C語言中,我們經(jīng)常會見到const和volatile這兩個關(guān)鍵字,那么我們今天就來介紹下這兩個關(guān)鍵字,提起?const?關(guān)鍵字,我們可能首先想到的是經(jīng)過它修飾的變量便是常量了。其實我們這種想法是錯誤的,其實?const?修飾的變量是只讀的,其本質(zhì)還是變量
    2022-04-04

最新評論