真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

嵌套類和局部類

嵌套類和局部類在工作中極少使用,且均可在設(shè)計(jì)上替代,這里僅做簡要介紹。
1)局部類
局部類就是將類定義在函數(shù)中。形如:
int val = 100;
void foo(int val)
{

10余年的西豐網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整西豐建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“西豐網(wǎng)站設(shè)計(jì)”,“西豐網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

struct Bar
{

};

class Bar::InsideClass//定義InsideClass類
{

};

}
2)嵌套類
嵌套類就是將一個(gè)類定義在另一個(gè)類中。形如:
class Interface
{
public:
? ?virtual void Fun() = 0; ?
};
?
template
Interface* Person(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()
? ? ? {
? ? ? ? ?
? ? ? }
? ?private:
? ? ? T a;
? ? ? P b;
? ?};
? ?return new Local(obj, arg);
}

嵌套類必須聲明在類的內(nèi)部,但是可以定義在類的內(nèi)部或者外部。在外層類之外定義一個(gè)嵌套類時(shí),必須以外層類的名字限定嵌套類的名字。
?嵌套類的名字只在外圍類可見。
?類的私有成員只有類的成員和友元可以訪問,因此外圍類不可以訪問嵌套類的私有成員。嵌套類可以訪問外圍類的成員(通過對象、指針或者引用)。
一個(gè)好的嵌套類設(shè)計(jì):嵌套類應(yīng)該設(shè)成私有。嵌套類的成員和方法可以設(shè)為?public?。
嵌套類可以直接訪問外圍類的靜態(tài)成員、類型名(?typedef?)、枚舉值。
?

?

(內(nèi)部類與外部類)
1.1?作用域
嵌套類的聲明位置決定了嵌套類的作用域,即它決定了程序的那部分可以創(chuàng)建嵌套類的對象。

如果嵌套類聲明在一個(gè)類的私有部分,則只有嵌套類的外部類可以知道它。上面的類就是這種情況。

如果嵌套類聲明在一個(gè)類的保護(hù)部分,對于后者是可見的,對于外界是不可見的。派生類知道該嵌套類,并且可以直接創(chuàng)建這種類型的對象。

如果嵌套類聲明在一個(gè)類的公有部分,則允許后者,后者的派生類以及外部世界使用。然后在外部使用時(shí),必須加上外部類的外部類作用域限制符,如:?使用NestedClass 時(shí),應(yīng)該這樣定義 OutClass::NestedClass nestedInstance.

嵌套結(jié)構(gòu)和枚舉的作用域于此相同。許多程序員使用公有的枚舉提供客戶使用的類常量。

下面表格總結(jié)了,嵌套類、結(jié)構(gòu)、枚舉的作用域特征。

1.2 訪問權(quán)限
? ? 在外部類中聲明嵌套類并沒有賦予外部類任何對嵌套類的訪問權(quán)限,也沒有賦予任何嵌套類對于外部類的訪問權(quán)限。與一般類的訪問控制相同(私有,公有,保護(hù))。

?
局部類
類可以定義在某個(gè)函數(shù)的內(nèi)部,這樣的類被稱為局部類,局部類定義的類型只在定義它的作用域內(nèi)可見。
局部類不能使用函數(shù)作用域中的變量。
局部類已經(jīng)封裝在函數(shù)作用域中,通過信息隱藏進(jìn)一步封裝就顯得沒什么必要了。
可以在局部類的內(nèi)部再嵌套一個(gè)類,此時(shí),嵌套類的定義可以出現(xiàn)在局部類之外且與局部類相同的作用域中。

(c++不能在函數(shù)中定義函數(shù)。c++在類中定義的函數(shù)也就是成員函數(shù)。)這個(gè)類以及由它創(chuàng)建的對象,都局限在該函數(shù)作用域中;必須在類內(nèi)實(shí)現(xiàn)所有的成員函數(shù),不能拿到類外。因?yàn)楹瘮?shù)是不可以嵌套定義的;若類內(nèi)含有靜態(tài)數(shù)據(jù)成員,必須在該函數(shù)外初始化;類內(nèi)不可含有靜態(tài)函數(shù)成員;類中不可使用包裹它的函數(shù)所定義的除靜態(tài)外的局部變量。

