首頁(yè) - 網(wǎng)校 - 萬(wàn)題庫(kù) - 美好明天 - 直播 - 導(dǎo)航

2017年全國(guó)計(jì)算機(jī)二級(jí)C++考試復(fù)習(xí)知識(shí)點(diǎn)(2)

來(lái)源:考試吧 2017-09-29 9:34:04 要考試,上考試吧! 萬(wàn)題庫(kù)
“2017年全國(guó)計(jì)算機(jī)二級(jí)C++考試復(fù)習(xí)知識(shí)點(diǎn)(2)”供考生參考。更多計(jì)算機(jī)等級(jí)考試復(fù)習(xí)資料等信息請(qǐng)?jiān)L問(wèn)考試吧計(jì)算機(jī)等級(jí)考試網(wǎng)。

  點(diǎn)擊查看:2017年全國(guó)計(jì)算機(jī)二級(jí)C++考試復(fù)習(xí)知識(shí)點(diǎn)匯總

  類的設(shè)計(jì)、構(gòu)造函數(shù)和析構(gòu)函數(shù)

  一、類的設(shè)計(jì)

  1.類的聲明

  class 類名

  {

  private: //私有

  ...

  public: //公有

  ...

  };

  2.類的成員

  一般在C++類中,所有定義的變量和函數(shù)都是類的成員。如果是變量,我們就叫它數(shù)據(jù)成員如果是函數(shù),我們就叫它成員函數(shù)。

  3.類成員的可見(jiàn)性

  private和public訪問(wèn)控制符決定了成員的可見(jiàn)性。由一個(gè)訪問(wèn)控制符設(shè)定的可訪問(wèn)狀態(tài)將一直持續(xù)到下一個(gè)訪問(wèn)控制符出現(xiàn),或者類聲明的結(jié)束。私有成員僅能被同一個(gè)類中的成員函數(shù)訪問(wèn),公有成員既可以被同一類中的成員函數(shù)訪問(wèn),也可以被其他已經(jīng)實(shí)例化的類中函數(shù)訪問(wèn)。當(dāng)然,這也有例外的情況,這是以后要討論的友元函數(shù)。

  類中默認(rèn)的數(shù)據(jù)類型是private,結(jié)構(gòu)中的默認(rèn)類型是public。一般情況下,變量都作為私有成員出現(xiàn),函數(shù)都作為公有成員出現(xiàn)。

  類中還有一種訪問(wèn)控制符protected,叫保護(hù)成員,以后再說(shuō)明。

  4.初始化

  在聲明一個(gè)類的對(duì)象時(shí),可以用圓括號(hào)()包含一個(gè)初始化表。

  看下面一個(gè)例子:

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth; //3個(gè)私有數(shù)據(jù)成員

  public:

  Box(int,int,int);

  ~Box();

  int volume(); //成員函數(shù)

  };

  Box::Box(int ht,int wd,int dp)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  Box::~Box()

  {

  //nothing

  }

  int Box::volume()

  {

  return height*width*depth;

  }

  int main()

  {

  Box thisbox(3,4,5); //聲明一個(gè)類對(duì)象并初始化

  cout< return 0;

  }

  當(dāng)一個(gè)類中沒(méi)有private成員和protected成員時(shí),也沒(méi)有虛函數(shù),并且不是從其他類中派生出來(lái)的,可以用{}來(lái)初始化。(以后再講解)

  5.內(nèi)聯(lián)函數(shù)

  內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是:內(nèi)聯(lián)函數(shù)是在編譯過(guò)程中展開(kāi)的。通常內(nèi)聯(lián)函數(shù)必須簡(jiǎn)短。定義類的內(nèi)聯(lián)函數(shù)有兩種方法:一種和C語(yǔ)言一樣,在定義函數(shù)時(shí)使用關(guān)鍵字inline。如:

  inline int Box::volume()

  {

  return height*width*depth;

  }

  還有一種方法就是直接在類聲明的內(nèi)部定義函數(shù)體,而不是僅僅給出一個(gè)函數(shù)原型。我們把上面的函數(shù)簡(jiǎn)化一下:

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth;

  public:

  Box(int ht,int wd,int dp)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  ~Box();

  int volume()

  {

  return height*width*depth;

  }

  };

  int main()

  {

  Box thisbox(3,4,5); //聲明一個(gè)類對(duì)象并初始化

  cout< return 0;

  }

  這樣,兩個(gè)函數(shù)都默認(rèn)為內(nèi)聯(lián)函數(shù)了。

  二、構(gòu)造函數(shù)

  什么是構(gòu)造函數(shù)?通俗的講,在類中,函數(shù)名和類名相同的函數(shù)稱為構(gòu)造函數(shù)。上面的Box()函數(shù)就是構(gòu)造函數(shù)。C++允許同名函數(shù),也就允許在一個(gè)類中有多個(gè)構(gòu)造函數(shù)。如果一個(gè)都沒(méi)有,編譯器將為該類產(chǎn)生一個(gè)默認(rèn)的構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)可能會(huì)完成一些工作,也可能什么都不做。

  絕對(duì)不能指定構(gòu)造函數(shù)的類型,即使是void型都不可以。實(shí)際上構(gòu)造函數(shù)默認(rèn)為void型。

  當(dāng)一個(gè)類的對(duì)象進(jìn)入作用域時(shí),系統(tǒng)會(huì)為其數(shù)據(jù)成員分配足夠的內(nèi)存,但是系統(tǒng)不一定將其初始化。和內(nèi)部數(shù)據(jù)類型對(duì)象一樣,外部對(duì)象的數(shù)據(jù)成員總是初始化為0。局部對(duì)象不會(huì)被初始化。構(gòu)造函數(shù)就是被用來(lái)進(jìn)行初始化工作的。當(dāng)自動(dòng)類型的類對(duì)象離開(kāi)其作用域時(shí),所站用的內(nèi)存將釋放回系統(tǒng)。

  看上面的例子,構(gòu)造函數(shù)Box()函數(shù)接受三個(gè)整型擦黑素,并把他們賦值給立方體對(duì)象的數(shù)據(jù)成員。

  如果構(gòu)造函數(shù)沒(méi)有參數(shù),那么聲明對(duì)象時(shí)也不需要括號(hào)。

  1.使用默認(rèn)參數(shù)的構(gòu)造函數(shù)

  當(dāng)在聲明類對(duì)象時(shí),如果沒(méi)有指定參數(shù),則使用默認(rèn)參數(shù)來(lái)初始化對(duì)象。

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth;

  public:

  Box(int ht=2,int wd=3,int dp=4)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  ~Box();

  int volume()

  {

  return height*width*depth;

  }

  };

  int main()

  {

  Box thisbox(3,4,5); //初始化

  Box defaulbox; //使用默認(rèn)參數(shù)

  cout< cout<

  return 0;

  }

  2.默認(rèn)構(gòu)造函數(shù)

  沒(méi)有參數(shù)或者參數(shù)都是默認(rèn)值的構(gòu)造函數(shù)稱為默認(rèn)構(gòu)造函數(shù)。如果你不提供構(gòu)造函數(shù),編譯器會(huì)自動(dòng)產(chǎn)生一個(gè)公共的默認(rèn)構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)什么都不做。如果至少提供一個(gè)構(gòu)造函數(shù),則編譯器就不會(huì)產(chǎn)生默認(rèn)構(gòu)造函數(shù)。

  3.重載構(gòu)造函數(shù)

  一個(gè)類中可以有多個(gè)構(gòu)造函數(shù)。這些構(gòu)造函數(shù)必須具有不同的參數(shù)表。在一個(gè)類中需要接受不同初始化值時(shí),就需要編寫多個(gè)構(gòu)造函數(shù),但有時(shí)候只需要一個(gè)不帶初始值的空的Box對(duì)象。

  #include iostream.h

  class Box

  {

  private:

  int height,width,depth;

  public:

  Box() { //nothing }

  Box(int ht=2,int wd=3,int dp=4)

  {

  height=ht;

  width=wd;

  depth=dp;

  }

  ~Box();

  int volume()

  {

  return height*width*depth;

  }

  };

  int main()

  {

  Box thisbox(3,4,5); //初始化

  Box otherbox;

  otherbox=thisbox;

  cout< return 0;

  }

  這兩個(gè)構(gòu)造函數(shù)一個(gè)沒(méi)有初始化值,一個(gè)有。當(dāng)沒(méi)有初始化值時(shí),程序使用默認(rèn)值,即2,3,4。

  但是這樣的程序是不好的。它允許使用初始化過(guò)的和沒(méi)有初始化過(guò)的Box對(duì)象,但它沒(méi)有考慮當(dāng)thisbox給otherbox賦值失敗后,volume()該返回什么。較好的方法是,沒(méi)有參數(shù)表的構(gòu)造函數(shù)也把默認(rèn)值賦值給對(duì)象。

  class Box

  {

  int height,width,depth;

  public:

  Box()

  {

  height=0;width=0;depth=0;

  }

  Box(int ht,int wd,int dp)

  {

  height=ht;width=wd;depth=dp;

  }

  int volume()

  {

  return height*width*depth;

  }

  };

  這還不是最好的方法,更好的方法是使用默認(rèn)參數(shù),根本不需要不帶參數(shù)的構(gòu)造函數(shù)。

  class Box

  {

  int height,width,depth;

  public:

  Box(int ht=0,int wd=0,int dp=0)

  {

  height=ht;width=wd;depth=dp;

  }

  int volume()

  {

  return height*width*depth;

  }

  };

  三、析構(gòu)函數(shù)

  當(dāng)一個(gè)類的對(duì)象離開(kāi)作用域時(shí),析構(gòu)函數(shù)將被調(diào)用(系統(tǒng)自動(dòng)調(diào)用)。析構(gòu)函數(shù)的名字和類名一樣,不過(guò)要在前面加上 ~ 。對(duì)一個(gè)類來(lái)說(shuō),只能允許一個(gè)析構(gòu)函數(shù),析構(gòu)函數(shù)不能有參數(shù),并且也沒(méi)有返回值。析構(gòu)函數(shù)的作用是完成一個(gè)清理工作,如釋放從堆中分配的內(nèi)存。

  我們也可以只給出析構(gòu)函數(shù)的形式,而不給出起具體函數(shù)體,其效果是一樣的,如上面的例子。但在有些情況下,析構(gòu)函數(shù)又是必需的。如在類中從堆中分配了內(nèi)存,則必須在析構(gòu)函數(shù)中釋放。

掃描/長(zhǎng)按二維碼幫助考試通關(guān)
2017等考成績(jī)查詢時(shí)間
2017等考各科通關(guān)技巧
2017各科最新預(yù)測(cè)試卷
2017等考成績(jī)?cè)u(píng)定及管理

