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

2015年國(guó)家計(jì)算機(jī)二級(jí)C++考試復(fù)習(xí)資料(4)

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

  點(diǎn)擊查看:2015年國(guó)家計(jì)算機(jī)二級(jí)C 考試復(fù)習(xí)資料匯總

  二級(jí)C++輔導(dǎo)筆記:私有數(shù)據(jù)成員的使用

  一、私有數(shù)據(jù)成員的使用

  1.取值和賦值成員函數(shù)

  面向?qū)ο蟮募s定就是保證所有數(shù)據(jù)成員的私有性。一般我們都是通過(guò)公有成員函數(shù)來(lái)作為公共接口來(lái)讀取私有數(shù)據(jù)成員的。某些時(shí)候,我們稱這樣的函數(shù)為取值和賦值函數(shù)。

  取值函數(shù)的返回值和傳遞給賦值函數(shù)的參數(shù)不必一一匹配所有數(shù)據(jù)成員的類型。

  #include iostream.h

  class Date

  {

  int mo, da, yr;

  public:

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

  int getyear() const { return yr; }

  void setyear(int y) { yr = y; }

  };

  int main()

  {

  Date dt(4,1,89);

  cout< dt.setyear(97);

  cout< return 0;

  }

  上面的例子很簡(jiǎn)單,不分析了。要養(yǎng)成這樣的習(xí)慣,通過(guò)成員函數(shù)來(lái)訪問(wèn)和改變類中的數(shù)據(jù)。這樣有利于軟件的設(shè)計(jì)和維護(hù)。比如,改變Date類內(nèi)部數(shù)據(jù)的形式,但仍然用修改過(guò)的getyear()和setyear()來(lái)提供訪問(wèn)接口,那么使用該類就不必修改他們的代碼,僅需要重新編譯程序即可。

  2.常量成員函數(shù)

  注意上面的程序中g(shù)etyear()被聲明為常量型,這樣可以保證該成員函數(shù)不會(huì)修改調(diào)用他的對(duì)象。通過(guò)加上const修飾符,可以使訪問(wèn)對(duì)象數(shù)據(jù)的成員函數(shù)僅僅完成不會(huì)引起數(shù)據(jù)變動(dòng)的那些操作。

  如果程序聲明某個(gè)Date對(duì)象為常量的話,那么該對(duì)象不得調(diào)用任何非常量型成員函數(shù),不論這些函數(shù)是否真的試圖修改對(duì)象的數(shù)據(jù)。只有把那些不會(huì)引起數(shù)據(jù)改變的函數(shù)都聲明為常量型,才可以讓常量對(duì)象來(lái)調(diào)用。

  3.改進(jìn)的成員轉(zhuǎn)換函數(shù)

  下面的程序改進(jìn)了從Date對(duì)象到CustomDate對(duì)象的成員轉(zhuǎn)換函數(shù),用取值和賦值函數(shù)取代了使用公有數(shù)據(jù)成員的做法。(以前的程序代碼在上一帖中)

  #include iostream.h

  class CustomDate

  {

  int da,yr;

  public:

  CustomDate() {}

  CustomDate(int d,int y) { da=d; yr=y; }

  void display() const {cout< int getday() const { return da; }

  void setday(int d) { da=d; }

  };

  class Date

  {

  int mo,da,yr;

  public:

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

  operator CustomDate() const;

  };

  Date::operator CustomDate() const

  {

  static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};

  CustomDate cd(0,yr);

  int day=da;

  for(int i=0;i cd.setday(day);

  return cd;

  }

  int main()

  {

  Date dt(11,17,89);

  CustomDate cd;

  cd=dt;

  cd.display();

  return 0;

  }

  注意上面的程序中Date::operator CustomDate()聲明為常量型,因?yàn)檫@個(gè)函數(shù)沒有改變調(diào)用它對(duì)象的數(shù)據(jù),盡管它修改了一個(gè)臨時(shí)CustomDate對(duì)象并將其作為函數(shù)返回值。

  二、友元

  前面已經(jīng)說(shuō)過(guò)了,私有數(shù)據(jù)成員不能被類外的其他函數(shù)讀取,但是有時(shí)候類會(huì)允許一些特殊的函數(shù)直接讀寫其私有數(shù)據(jù)成員。

  關(guān)鍵字friend可以讓特定的函數(shù)或者別的類的所有成員函數(shù)對(duì)私有數(shù)據(jù)成員進(jìn)行讀寫。這既可以維護(hù)數(shù)據(jù)的私有性,有可以保證讓特定的類或函數(shù)能夠直接訪問(wèn)私有數(shù)據(jù)。

  1.友元類

  一個(gè)類可以聲明另一個(gè)類為其友元,這個(gè)友元的所有成員函數(shù)都可以讀寫它的私有數(shù)據(jù)。

  #include iostream.h

  class Date;

  class CustomDate

  {

  int da,yr;

  public:

  CustomDate(int d=0,int y=0) { da=d; yr=y; }

  void display() const {cout< friend Date; //這兒

  };

  class Date

  {

  int mo,da,yr;

  public:

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

  operator CustomDate();

  };

  Date::operator CustomDate()

  {

  static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};

  CustomDate cd(0, yr);

  for (int i=0;i cd.da+=da;

  return cd;

  }

  int main()

  {

  Date dt(11,17,89);

  CustomDate cd(dt);

  cd.display();

  return 0;

  }

  在上面的程序中,有這樣一句 friend Date; 該語(yǔ)句告訴編譯器,Date類的所有成員函數(shù)有權(quán)訪問(wèn)CustomDate類的私有成員。因?yàn)镈ate類的轉(zhuǎn)換函數(shù)需要知道CustomDate類的每個(gè)數(shù)據(jù)成員,所以真?zhèn)Date類都被聲明為CustomDate類的友元。

  2.隱式構(gòu)造函數(shù)

  上面程序?qū)ustomDate的構(gòu)造函數(shù)的調(diào)用私有顯示該類需要如下的一個(gè)轉(zhuǎn)換構(gòu)造函數(shù):

  CustomDate(Date& dt);

  但是唯一的一個(gè)構(gòu)造函數(shù)是:CustomDate(int d=0;int y=0);

  這就出現(xiàn)了問(wèn)題,編譯器要從Date對(duì)象構(gòu)造一個(gè)CustomDate對(duì)象,但是CustomDate類中并沒有定義這樣的轉(zhuǎn)換構(gòu)造函數(shù)。不過(guò)Date類中定義了一個(gè)成員轉(zhuǎn)換函數(shù),它可以把Date對(duì)象轉(zhuǎn)換成CustomDate對(duì)象。于是編譯器開始搜索CustomDate類,看其是否有一個(gè)構(gòu)造函數(shù),能從一個(gè)已存在的CustomDate的對(duì)象創(chuàng)建新的CustomDate對(duì)象。這種構(gòu)造函數(shù)叫拷貝構(gòu)造函數(shù)?截悩(gòu)造函數(shù)也只有一個(gè)參數(shù),該參數(shù)是它所屬的類的一個(gè)對(duì)象,由于CustomDate類中沒有拷貝構(gòu)造函數(shù),于是編譯器就會(huì)產(chǎn)生一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),該函數(shù)簡(jiǎn)單地把已存在的對(duì)象的每個(gè)成員拷貝給新對(duì)象,F(xiàn)在我們已經(jīng)知道,編譯器可以把Date對(duì)象轉(zhuǎn)換成CustomDate對(duì)象,也可以從已存在的CustomDate對(duì)象生成一個(gè)新的CustomDate對(duì)象。那么上面提出的問(wèn)題,編譯器就是這樣做的:它首先調(diào)用轉(zhuǎn)換函數(shù),從Date對(duì)象創(chuàng)建一個(gè)隱藏的、臨時(shí)的、匿名的CustomDate對(duì)象,然后用該臨時(shí)對(duì)象作為參數(shù)調(diào)用默認(rèn)拷貝構(gòu)造函數(shù),這就生成了一個(gè)新的CustomDate對(duì)象。

  3.預(yù)引用

  上面的例子中還有這樣一句 class Date;

  這個(gè)語(yǔ)句叫做預(yù)引用。它告訴編譯器,類Date將在后面定義。編譯器必須知道這個(gè)信號(hào),因?yàn)镃ustomDate類中引用了Date類,而Date里也引用了CustomDate類,必須首先聲明其中之一。

  使用了預(yù)引用后,就可以聲明未定義的類的友元、指針和引用。但是不可以使用那些需要知道預(yù)引用的類的定義細(xì)節(jié)的語(yǔ)句,如聲明該類的一個(gè)實(shí)例或者任何對(duì)該類成員的引用。

  4.顯式友元預(yù)引用

  也可以不使用預(yù)引用,這只要在聲明友元的時(shí)候加上關(guān)鍵自class就行了。

  #include iostream.h

  class CustomDate

  {

  int da,yr;

  public:

  CustomDate(int d=0,int y=0) { da=d; yr=y; }

  void display() const {cout< friend class Date; //這兒,去掉前面的預(yù)引用

  };

  class Date

  {

  ... ...

  };

  Date::operator CustomDate()

  {

  ... ...

  }

  int main()

  {

  ... ...

  }

  5.友元函數(shù)

  通常,除非真的需要,否則并不需要把整個(gè)類都設(shè)為另一個(gè)類的友元,只需挑出需要訪問(wèn)當(dāng)前類私有數(shù)據(jù)成員的成員函數(shù),將它們?cè)O(shè)置為該類的友元即可。這樣的函數(shù)稱為友元函數(shù)。

  下面的程序限制了CustomDate類數(shù)據(jù)成員的訪問(wèn),Date類中只有需要這些數(shù)據(jù)的成員函數(shù)才有權(quán)讀寫它們。

  #include iostream.h

  class CustomDate;

  class Date

  {

  int mo,da,yr;

  public:

  Date(const CustomDate&);

  void display() const {cout< };

  class CustomDate

  {

  int da,yr;

  public:

  CustomDate(int d=0,int y=0) { da=d; yr=y; }

  friend Date::Date(const CustomDate&);

  };

  Date::Date(const CustomDate& cd)

  {

  static int dys[] = {31,28,31,30,31,30,31,31,30,31,30,31};

  yr=cd.yr;

  da=cd.da;

  for(mo=0;mo<11;mo++)

  if(da>dys[mo]) da-=dys[mo];

  else break;

  mo++;

  }

  int main()

  {

  Date dt(CustomDate(123, 89));

  dt.display();

  return 0;

  }

  6.匿名對(duì)象

  上面main()函數(shù)中Date對(duì)象調(diào)用CustomDate類的構(gòu)造函數(shù)創(chuàng)建了一個(gè)匿名CustomDate對(duì)象,然后用該對(duì)象創(chuàng)建了一個(gè)Date對(duì)象。這種用法在C++中是經(jīng)常出現(xiàn)的。

  7.非類成員的友元函數(shù)

  有時(shí)候友元函數(shù)未必是某個(gè)類的成員。這樣的函數(shù)擁有類對(duì)象私有數(shù)據(jù)成員的讀寫權(quán),但它并不是任何類的成員函數(shù)。這個(gè)特性在重載運(yùn)算符時(shí)特別有用。

  非類成員的友元函數(shù)通常被用來(lái)做為類之間的紐帶。一個(gè)函數(shù)如果被兩個(gè)類同時(shí)聲明為友元,它就可以訪問(wèn)這兩個(gè)類的私有成員。下面的程序說(shuō)明了一個(gè)可以訪問(wèn)兩個(gè)類私有數(shù)據(jù)成員的友元函數(shù)是如何將在兩個(gè)類之間架起橋梁的。

  #include iostream.h

  class Time;

  class Date

  {

  int mo,da,yr;

  public:

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

  friend void display(const Date&, const Time&);

  };

  class Time

  {

  int hr,min,sec;

  public:

  Time(int h,int m,int s) { hr=h; min=m; sec=s;}

  friend void display(const Date&, const Time&);

  };

  void display(const Date& dt, const Time& tm)

  {

  cout << dt.mo << '/' << dt.da << '/' << dt.yr;

  cout << ' ';

  cout << tm.hr << ':' << tm.min << ':' << tm.sec;

  }

  int main()

  {

  Date dt(2,16,97);

  Time tm(10,55,0);

  display(dt, tm);

  return 0;

  }

  相關(guān)推薦:

  各地2015年計(jì)算機(jī)等級(jí)考試報(bào)名時(shí)間匯總

  各地2015年上半年計(jì)算機(jī)等級(jí)考試費(fèi)用匯總

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

文章搜索
版權(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- 考試吧計(jì)算機(jī)等級(jí)考試網(wǎng) All Rights Reserved 
中國(guó)科學(xué)院研究生院權(quán)威支持(北京) 電 話:010-62168566 傳 真:010-62192699