c++內(nèi)部類與java內(nèi)部類的區(qū)別就是:
c++的內(nèi)部類對象沒有外部類對象的指針,不能訪問外部類對象的非靜態(tài)成員;java的非靜態(tài)內(nèi)部類對象有外部類對象的指針,能訪問外部類對象的非靜態(tài)成員。

1 局部類Demo 示例
int a;
void fun()
{
static int s;
class A
{
  public:
  void init(int i) { s = i; }
};
A m;
m.init(10);
}

2 ?局部類的另一個(gè)用途是用來實(shí)現(xiàn)類型轉(zhuǎn)化
class Interface
{
public:
? ?virtual void Fun() = 0; ?
};
?
template
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);
}

.內(nèi)嵌類
是在類體內(nèi)定義的又一個(gè)類。外面的類叫外圍類。這個(gè)類以及由它創(chuàng)建的對象,都局限在外層類作用域中;

外界能否使用內(nèi)層類,全在于訪問權(quán)限;若能使用,定要以外圍類::內(nèi)層類格式來用;

是類組合演化的又一種類間關(guān)系,即組合或聚集成員不是產(chǎn)生于其它類,而是產(chǎn)生于內(nèi)層類;內(nèi)層類的成員函數(shù),可以在類內(nèi)實(shí)現(xiàn),也可以在外層類之外實(shí)現(xiàn);

內(nèi)層類的成員函數(shù)對外圍類的成員沒有訪問權(quán),反之亦然

定義嵌套類的目的在于隱藏類名,減少全局的標(biāo)識符,從而限制用戶能否使用該類建立對象。這樣可以提高類的抽象能力,并且強(qiáng)調(diào)了兩個(gè)類(外圍類和嵌套類)之間的主從關(guān)系。

1 下面是一個(gè)嵌套類的例子
class A
{
?public:
  class B
  {
  public:
    …
  private:
    …
  };
  void f();
  private:
  int a;
}
其中,類B是一個(gè)嵌套類,類A是外圍類,類B定義在類A的類體內(nèi)。

2 ?對嵌套類的若干說明:

1、從作用域的角度看,嵌套類被隱藏在外圍類之中,該類名只能在外圍類中使用。如果在外圍類的作用域內(nèi)使用該類名時(shí),需要加名字限定。
2、從訪問權(quán)限的角度來看,嵌套類名與它的外圍類的對象成員名具有相同的訪問權(quán)限規(guī)則。不能訪問嵌套類的對象中的私有成員函數(shù),也不能對外圍類的私有部分中的嵌套類建立對象。
3、嵌套類中的成員函數(shù)可以在它的類體外定義。
4、嵌套類中說明的成員不是外圍類中對象的成員,反之亦然。嵌套類的成員函數(shù)對外圍類的成員沒有訪問權(quán),反之亦然。國此,在分析嵌套類與外圍類的成員訪問關(guān)系時(shí),往往把嵌套類看作非嵌套類來處理。

上述的嵌套類可寫成如下格式:

class A
{
public:
  void f();
private:
  int a;
};
?
  class B
{
  public:
  …
private:
  …
};
由引可見,嵌套類僅僅是語法上的嵌入。

5、在嵌套類中說明的友元對外圍類的成員沒有訪問權(quán)。
6、如果嵌套類比較復(fù)雜,可以只在外圍類中對嵌套類進(jìn)行說明,關(guān)于嵌套的詳細(xì)的內(nèi)容可在外圍類體外的文件域中進(jìn)行定義。


網(wǎng)站欄目:嵌套類和局部類
文章出自:http://weahome.cn/article/gcpdsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部