最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年04月19日 17:06:54   作者:沒落騎士  
這篇文章主要介紹了C++類繼承,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、前言

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

二、類繼承示例

場景如下:現(xiàn)需要記錄乒乓球運動成員的信息,包括姓名和有無空余桌臺。其中有一部分成員參加過比賽,需要將這一部分單獨提出并記錄他們在比賽中的比分。因此,參加過比賽的成員所屬的類就是素有成員所屬類的派生類對象了。

類聲明:

#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);//默認構(gòu)造函數(shù)
  RatedPlayer(unsigned int r,const TableTennisPlayer& tp);//通過基類對象創(chuàng)建派生類對象構(gòu)造函數(shù)
  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
//派生類構(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)建基類對象,使用初始化列表完成
{
  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é)問很大。

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

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

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

#include <iostream>
#include "tabtenn.h"

using std::endl;
using std::cout;

int main()
{
  TableTennisPlayer player1("Tara","Boomdea",false);//創(chuàng)建基類對象
  RatedPlayer rplayer1(1140,"Mallory","Duck",true);//創(chuàng)建派生類對象
  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分別代表基類對象和派生類對象。rplayer2和player1其實是同一個人,本來參加過比賽的成員就是從所有成員中挑選出來的。應(yīng)用該程序比較簡單,這里就不過多描述了。

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

相關(guān)文章

  • 一文帶你認識C語言的聯(lián)合體和枚舉

    一文帶你認識C語言的聯(lián)合體和枚舉

    聯(lián)合體(Union)是一種特殊的數(shù)據(jù)結(jié)構(gòu),允許在同一內(nèi)存地址上存儲不同類型的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于C語言聯(lián)合體和枚舉的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • 詳解Matlab中自帶的Java操作合集

    詳解Matlab中自帶的Java操作合集

    其實Matlab中也有一些自帶的Java操作,例如:獲取鼠標在全屏位置、獲取當(dāng)前剪切板內(nèi)容、獲取鼠標處像素顏色等,本文總結(jié)了七個這樣的操作,感興趣的可以了解一下
    2022-03-03
  • C++進化后的const變量實例探究

    C++進化后的const變量實例探究

    這篇文章主要為大家介紹了C++進化后的const變量實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • c++數(shù)組排序的5種方法實例代碼

    c++數(shù)組排序的5種方法實例代碼

    大家還在為大小排序而煩惱嗎?今天讓我我大家解決這個問題吧,下面這篇文章主要給大家介紹了關(guān)于c++數(shù)組排序的5種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    C++ 中的INT_MAX,INT_MIN數(shù)值大小操作

    這篇文章主要介紹了C++ 中的INT_MAX,INT_MIN數(shù)值大小操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • C語言之如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾

    C語言之如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾

    這篇文章主要介紹了C語言如何用isspace()和ungetc()實現(xiàn)前導(dǎo)空白字符過濾問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 詳解C語言的結(jié)構(gòu)體中成員變量偏移問題

    詳解C語言的結(jié)構(gòu)體中成員變量偏移問題

    這篇文章主要介紹了C語言的結(jié)構(gòu)體中成員變量偏移問題,以講解如何編寫宏來對成員變量進行修改為主,需要的朋友可以參考下
    2016-04-04
  • 如何實現(xiàn)一定概率選中某一個字母

    如何實現(xiàn)一定概率選中某一個字母

    本篇文章是對如何實現(xiàn)一定概率選中某一個字母的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言中如何獲取函數(shù)內(nèi)成員的值你知道嗎

    C語言中如何獲取函數(shù)內(nèi)成員的值你知道嗎

    這篇文章主要為大家詳細介紹了C語言中如何獲取函數(shù)內(nèi)成員的值的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++中string轉(zhuǎn)換為char*類型返回后亂碼問題解決

    C++中string轉(zhuǎn)換為char*類型返回后亂碼問題解決

    這篇文章主要介紹了C++中string轉(zhuǎn)換為char*類型返回后亂碼問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

涟源市| 北票市| 武强县| 新干县| 长阳| 获嘉县| 和田市| 长治县| 游戏| 阜阳市| 岳阳市| 蕲春县| 兴山县| 永兴县| 禹州市| 特克斯县| 南召县| 张家川| 渭源县| 晋宁县| 淮北市| 原平市| 连州市| 武平县| 甘孜县| 盐池县| 苍溪县| 且末县| 灌阳县| 新龙县| 米泉市| 元氏县| 阿巴嘎旗| 池州市| 大冶市| 兴和县| 陆丰市| 丰宁| 广宁县| 岫岩| 卓尼县|