一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

C/C++拾遺(十四):類

 千江水知 2014-04-02
      C++設(shè)計(jì)的核心在于引入了類的概念,為程序猿們提供了自定義數(shù)據(jù)類型的空間,借助類的實(shí)現(xiàn),奠定了面向?qū)ο缶幊痰幕?,使得程序的編寫、擴(kuò)展、維護(hù)都更加方便。今天就來簡(jiǎn)單總結(jié)下這部分內(nèi)容,時(shí)間緊忙里偷閑看的,揀自己感覺重要的來寫吧。

一、類的定義和聲明
     類背后蘊(yùn)含的基本思想是數(shù)據(jù)的抽象與封裝。數(shù)據(jù)抽象,將接口/方法的使用和實(shí)現(xiàn)分離開來,使得設(shè)計(jì)者和使用者各司其職,設(shè)計(jì)者專注于類的設(shè)計(jì)與實(shí)現(xiàn),使用者則只需要關(guān)心如何使用類提供的接口。數(shù)據(jù)封裝,將數(shù)據(jù)成員利用private標(biāo)號(hào)保護(hù)起來,外部的函數(shù)方法不可見,有效地保護(hù)了類自身的數(shù)據(jù)。數(shù)據(jù)抽象和封裝密切不可分,某種意義上,正是由了數(shù)據(jù)的抽象提供的公共接口才使得數(shù)據(jù)可以被封裝在類內(nèi)。二者結(jié)合的好處就是:數(shù)據(jù)成員封裝有效避免了無意的、可能破壞對(duì)象狀態(tài)的用戶級(jí)錯(cuò)誤(用戶無法直接接觸類的核心數(shù)據(jù));程序的修改、擴(kuò)展以及維護(hù)都只需要關(guān)注類的內(nèi)部,極大地減少了后期需要的成本。
     這部分另一個(gè)比較重要的是類定義與類聲明的區(qū)別。如果從編譯器的角度來看,類聲明是告訴這個(gè)類型不是“黑戶”,類定義則是正式為合法戶口安排“住”的空間。因此,經(jīng)過聲明的類只是不完全體,只有定義之后才真正可用。定義對(duì)象時(shí)必須在進(jìn)行了類的定義之后(說明了類的數(shù)據(jù)成員和成員函數(shù))。一般來說,只有在類定義之后,數(shù)據(jù)成員才能被聲明為該類型,因此,類中是不能含有自身類型的數(shù)據(jù)成員的;但是對(duì)于引用和指針而言,她們只需要聲明就可以了,而類名已出現(xiàn)恰恰就可以認(rèn)為是類的聲明了:
class  A
{
     ... ...
}
class B
{
     A  class-obj-A;                                           //A類型的數(shù)據(jù)成員
     A  *next;                                                    //引用和指針
     A  &class-obj-B;
}


二、類作用域
     C++中的變量可能出現(xiàn)在成員函數(shù)中、類中以及全局中,因此當(dāng)遇到一個(gè)變量進(jìn)行名稱解析時(shí),C++遵循以下規(guī)則:
1. 檢查成員函數(shù)局部作用域中的聲明
2. 如果在成員函數(shù)中找不到,則檢查對(duì)所有類成員的聲明
3. 如果在類中仍舊找不到該名字的聲明,則檢查在此成員函數(shù)定義之前的作用域中出現(xiàn)的聲明
比如下面的例子:

點(diǎn)擊(此處)折疊或打開

  1. #include <iostream>
  2. #include <cstdlib>

  3. using namespace std;

  4. string str = "Global";

  5. class Scope
  6. {
  7.     public:
  8.       Scope():str("ClassMem"){};
  9.       void print(string str)
  10.       {
  11.       cout << "str in the function is "<<str<<endl;
  12.       }
  13.       void cout_str()
  14.       {
  15.            cout << "str in the Class-Private is "<<str<<endl;
  16.        }
  17.     private:
  18.       string str;
  19.       };
  20.       
  21. int main()
  22. {
  23.     cout << "This is a test for Class Scope..."<<endl;
  24.     Scope scp;
  25.     scp.print("I'm in the function");
  26.     scp.cout_str();
  27.     
  28.     system("pause");
  29.     return 0;
  30.     
  31.     
  32. }
