新聞中心
如果嵌套類(lèi)型和其外部類(lèi)型之間的關(guān)系需要成員可訪(fǎng)問(wèn)性語(yǔ)義,需要使用C++嵌套類(lèi),嵌套類(lèi)型不應(yīng)針對(duì)其聲明類(lèi)型以外的類(lèi)型執(zhí)行任務(wù),而C++局部類(lèi)允許類(lèi)、結(jié)構(gòu)和接口被分成多個(gè)小塊兒并存儲(chǔ)在不同的源文件中,這樣的實(shí)現(xiàn)很容易開(kāi)發(fā)和維護(hù)。

C++局部類(lèi):
在一個(gè)函數(shù)體內(nèi)定義的類(lèi)稱(chēng)為局部類(lèi)。局部類(lèi)中只能使用它的外圍作用域中的對(duì)象和函數(shù)進(jìn)行聯(lián)系,因?yàn)橥鈬饔糜蛑械淖兞颗c該局部類(lèi)的對(duì)象無(wú)關(guān)。局部類(lèi)不能被外部所繼承。在定義局部類(lèi)時(shí)需要注意:局部類(lèi)中不能說(shuō)明靜態(tài)成員函數(shù),并且所有成員函數(shù)都必須定義在類(lèi)體內(nèi)。在實(shí)踐中,局部類(lèi)是很少使用的。下面是一個(gè)局部類(lèi)的例子。
- int a;
- void fun()
- {
- static int s;
- class A
- {
- public:
- void init(int i) { s = i; }
- };
- A m;
- m.init(10);
- }
- 局部類(lèi)的另一個(gè)用途是用來(lái)實(shí)現(xiàn)類(lèi)型轉(zhuǎn)化,如下代碼:
- class Interface
- {
- public:
- virtual void Fun() = 0;
- };
- template
T, class P> - Interface* MakeAdapter(const T& obj, const P& arg)
- {
- int x;
- class Local : public Interface
- {
- public:
- Local(const T& obj, const P& arg)
- : obj_(obj), arg_(arg) {}
- virtual void Fun()
- {
- x = 100;
- obj_.Call(arg_);
- }
- private:
- T obj_;
- P arg_;
- };
- return new Local(obj, arg);
- }
C++嵌套類(lèi):
在一個(gè)類(lèi)中定義的類(lèi)稱(chēng)為C++嵌套類(lèi),定義嵌套類(lèi)的類(lèi)稱(chēng)為外圍類(lèi)。定義嵌套類(lèi)的目的在于隱藏類(lèi)名,減少全局的標(biāo)識(shí)符,從而限制用戶(hù)能否使用該類(lèi)建立對(duì)象。這樣可以提高類(lèi)的抽象能力,并且強(qiáng)調(diào)了兩個(gè)類(lèi)(外圍類(lèi)和嵌套類(lèi))之間的主從關(guān)系。下面是一個(gè)嵌套類(lèi)的例子:
- class A
- {
- public:
- class B
- {
- public:
- …
- private:
- …
- };
- void f();
- private:
- int a;
- }
對(duì)嵌套類(lèi)的若干說(shuō)明:
1、從作用域的角度看,嵌套類(lèi)被隱藏在外圍類(lèi)之中,該類(lèi)名只能在外圍類(lèi)中使用。如果在外圍類(lèi)的作用域內(nèi)使用該類(lèi)名時(shí),需要加名字限定。
2、從訪(fǎng)問(wèn)權(quán)限的角度來(lái)看,嵌套類(lèi)名與它的外圍類(lèi)的對(duì)象成員名具有相同的訪(fǎng)問(wèn)權(quán)限規(guī)則。不能訪(fǎng)問(wèn)嵌套類(lèi)的對(duì)象中的私有成員函數(shù),也不能對(duì)外圍類(lèi)的私有部分中的嵌套類(lèi)建立對(duì)象。
3、C++嵌套類(lèi)中的成員函數(shù)可以在它的類(lèi)體外定義。
4、嵌套類(lèi)中說(shuō)明的成員不是外圍類(lèi)中對(duì)象的成員,反之亦然。嵌套類(lèi)的成員函數(shù)對(duì)外圍類(lèi)的成員沒(méi)有訪(fǎng)問(wèn)權(quán),反之亦然。國(guó)此,在分析嵌套類(lèi)與外圍類(lèi)的成員訪(fǎng)問(wèn)關(guān)系時(shí),往往把嵌套類(lèi)看作非嵌套類(lèi)來(lái)處理。這樣,上述的嵌套類(lèi)可寫(xiě)成如下格式:
- class A
- {
- public:
- void f();
- private:
- int a;
- };
- class B
- {
- public:
- …
- private:
- …
- };
由引可見(jiàn),嵌套類(lèi)僅僅是語(yǔ)法上的嵌入。
5、在C++嵌套類(lèi)中說(shuō)明的友元對(duì)外圍類(lèi)的成員沒(méi)有訪(fǎng)問(wèn)權(quán)。
6、如果嵌套類(lèi)比較復(fù)雜,可以只在外圍類(lèi)中對(duì)嵌套類(lèi)進(jìn)行說(shuō)明,關(guān)于嵌套的詳細(xì)的內(nèi)容可在外圍類(lèi)體外的文件域中進(jìn)行定義。
網(wǎng)站題目:介紹C++局部類(lèi)和C++嵌套類(lèi)之間的區(qū)別
本文網(wǎng)址:http://www.5511xx.com/article/cojjscg.html


咨詢(xún)
建站咨詢(xún)
