黄色在线观看视频-黄色在线免费看-黄色在线视频免费-黄色在线视频免费看-免费啪啪网-免费啪啪网站

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

2015年國家計算機二級C++考試復習資料(8)

來源:考試吧 2014-12-26 14:13:07 考試吧:中國教育培訓第一門戶 模擬考場
考試吧整理了“2015年國家計算機二級C++考試復習資料”,提供給各位考生備考,更多考試資料請持續關注考試吧計算機等級考試頻道!

  點擊查看:2015年國家計算機二級C 考試復習資料匯總

  二級C++輔導筆記:類的其他幾點問題

  一、拷貝構造函數

  拷貝構造函數在下列情況下被調用:用已經存在的對象去初始化同一個類的另一個對象;在函數的參數中,以傳值方式傳遞類對象的拷貝;類對象的值被用做函數的返回值。拷貝構造函數和前面說到的轉換構造函數有些相似。轉換構造函數是把一個類的對象轉化為另一個類的對象;拷貝構造函數是用一個已經存在的對象的值實例化該類的一個新對象。

  不同對象間的初始化和賦值的區別:賦值操作是在兩個已經存在的對象間進行的;而初始化是要創建一個新的對象,并且其初值來源于另一個已存在的對象。編譯器會區別這兩種情況,賦值的時候調用重載的賦值運算符,初始化的時候調用拷貝構造函數。

  如果類中沒有拷貝構造函數,則編譯器會提供一個默認的。這個默認的拷貝構造函數只是簡單地復制類中的每個成員。

  #include iostream.h

  #include string.h

  class Date

  {

  int mo, da, yr;

  char* month;

  public:

  Date(int m = 0, int d = 0, int y = 0);

  Date(const Date &);

  ~Date();

  void display() const;

  };

  Date::Date(int m, int d, int y)

  {

  static char* mos[] =

  {

  January, February, March, April, May, June,

  July, August, September, October, November, December

  };

  mo = m; da = d; yr = y;

  if (m != 0)

  {

  month = new char[strlen(mos[m-1])+1];

  strcpy(month, mos[m-1]);

  }

  else

  month = 0;

  }

  Date::Date(const Date & dt)

  {

  mo = dt.mo;

  da = dt.da;

  yr = dt.yr;

  if (dt.month != 0)

  {

  month = new char [strlen(dt.month)+1];

  strcpy(month, dt.month);

  }

  else

  month = 0;

  }

  Date::~Date()

  {

  delete [] month;

  }

  void Date::display() const

  {

  if (month != 0)

  cout << month <<' '<< da << , << yr << std::endl;

  }

  int main()

  {

  Date birthday(6,24,1940);

  birthday.display();

  Date newday = birthday;

  newday.display();

  Date lastday(birthday);

  lastday.display();

  return 0;

  }

  本例中,用到了兩次拷貝構造函數。一個是使用普通的C++初始化變量的語句:

  Date newday = birthday;

  另一個是使用構造函數的調用約定,即把初始化值作為函數的參數:

  Date lastday(birthday);

  二、類的引用

  在函數參數和返回值中,如果一定要使用傳值方式,那么使用類對象的引用,是一個提高效率的方法。

  類的數據成員也可以是一個引用,但必須注意:第一,一個引用必須初始化。通常一個類對象并不會像結構那樣用大括號來初始化,而是調用構造函數。因此在構造函數里必須初始化類當中的引用成員。第二,引用是一個別名。盡管類里面的引用在使用方式上看起來和類的一般數據成員沒有什么區別,但是作用在其上的操作,實際上是對用來初始化它的那么對象進行的。

  #include iostream.h

  class Date

  {

  int da, mo, yr;

  public:

  Date(int d,int m,int y)

  { da = d; mo = m; yr = y; }

  void Display() const

  { cout << da << '/' << mo << '/' << yr; }

  };

  class Time

  {

  int hr, min, sec;

  public:

  Time(int h, int m, int s)

  { hr = h; min = m; sec = s; }

  void Display() const

  { cout << hr << ':' << min << ':' << sec; }

  };

  class DateTime

  {

  const Date & dt;

  const Time & tm;

  public:

  DateTime(const Date & d, const Time& t) : dt(d), tm(t)

  {

  //empty

  }

  void Display() const

  {

  dt.Display();

  cout << ' ';

  tm.Display();

  }

  };

  int main()

  {

  Date today(7,4,2004);

  Time now(15,20,0);

  DateTime dtm(today, now);

  dtm.Display();

  return 0;

  }

  我們來看看這個程序中DateTime的構造函數的格式:冒號操作符引出了一個參數初始化表。必須使用這種格式來初始化引用數據成員,而不可以在函數體內來進行初始化工作。如果構造函數像上例一樣不是內聯的,那么最好不要在類聲明中構造函數的原型上使用冒號和初始化值表,而是像下面這樣,把參數初始化表放在定義構造函數的地方:

  Class DateTime

  {

  const Date & dt;

  const Time & tm;

  public:

  DateTime(const Date & d,const Time& t);

  }

  DateTime::DateTime(const Date & d,const Time& t):dt(d),tm(t)

  {

  //empty

  }

  可以使用構造函數的參數初始化表來初始化任何數據成員。特別是常量數據成員,和引用一樣,只能在參數初始化表里進行初始化,這是因為不可以在構造函數內部為常量數據成員賦值。

  當一個類含有引用數據成員時,一旦引用被實例化和初始化以后,就無法修改它的值,所以該類不可能徹底地重載賦值運算符函數。

  三、構造函數的參數初始化表

  如果類對象的某些數據成員沒有載構造函數內部被初始化,那么必須使用構造函數的參數初始化表對他們進行初始化。否則,編譯器不止到該如何初始化這些還等著在構造函數內部賦值的成員。我們習慣用參數初始化表來初始化所有數據成員。

  class Date

  {

  int mo,da,yr;

  public:

  Date(int m=0,int d=0,int y=0);

  };

  class Employee

  {

  int empno;

  Date datehired;

  public:

  Employee(int en,Date & dh);

  };

  可以用下面兩種方法編寫Employee類的構造函數:

  Employee::Employee(int en,Date & dt)

  {

  empno=en;

  datehired=dh;

  }

  或者;

  Employee::Employee(int en,Date & dt):empno(en),datehired(dh)

  {

  //empty

  }

  雖然這兩種方法效果是一樣的,但是根據Date對象默認構造函數的復雜性的不同,這兩種形式的效率差別是很大的。

  四、對const修飾符的簡單說明

  如果一個對象被聲明為常量,那么該對象就不可以調用類當中任何非常量型的成員函數(除了被編譯器隱式調用的構造函數和析構函數)。看下面的代碼;

  #include iostream.h

  class Date

  {

  int month,day,year;

  public:

  Date(int m,d,y):month(m),day(d),year(y) {}

  void display()

  {

  cout < }

  }

  int main()

  {

  const Date dt(4,7,2004);

  dt.display(); //error

  return 0;

  }

  這個程序盡管編譯時沒有問題,但運行時卻出錯了。這是因為常量對象不能調用非常量函數。編譯器只看函數的聲明,而不在乎函數的具體實現。實際上函數的實現可以在程序中的任何地方,也可以是在另一個源代碼文件中,這就超過了編譯器的當前可見范圍。

  //date.h

  class Date

  {

  int month,day,year;

  public:

  Date(int m,d,y);

  void display();

  };

  //date.cpp

  #include iostream.h

  #include date.h

  Date::Date(int m,d,y):month(m),day(d),year(y) {}

  void Date::display()

  {

  cout < }

  //program.cpp

  #include iostream.h

  #include date.cpp

  int main()

  {

  const Date dt(4,7,2004);

  dt.display();

  return 0;

  }

  解決出錯的問題有兩個方法:第一是聲明display()函數為常量型的

  //in date.h

  void display() const

  //int date.cpp

  void Date::display() const

  {

  cout < }

  另一個解決方式就是省略掉Date對象聲明里的const修飾符。

  Date dt(4,7,2004);

  還有另一個容易出錯的地方:

  void abc(const Date & dt)

  {

  dt.display(); //error 提示display沒有const修飾符

  }

  函數abc()聲明了一個Date對象的常量引用,這說明該函數不會修改傳遞進來的參數的值。如果Date::display()函數不是常量型的,那么在函數abc()里就不能調用它,因為編譯器會認為Date::display()函數有可能會修改常量的值。

  不論類對象是否是常量型的,它必須修改某個數據成員的值時,ANSI委員會設立了mutable關鍵字。

  五、可變的數據成員

  假設需要統計某個對象出現的次數,不管它是否是常量。那么類當中就應該有一個用來計數的整型數據成員。只要用mutable修飾符來聲明該數據成員,一個常量型的成員函數就可以修改它的值。

  #include iostream.h

  class AValue

  {

  int val;

  mutable int rptct;

  public:

  AValue(int v) : val(v), rptct(0) { }

  ~AValue()

  {

  cout < }

  void report() const;

  };

  void AValue::report() const

  {

  rptct++;

  cout << val << endl;

  }

  int main()

  {

  const AValue aval(123);

  aval.report();

  aval.report();

  aval.report();

  return 0;

  }

  相關推薦:

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

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

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

