首頁 - 網(wǎng)校 - 萬題庫 - 直播 - 雄鷹 - 團購 - 書城 - ? - 學(xué)習(xí)通 - 導(dǎo)航 - 510 -
首頁考試吧網(wǎng)校萬題庫直播雄鷹510團購書城?論壇實用文檔作文大全寶寶起名
2015中考
法律碩士
2015高考
MBA考試
2015考研
MPA考試
在職研
中科院
考研培訓(xùn)
專升本
自學(xué)考試 成人高考
四 六 級
GRE考試
攻碩英語
零起點日語
職稱英語
口譯筆譯
申碩英語
零起點韓語
商務(wù)英語
日語等級
GMAT考試
公共英語
職稱日語
新概念英語
專四專八
博思考試
零起點英語
托福考試
托業(yè)考試
零起點法語
雅思考試
成人英語三級
零起點德語
等級考試
華為認證
水平考試
Java認證
職稱計算機 微軟認證 思科認證 Oracle認證 Linux認證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報 關(guān) 員
外 銷 員
價格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會工作者
銀行從業(yè)
教師資格
營養(yǎng)師
保險從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國際商務(wù)
心理咨詢
營 銷 師
司法考試
國際貨運代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護士
會計從業(yè)資格
基金從業(yè)資格
統(tǒng)計從業(yè)資格
經(jīng)濟師
精算師
統(tǒng)計師
會計職稱
法律顧問
ACCA考試
初級會計職稱
資產(chǎn)評估師
高級經(jīng)濟師
注冊會計師
高級會計師
美國注冊會計師
審計師考試
國際內(nèi)審師
注冊稅務(wù)師
理財規(guī)劃師
一級建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價師
二級建造師
招標師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價工程師
注冊測繪師
質(zhì)量工程師
巖土工程師
注冊給排水
造價員考試
注冊計量師
環(huán)保工程師
化工工程師
暖通工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
消防工程師
監(jiān)理工程師
房地產(chǎn)估價
土地估價師
安全評價師
房地產(chǎn)經(jīng)紀人
投資項目管理師
環(huán)境影響評價師
土地登記代理人
寶寶起名
繽紛校園
實用文檔
入黨申請
英語學(xué)習(xí)
思想?yún)R報
作文大全
工作總結(jié)
求職招聘 論文下載 直播課堂
您現(xiàn)在的位置: 考試吧 > 計算機等級考試 > 計算機二級考試 > C加加 > 復(fù)習(xí)資料 > 正文

2015年國家計算機二級C++考試復(fù)習(xí)資料(6)

