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

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

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

一、前言

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

二、類繼承示例

場(chǎng)景如下:現(xiàn)需要記錄乒乓球運(yùn)動(dòng)成員的信息,包括姓名和有無空余桌臺(tái)。其中有一部分成員參加過比賽,需要將這一部分單獨(dú)提出并記錄他們?cè)诒荣愔械谋确?。因此,參加過比賽的成員所屬的類就是素有成員所屬類的派生類對(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 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);//默認(rèn)構(gòu)造函數(shù)
  RatedPlayer(unsigned int r,const TableTennisPlayer& tp);//通過基類對(duì)象創(chuàng)建派生類對(duì)象構(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)建基類對(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é)問很大。

在創(chuàng)建派生類對(duì)象之前必須先創(chuàng)建基類對(duì)象,這是因?yàn)榕缮惖姆椒o法直接訪問基類的私有成員。那問題來了:當(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ù)的特有語法——初始化列表。在程序指針指向派生類構(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è)人,本來參加過比賽的成員就是從所有成員中挑選出來的。應(yīng)用該程序比較簡單,這里就不過多描述了。

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

相關(guān)文章

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

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

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

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

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

    C++進(jìn)化后的const變量實(shí)例探究

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論

介休市| 延吉市| 巴塘县| 班戈县| 夹江县| 榆社县| 锡林郭勒盟| 武安市| 华池县| 水富县| 马鞍山市| 永年县| 大荔县| 中江县| 德州市| 龙口市| 平顺县| 哈密市| 凤山县| 绿春县| 山东省| 德化县| 安多县| 清苑县| 洛隆县| 交口县| 博白县| 固原市| 霍州市| 昌宁县| 漠河县| 全南县| 白朗县| 额尔古纳市| 浦北县| 南川市| 新宁县| 克什克腾旗| 遂溪县| 四会市| 双流县|