如果巢狀型別和其外部型別之間的關係需要成員可訪問性語義,需要使用c++巢狀類,巢狀型別不應針對其宣告型別以外的型別執行任務,而c++區域性類允許類、結構和介面被分成多個小塊兒並儲存在不同的原始檔中,這樣的實現很容易開發和維護。
c++區域性類:
在乙個函式體內定義的類稱為區域性類。區域性類中只能使用它的外圍作用域中的物件和函式進行聯絡,因為外圍作用域中的變數與該局部類的物件無關(#add,這半句是什麼屁話?)。區域性類不能被外部所繼承。在定義區域性類時需要注意:區域性類中不能說明靜態成員函式,並且所有成員函式都必須定義在類體內(#add,因為除此之外沒有別的地方可以寫定義體)。在實踐中,區域性類是很少使用的。下面是乙個區域性類的例子。
inta;
voidfun()
};
am;
m.init(10);
}
區域性類的另乙個用途是用來實現型別轉化,如下**:
classinte***ce
;
templatet,classp
>
inte***ce*makeadapter(constt&obj,constp&arg)
virtualvoidfun()
private:
tobj_;
parg_;
};
returnnewlocal(obj,arg);
}
c++巢狀類:
在乙個類中定義的類稱為c++巢狀類,定義巢狀類的類稱為外圍類。定義巢狀類的目的在於隱藏類名,減少全域性的識別符號,從而限制使用者能否使用該類建立物件。這樣可以提高類的抽象能力,並且強調了兩個類(外圍類和巢狀類)之間的主從關係。下面是乙個巢狀類的例子:
classa
; voidf();
private:
inta; };
對巢狀類的若干說明:
1、從作用域的角度看,巢狀類被隱藏在外圍類之中,該類名只能在外圍類中使用。如果在外圍類的作用域內使用該類名時(#add 也就是外圍類的外部),需要加名字限定。
2、從訪問許可權的角度來看,巢狀類名與它的外圍類的物件成員名具有相同的訪問許可權規則。不能訪問巢狀類的物件中的私有成員函式,也不能對外圍類的私有部分中的巢狀類建立物件。
3、c++巢狀類中的成員函式可以在它的類體外定義。
4、巢狀類中說明的成員不是外圍類中物件的成員,反之亦然。巢狀類的成員函式對外圍類的成員沒有訪問權,反之亦然。國此,在分析巢狀類與外圍類的成員訪問關係時,往往把巢狀類看作非巢狀類來處理。這樣,上述的巢狀類可寫成如下格式:
classa
;
classb ;
#add 巢狀類可以訪問外圍類的static資料,即使為private
由引可見,巢狀類僅僅是語法上的嵌入。
5、在c++巢狀類中說明的友元對外圍類的成員沒有訪問權。
6、如果巢狀模擬較複雜,可以只在外圍類中對巢狀類進行說明,關於巢狀的詳細的內容可在外圍類體外的檔案域中進行定義。
區域性類和巢狀類
區域性類在乙個函式體內定義的類稱為區域性類。區域性類中只能使用它的外圍作用域中的物件和函式進行聯絡,因為外圍作用域中的變數與該局部類的物件無關。在定義區域性類時需要注意 區域性類中不能說明靜態成員函式,並且所有成員函式都必須定義在類體內。在實踐中,區域性類是很少使用的。下面是乙個區域性類的例子。in...
區域性類和巢狀類
區域性類和巢狀類 區域性類在乙個函式體內定義的類稱為區域性類。區域性類中只能使用它的外圍作用域中的物件和函式進行聯絡,因為外圍作用域中的變數與該局部類的物件無關。在定義區域性類時需要注意 區域性類中不能說明靜態成員函式,並且所有成員函式都必須定義在類體內。在實踐中,區域性類是很少使用的。下面是乙個區...
區域性類和巢狀類
區域性類 在乙個函式體內定義的類稱為區域性類。區域性類中只能使用它的外圍作用域中的物件和函式進行聯絡,因為外圍作用域中的變數與該局部類的物件無關。在定義區域性類時需要注意 區域性類中不能說明靜態成員函式,並且所有成員函式都必須定義在類體內。在實踐中,區域性類是很少使用的。下面是乙個區域性類的例子。i...