微信搜索"考試吧"了解更多考試資訊、下載備考資料

  相關(guān)推薦:

  2017年全國(guó)計(jì)算機(jī)等級(jí)考試時(shí)間|教材目錄(2017年版)

  2017年9月計(jì)算機(jī)等級(jí)考試真題|計(jì)算機(jī)等級(jí)考試答案

  各地2017年9月計(jì)算機(jī)等考成績(jī)查詢時(shí)間|免費(fèi)查分提醒

  計(jì)算機(jī)等級(jí)考試成績(jī)?cè)u(píng)定流程及標(biāo)準(zhǔn)|合格證書(shū)樣本及證書(shū)說(shuō)明

  歷年真題匯總|考試吧特別策劃:2017年計(jì)算機(jī)等級(jí)考試報(bào)考指南

0
收藏該文章
0
收藏該文章
文章搜索
萬(wàn)題庫(kù)小程序
萬(wàn)題庫(kù)小程序
·章節(jié)視頻 ·章節(jié)練習(xí)
·免費(fèi)真題 ·�?荚囶}
微信掃碼,立即獲取!
掃碼免費(fèi)使用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
此欄目下沒(méi)有文章
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。
Copyright © 2004-2025 考試吧計(jì)算機(jī)等級(jí)考試網(wǎng) 出版物經(jīng)營(yíng)許可證新出發(fā)京批字第直170033號(hào)  
京ICP證060677 京ICP備05005269號(hào) 中國(guó)科學(xué)院研究生院權(quán)威支持(北京)
在線模擬試題
考證通關(guān)殺器
考試最新資訊
學(xué)
一次通關(guān)技巧