国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

詳解C++基礎(chǔ)――類繼承

2020-01-26 13:28:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、前言

好吧,本系列博客已經(jīng)變成了《C++ Primer Plus》的讀書筆記,尷尬。在使用C語(yǔ)言時(shí),多通過(guò)添加庫(kù)函數(shù)的方式實(shí)現(xiàn)代碼重用,但有一個(gè)弊端就是原來(lái)寫好的代碼并不完全適用于現(xiàn)在的情況。OOP設(shè)計(jì)思想中類的繼承相比來(lái)說(shuō)更為靈活,可以添加新的數(shù)據(jù)成員和方法,也能修改繼承下來(lái)方法的實(shí)現(xiàn)細(xì)節(jié),同時(shí)還保留了原有的代碼。開始進(jìn)入正題。

二、類繼承示例

場(chǎng)景如下:現(xiàn)需要記錄乒乓球運(yùn)動(dòng)成員的信息,包括姓名和有無(wú)空余桌臺(tái)。其中有一部分成員參加過(guò)比賽,需要將這一部分單獨(dú)提出并記錄他們?cè)诒荣愔械谋确帧R虼?,參加過(guò)比賽的成員所屬的類就是素有成員所屬類的派生類對(duì)象了。

類聲明:

#ifndef TABTENN_H_#define TABTENN_H_#include <string>using std::string;class TableTennisPlayer{private:  string firstname;  string lastname;  bool hasTable;public:  TableTennisPlayer (const string& fn = "none",            const string& ln = "none",bool ht = false);  void Name() const;  bool HasTable() const {return hasTable;};  void ResetTable(bool v) {hasTable = v;};};//derived classclass RatedPlayer:public TableTennisPlayer //TableTennisPlayer是基類{private:  unsigned int rating;public:  RatedPlayer(unsigned int r = 0,const string& fn = "none",const string& ln = "none",        bool ht = false);//默認(rèn)構(gòu)造函數(shù)  RatedPlayer(unsigned int r,const TableTennisPlayer& tp);//通過(guò)基類對(duì)象創(chuàng)建派生類對(duì)象構(gòu)造函數(shù)  unsigned int Rating() const {return rating;}  void ResetRating (unsigned int r) {rating = r;}};#endiftabtenn.h

類方法定義:

#include <iostream>#include "tabtenn.h"TableTennisPlayer::TableTennisPlayer (const string& fn,const string& ln,bool ht):  firstname(fn),lastname(ln),hasTable(ht)//成員初始化列表{}void TableTennisPlayer::Name() const{  std::cout << lastname << ", " << firstname;}//RatedPlayer methods//派生類構(gòu)造函數(shù)必須調(diào)用基類構(gòu)造函數(shù)RatedPlayer::RatedPlayer(unsigned int r,const string& fn,const string& ln,bool ht):  TableTennisPlayer(fn,ln,ht)//派生類構(gòu)造函數(shù)首先創(chuàng)建基類對(duì)象,使用初始化列表完成{  rating = r;}RatedPlayer::RatedPlayer(unsigned int r,const TableTennisPlayer& tp):  TableTennisPlayer(tp),rating(r){}tabtenn.cpp

上述代碼將基類TableTennisPlayer和派生類RatedPlayer放在了一起。RatedPlayer類聲明中使用:public name_of_base_class 表示公有派生。在派生類的聲明中要添加自己的構(gòu)造函數(shù)和額外的成員函數(shù)和方法。這里派生類構(gòu)造函數(shù)中學(xué)問(wèn)很大。

在創(chuàng)建派生類對(duì)象之前必須先創(chuàng)建基類對(duì)象,這是因?yàn)榕缮惖姆椒o(wú)法直接訪問(wèn)基類的私有成員。那問(wèn)題來(lái)了:當(dāng)創(chuàng)建新的派生類對(duì)象時(shí),會(huì)自動(dòng)調(diào)用派生類構(gòu)造函數(shù)。如何實(shí)現(xiàn)在調(diào)用派生類構(gòu)造函數(shù)之前就調(diào)用基類構(gòu)造函數(shù)創(chuàng)建基類對(duì)象呢?(好繞口)這里需要使用構(gòu)造函數(shù)的特有語(yǔ)法――初始化列表。在程序指針指向派生類構(gòu)造函數(shù)大括號(hào)內(nèi)第一行之前即在初始化列表中完成了基類構(gòu)造函數(shù)的調(diào)用。為了方便從基類對(duì)象中直接選出派生類對(duì)象(基類對(duì)象包含派生類對(duì)象),使用第二個(gè)構(gòu)造函數(shù),直接為基類對(duì)象添加比分信息獲得。

三、應(yīng)用程序示例

應(yīng)用程序代碼:

#include <iostream>#include "tabtenn.h"using std::endl;using std::cout;int main(){  TableTennisPlayer player1("Tara","Boomdea",false);//創(chuàng)建基類對(duì)象  RatedPlayer rplayer1(1140,"Mallory","Duck",true);//創(chuàng)建派生類對(duì)象  player1.Name();  if(player1.HasTable())    cout << ": has a table./n";  else    cout << ": hasn't a table./n";  rplayer1.Name();  if(rplayer1.HasTable())    cout << ": has a table./n";  else    cout << ": hasn't a table./n";  //initialize RatedPlayer using TableTennisPlayer object  RatedPlayer rplayer2(1212,player1);  cout << "Name: ";  rplayer2.Name();  cout << ";Rating: " << rplayer2.Rating() << endl;  return 0;}usett.cpp

 player和rplayer分別代表基類對(duì)象和派生類對(duì)象。rplayer2和player1其實(shí)是同一個(gè)人,本來(lái)參加過(guò)比賽的成員就是從所有成員中挑選出來(lái)的。應(yīng)用該程序比較簡(jiǎn)單,這里就不過(guò)多描述了。

以上所述是小編給大家介紹的C++類繼承詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)武林網(wǎng)網(wǎng)站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 孝感市| 青州市| 民权县| 浦北县| 平定县| 观塘区| 西宁市| 惠来县| 沁源县| 宁乡县| 乌海市| 六盘水市| 宜春市| 阿坝| 开封市| 玛沁县| 五大连池市| 通州市| 光山县| 翁源县| 盐亭县| 雷波县| 新化县| 桂东县| 衡水市| 鹿泉市| 朝阳区| 德钦县| 诸城市| 德令哈市| 怀化市| 清水县| 开鲁县| 保康县| 滦平县| 瓦房店市| 长兴县| 阿拉善盟| 琼结县| 平邑县| 文安县|