文章責編:luoyuting  
看了本文的網友還看了
文章搜索
版權聲明:如果計算機等級考試網所轉載內容不慎侵犯了您的權益,請與我們聯系800@exam8.com,我們將會及時處理。如轉載本計算機等級考試網內容,請注明出處。
Copyright © 2004- 考試吧計算機等級考試網 All Rights Reserved 
中國科學院研究生院權威支持(北京) 電 話:010-62168566 傳 真:010-62192699
主站蜘蛛池模板: 手机在线视频一区 | 亚洲精品手机在线观看 | 国产综合视频 | 亚洲综合无码一区二区 | 国产亚洲欧洲 | 91短视频testflight | 美国一级毛片免费看成人 | 久久香蕉精品视频 | 午夜私人影院 | 天天看片天天操 | 欧美三级香港三级日本三级 | 在线观看精品福利片香蕉 | 欧美片在线 | 福利片在线| 亚洲一区日韩二区欧美三区 | 人人爱天天做夜夜爽88 | 亚洲欧美人成人让影院 | 成人一区二区免费中文字幕 | 国产一级一片免费播放 | 涩涩视频网站 | 国产成人a在一区线观看高清 | 看全色黄大色黄女片爽毛片 | 91av福利视频 | 免费成人黄色大片 | 国产日韩欧美亚洲精品95 | 天天激情综合 | 国产日韩欧美综合色视频在线 | 99久久国产综合精品麻豆 | 中文字幕午夜乱理片11111 | 欧美精品video | 成人羞羞国产免费软件 | 久久国产精品亚洲va麻豆 | 日本午夜视频在线 | 日韩一区二区中文字幕 | 国产一区二区三区在线看片 | 中国第一毛片 | 性欧美暴力猛交xxxxx高清 | 久久久青青 | 亚洲精品高清国产一久久 | 亚洲欧美一区二区三区在线观看 | 久久久久国产 |