這篇文章給大家分享的是有關C++中類繼承的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
類繼承示例
場景如下:現需要記錄乒乓球運動成員的信息,包括姓名和有無空余桌臺。其中有一部分成員參加過比賽,需要將這一部分單獨提出并記錄他們在比賽中的比分。因此,參加過比賽的成員所屬的類就是素有成員所屬類的派生類對象了。
類聲明:
#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 class
class 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);//默認構造函數
RatedPlayer(unsigned int r,const TableTennisPlayer& tp);//通過基類對象創建派生類對象構造函數
unsigned int Rating() const {return rating;}
void ResetRating (unsigned int r) {rating = r;}
};
#endif
tabtenn.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
//派生類構造函數必須調用基類構造函數
RatedPlayer::RatedPlayer(unsigned int r,const string& fn,const string& ln,bool ht):
TableTennisPlayer(fn,ln,ht)//派生類構造函數首先創建基類對象,使用初始化列表完成
{
rating = r;
}
RatedPlayer::RatedPlayer(unsigned int r,const TableTennisPlayer& tp):
TableTennisPlayer(tp),rating(r)
{}
tabtenn.cpp上述代碼將基類TableTennisPlayer和派生類RatedPlayer放在了一起。RatedPlayer類聲明中使用:public name_of_base_class 表示公有派生。在派生類的聲明中要添加自己的構造函數和額外的成員函數和方法。這里派生類構造函數中學問很大。
在創建派生類對象之前必須先創建基類對象,這是因為派生類的方法無法直接訪問基類的私有成員。那問題來了:當創建新的派生類對象時,會自動調用派生類構造函數。如何實現在調用派生類構造函數之前就調用基類構造函數創建基類對象呢?(好繞口)這里需要使用構造函數的特有語法——初始化列表。在程序指針指向派生類構造函數大括號內第一行之前即在初始化列表中完成了基類構造函數的調用。為了方便從基類對象中直接選出派生類對象(基類對象包含派生類對象),使用第二個構造函數,直接為基類對象添加比分信息獲得。
三、應用程序示例
應用程序代碼:
#include <iostream>
#include "tabtenn.h"
using std::endl;
using std::cout;
int main()
{
TableTennisPlayer player1("Tara","Boomdea",false);//創建基類對象
RatedPlayer rplayer1(1140,"Mallory","Duck",true);//創建派生類對象
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.cppplayer和rplayer分別代表基類對象和派生類對象。rplayer2和player1其實是同一個人,本來參加過比賽的成員就是從所有成員中挑選出來的。應用該程序比較簡單,這里就不過多描述了。
感謝各位的閱讀!關于“C++中類繼承的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。