欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來(lái)到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

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

來(lái)源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

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

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

// 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;
}

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

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

BufferedIO::BufferedInput::read()

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

typedef BufferedIO::BufferedInput BIO_INPUT;

int BIO_INPUT::read()

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

// 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ù)制到類成員中。請(qǐng)注意,GetExtendedErrorStatus 的更佳實(shí)現(xiàn)是將其聲明為:

int GetExtendedErrorStatus( char *message )

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

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有