運(yùn)行后結(jié)果如下:可以看到成員函數(shù)中的變量會(huì)屏蔽掉類中的變量成員



三、構(gòu)造函數(shù)
     其實(shí)對(duì)于構(gòu)造函數(shù)有很多值得注意的,比如構(gòu)造函數(shù)的原型(不能有返回值,名稱與類名一致),比如構(gòu)造函數(shù)利用形參列表進(jìn)行重載,利用初始化列表進(jìn)行類成員的初始化等等。這些都是最基本也是最重要的東西,今天來說說別的。自己看C++ Primer就是一本入門書,但是講的非常詳細(xì)。這部分需要特別留意默認(rèn)構(gòu)造函數(shù)。
     我們知道,當(dāng)我們沒有定義構(gòu)造函數(shù)的時(shí)候,C++會(huì)使用默認(rèn)構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù)會(huì)為數(shù)據(jù)成員賦予初始值,對(duì)于類類型來說,直接調(diào)用其默認(rèn)構(gòu)造函數(shù);內(nèi)置和復(fù)合類型的成員,比如指針和數(shù)組,只對(duì)定義再全局作用域中的對(duì)象才初始化,當(dāng)對(duì)象定義在局部作用域時(shí),內(nèi)置或復(fù)合類型的成員不會(huì)進(jìn)行初始化。所以這就提醒我們:在構(gòu)造函數(shù)中利用初始化列表初始化內(nèi)置或復(fù)合類型的數(shù)據(jù)成員。


四、友元
     我們經(jīng)常需要訪問一個(gè)全局的變量,比如某個(gè)計(jì)數(shù)器,或者某個(gè)特定的數(shù)值等,如果使用全局變量,就會(huì)破壞對(duì)用戶級(jí)錯(cuò)誤的保護(hù)。但是我們可以使用友元類型聲明需要全局訪問的函數(shù)和類。友元可以修飾在類上,則友元類的函數(shù)可以方位自身的private成員;也可以修飾在其他類的某個(gè)成員函數(shù),則有同樣的效果。這里需要注意是,當(dāng)生命友元類時(shí),應(yīng)當(dāng)首先聲明該類,然后才能將該類聲明為新一個(gè)類友元類。


五、static成員
     static成員很重要,最需要注意的是static成員屬于類而更不屬于類的對(duì)象。因此當(dāng)然不能對(duì)其使用this指針,也不能聲明為const函數(shù)(沒有對(duì)應(yīng)的操作對(duì)象)。另外一個(gè)需要注意的是,static變量只能在類定義體內(nèi)聲明,在類定義體外定義,并且在體外定義時(shí)不能再重復(fù)聲明static屬性(當(dāng)然也有const static的例外)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日本加勒比在线观看一区| 亚洲国产成人精品福利| 日韩精品在线观看完整版| 熟女少妇久久一区二区三区| 国产又粗又猛又大爽又黄同志| 国产成人午夜在线视频| 国产又大又黄又粗又免费| 国产精品伦一区二区三区在线 | 午夜精品福利视频观看| 日本二区三区在线播放| 亚洲熟女少妇精品一区二区三区| 亚洲国产精品av在线观看| 一级片二级片欧美日韩| 国产美女网红精品演绎| 日本深夜福利在线播放| 亚洲精品福利视频你懂的| 国产99久久精品果冻传媒| 欧美野外在线刺激在线观看 | 日本精品理论在线观看| 亚洲一区二区三区国产| 午夜精品一区免费视频| 日本 一区二区 在线| 精品国产av一区二区三区不卡蜜| 又黄又爽禁片视频在线观看| 国产高清视频一区不卡| 欧美成人一区二区三区在线| 亚洲国产精品一区二区| 91免费精品国自产拍偷拍| 国产精品丝袜一二三区| 亚洲精品国产精品日韩| 国产成人精品国产成人亚洲| 成年人黄片大全在线观看| 丝袜人妻夜夜爽一区二区三区| 久久亚洲午夜精品毛片| 亚洲综合色在线视频香蕉视频| 国产午夜精品久久福利| 高清亚洲精品中文字幕乱码| 亚洲最新一区二区三区| 国产在线一区二区三区不卡| 国产成人亚洲综合色就色| 精品人妻av区波多野结依|