C++局部類和嵌套類


局部類

在一個函數體內定義的類稱爲局部類。局部類中只能使用它的外圍作用域中的對象和函數進行聯繫,因爲外圍作用域中的變量與該局部類的對象無關。
在定義局部類時需要注意:局部類中不能說明靜態成員函數,並且所有成員函數都必須定義在類體內。在實踐中,局部類是很少使用的。下面是一個局部類的例子。
int a;
void fun()
{
static int s;
class A
{
public:
   void init(int i) { s = i; }
};
A m;
m.init(10);
}


嵌套類

在一個類中定義的類稱爲嵌套類,定義嵌套類的類稱爲外圍類。
定義嵌套類的目的在於隱藏類名,減少全局的標識符,從而限制用戶能否使用該類建立對象。這樣可以提高類的抽象能力,並且強調了兩個類(外圍類和嵌套類)之間的主從關係。下面是一個嵌套類的例子:
class A
{
public:
class B
{
public:
   void fb();
private:
   void vb();
};
void fa();
private:
int va;
};
其中,類B是一個嵌套類,類A是外圍類,類B定義在類A的類體內。

對嵌套類的若干說明:
1、從作用域的角度看,嵌套類被隱藏在外圍類之中,該類名只能在外圍類中使用。如果在外圍類的作用域內使用該類名時,需要加名字限定。
2、從訪問權限的角度來看,嵌套類名與它的外圍類的對象成員名具有相同的訪問權限規則。不能訪問嵌套類的對象中的私有成員函數,也不能對外圍類的私有部分中的嵌套類建立對象。
3、嵌套類中的成員函數可以在它的類體外定義。
4、嵌套類中說明的成員不是外圍類中對象的成員,反之亦然。嵌套類的成員函數對外圍類的成員沒有訪問權,反之亦然。國此,在分析嵌套類與外圍類的成員訪問關係時,往往把嵌套類看作非嵌套類來處理。這樣,上述的嵌套類可寫成如下格式:
class A
{
public:
void fa();
private:
int va;
};
class B
{
public:
void fb();
private:
int vb;
};
由引可見,嵌套類僅僅是語法上的嵌入。
5、在嵌套類中說明的友元對外圍類的成員沒有訪問權。
6、如果嵌套類比較複雜,可以只在外圍類中對嵌套類進行說明,關於嵌套的詳細的內容可在外圍類體外的文件域中進行定義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章