考試吧整理了“2015年國家計算機二級C++考試復(fù)習(xí)資料”,提供給各位考生備考,更多考試資料請持續(xù)關(guān)注考試吧計算機等級考試頻道!

  點擊查看:2015年國家計算機二級C 考試復(fù)習(xí)資料匯總

  二級C++輔導(dǎo)筆記:類對象數(shù)組和靜態(tài)成員

  一、類對象數(shù)組

  類的對象和C++其他數(shù)據(jù)類型一樣,也可以為其建立數(shù)組,數(shù)組的表示方法和結(jié)構(gòu)一樣。

  #include iostream.h

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m=0,int d=0, int y=0) { mo=m; da=d; yr=y;}

  void display() const { cout < };

  int main()

  {

  Date dates[2];

  Date today(12,31,2003);

  dates[0]=today;

  dates[0].display();

  dates[1].display();

  return 0;

  }

  1.類對象數(shù)組和默認構(gòu)造函數(shù)

  在前面已經(jīng)說過,不帶參數(shù)或者所有參數(shù)都有默認值的構(gòu)造函數(shù)叫做默認構(gòu)造函數(shù)。如果類中沒有構(gòu)造函數(shù),編譯器會自動提供一個什么都不做的公共默認構(gòu)造函數(shù) 。如果類當(dāng)中至少有一個構(gòu)造函數(shù),編譯器就不會提供默認構(gòu)造函數(shù)。

  如果類當(dāng)中不含默認構(gòu)造函數(shù),則無法實例化其對象數(shù)組。因為實例花類對象數(shù)組的格式不允許用初始化值來匹配某個構(gòu)造函數(shù)的參數(shù)表。

  上面的程序中,main()函數(shù)聲明了一個長度為2的Date對象數(shù)組,還有一個包含初始化值的單個Date對象。接著把這個初始化的Date對象賦值給數(shù)組中第一個對象,然后顯示兩個數(shù)組元素中包含的日期。從輸出中可以看到,第一個日期是有效日期,而第二個顯示的都是0。

  當(dāng)聲明了某個類的對象數(shù)組時,編譯器會為每個元素都調(diào)用默認構(gòu)造函數(shù)。

  下面的程序去掉了構(gòu)造函數(shù)的默認參數(shù)值,并且增加了一個默認構(gòu)造函數(shù)。

  #include

  class Date

  {

  int mo, da, yr;

  public:

  Date();

  Date(int m,int d,int y) { mo=m; da=d; yr=y;}

  void display() const { cout < };

  Date::Date()

  {

  cout < mo=0; da=0; yr=0;

  }

  int main()

  {

  Date dates[2];

  Date today(12,31,2003);

  dates[0]=today;

  dates[0].display();

  dates[1].display();

  return 0;

  }

  運行程序,輸出為:

  Date constructor running

  Date constructor running

  12/31/2003

  0/0/0

  從輸出中可以看出,Date()這個默認構(gòu)造函數(shù)被調(diào)用了兩次。

  2.類對象數(shù)組和析構(gòu)函數(shù)

  當(dāng)類對象離開作用域時,編譯器會為每個對象數(shù)組元素調(diào)用析構(gòu)函數(shù)。

  #include iostream.h

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m=0,int d=0,int y=0) { mo=m; da=d; yr=y;}

  ~Date() {cout < void display() const {cout< };

  int main()

  {

  Date dates[2];

  Date today(12,31,2003);

  dates[0]=today;

  dates[0].display();

  dates[1].display();

  return 0;

  }

  運行程序,輸出為:

  12/31/2003

  0/0/0

  Date destructor running

  Date destructor running

  Date destructor running

  表明析構(gòu)函數(shù)被調(diào)用了三次,也就是dates[0],dates[1],today這三個對象離開作用域時調(diào)用的。

  二、靜態(tài)成員

  可以把類的成員聲明為靜態(tài)的。靜態(tài)成員只能存在唯一的實例。所有的成員函數(shù)都可以訪問這個靜態(tài)成員。即使沒有聲明類的任何實例,靜態(tài)成員也已經(jīng)是存在的。不過類當(dāng)中聲明靜態(tài)成員時并不能自動定義這個變量,必須在類定義之外來定義該成員。

  1.靜態(tài)數(shù)據(jù)成員

  靜態(tài)數(shù)據(jù)成員相當(dāng)于一個全局變量,類的所有實例都可以使用它。成員函數(shù)能訪問并且修改這個值。如果這個靜態(tài)成員是公有的,那么類的作用域之內(nèi)的所有代碼(不論是在類的內(nèi)部還是外部)都可以訪問這個成員。下面的程序通過靜態(tài)數(shù)據(jù)成員來記錄鏈表首項和末項的地址。

  #include iostream.h

  #include string.h

  class ListEntry

  {

  public:

  static ListEntry* firstentry;

  private:

  static ListEntry* lastentry;

  char* listvalue;

  ListEntry* nextentry;

  public:

  ListEntry(char*);

  ~ListEntry() { delete [] listvalue;}

  ListEntry* NextEntry() const { return nextentry; };

  void display() const { cout < };

  ListEntry* ListEntry::firstentry;

  ListEntry* ListEntry::lastentry;

  ListEntry::ListEntry(char* s)

  {

  if(firstentry==0) firstentry=this;

  if(lastentry!=0) lastentry- >nextentry=this;

  lastentry=this;

  listvalue=new char[strlen(s)+1];

  strcpy(listvalue,s);

  nextentry=0;

  }

  int main()

  {

  while (1)

  {

  cout <<\nEnter a name ('end' when done): ;

  char name[25];

  cin >>name;

  if(strncmp(name,end,3)==0) break;

  new ListEntry(name);

  }

  ListEntry* next = ListEntry::firstentry;

  while (next != 0)

  {

  next- >display();

  ListEntry* hold = next;

  next=next- >NextEntry();

  delete hold;

  }

  return 0;

  }

  程序首先顯示提示信息,輸入一串姓名,以end作為結(jié)束標志。然后按照輸入順序來顯示姓名。構(gòu)造函數(shù)將表項加入鏈表,用new運算符來聲明一個表項,但并沒有把new運算符返回的地址賦值給某個指針,這是因為構(gòu)造函數(shù)會把該表項的地址賦值給前一個表項的nextentry指針。

  這個程序和前面將的逆序輸出的程序都不是最佳方法,最好的方法是使用類模板,這在后面再介紹。

  main()函數(shù)取得ListEntry::firstentry的值,開始遍歷鏈表,因此必需把ListEntry::firstentry設(shè)置成公有數(shù)據(jù)成員,這不符合面向?qū)ο蟪绦虻募s定,因為這里數(shù)據(jù)成員是公有的。

  2.靜態(tài)成員函數(shù)

  成員函數(shù)也可以是靜態(tài)的。如果一個靜態(tài)成員函數(shù)不需要訪問類的任何實例的成員,可以使用類名或者對象名來調(diào)用它。靜態(tài)成員通常用在只需要訪問靜態(tài)數(shù)據(jù)成員的情況下。

  靜態(tài)成員函數(shù)沒有this指針,因為它不能訪問非靜態(tài)成員,所以它們不能把this指針指向任何東西。

  下面的程序中,ListEntry類中加入了一個靜態(tài)成員函數(shù)FirstEntry(),它從數(shù)據(jù)成員firstentry獲得鏈表第一項的地址,在這兒,firstentry已經(jīng)聲明為私有數(shù)據(jù)成員了。

  #include iostream.h

  #include string.h

  class ListEntry

  {

  static ListEntry* firstentry;

  static ListEntry* lastentry;

  char* listvalue;

  ListEntry* nextentry;

  public:

  ListEntry(char*);

  ~ListEntry() { delete [] listvalue;}

  static ListEntry* FirstEntry() { return firstentry; }

  ListEntry* NextEntry() const { return nextentry; };

  void display() const { cout < };

  ListEntry* ListEntry::firstentry;

  ListEntry* ListEntry::lastentry;

  ListEntry::ListEntry(char* s)

  {

  if(firstentry==0) firstentry=this;

  if(lastentry!=0) lastentry- >nextentry=this;

  lastentry=this;

  listvalue=new char[strlen(s)+1];

  strcpy(listvalue, s);

  nextentry = 0;

  }

  int main()

  {

  while (1)

  {

  cout <<\nEnter a name ('end' when done):;

  char name[25];

  cin >> name;

  if(strncmp(name,end,3)==0) break;

  new ListEntry(name);

  }

  ListEntry* next = ListEntry::FirstEntry();

  while (next != 0)

  {

  next- >display();

  ListEntry* hold = next;

  next = next- >NextEntry();

  delete hold;

  }

  return 0;

  }

  函數(shù)ListEntry::FirstEntry()是靜態(tài)的,返回靜態(tài)數(shù)據(jù)成員firstentry的值。

  3.公有靜態(tài)成員

  如果一個靜態(tài)成員象上面程序一樣是公有的,那么在整個程序中都可以訪問它?梢栽谌魏蔚胤秸{(diào)用公有景泰成員函數(shù),而且不需要有類的實例存在。但公有靜態(tài)成員函數(shù)不完全是全局的,它不僅僅存在于定義類的作用域內(nèi)。在這個作用域里面,只要在函數(shù)名前加上類名和域解析運算符::就可以調(diào)用該函數(shù)。

  相關(guān)推薦:

  各地2015年計算機等級考試報名時間匯總

  各地2015年上半年計算機等級考試費用匯總

  2015年計算機二級C++模擬練習(xí)題及答案匯總

文章搜索
計算機等級考試欄目導(dǎo)航
版權(quán)聲明:如果計算機等級考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請與我們聯(lián)系800@exam8.com,我們將會及時處理。如轉(zhuǎn)載本計算機等級考試網(wǎng)內(nèi)容,請注明出處。
Copyright © 2004- 考試吧計算機等級考試網(wǎng) All Rights Reserved 
中國科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699