亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、前言

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

二、類繼承示例

場(chǎng)景如下:現(xiàn)需要記錄乒乓球運(yùn)動(dòng)成員的信息,包括姓名和有無(wú)空余桌臺(tái)。其中有一部分成員參加過(guò)比賽,需要將這一部分單獨(dú)提出并記錄他們?cè)诒荣愔械谋确?。因此,參加過(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 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);//通過(guò)基類對(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é)問(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)站的支持!

相關(guān)文章

  • C/C++浮點(diǎn)數(shù)使用的兩個(gè)注意事項(xiàng)詳解

    C/C++浮點(diǎn)數(shù)使用的兩個(gè)注意事項(xiàng)詳解

    浮點(diǎn)數(shù)都是有符號(hào)的,沒(méi)有 unsigned 浮點(diǎn)數(shù),下面這篇文章主要給大家介紹了關(guān)于C/C++浮點(diǎn)數(shù)使用的兩個(gè)注意事項(xiàng),文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • C++超詳細(xì)講解操作符的重載

    C++超詳細(xì)講解操作符的重載

    C++預(yù)定義中的運(yùn)算符的操作對(duì)象只局限于基本的內(nèi)置數(shù)據(jù)類型,但是對(duì)于我們自定義的類型(類)是沒(méi)有辦法操作的。但是大多時(shí)候我們需要對(duì)我們定義的類型進(jìn)行類似的運(yùn)算,這個(gè)時(shí)候就需要我們對(duì)這么運(yùn)算符進(jìn)行重新定義,賦予其新的功能,以滿足自身的需求
    2022-06-06
  • C++中Semaphore內(nèi)核對(duì)象用法實(shí)例

    C++中Semaphore內(nèi)核對(duì)象用法實(shí)例

    這篇文章主要介紹了C++中Semaphore內(nèi)核對(duì)象用法實(shí)例,有助于深入了解信號(hào)量(Semaphore)的基本用法,需要的朋友可以參考下
    2014-10-10
  • C++基本組件之內(nèi)存池詳解

    C++基本組件之內(nèi)存池詳解

    這篇文章主要為大家詳細(xì)介紹了C++中的基本組件——內(nèi)存池的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定的幫助,需要的可以參考一下
    2023-03-03
  • C語(yǔ)言與java語(yǔ)言中關(guān)于二維數(shù)組的區(qū)別

    C語(yǔ)言與java語(yǔ)言中關(guān)于二維數(shù)組的區(qū)別

    這篇文章主要介紹了C語(yǔ)言與java語(yǔ)言中關(guān)于二維數(shù)組的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 一篇文章帶你入門(mén)C語(yǔ)言:操作符

    一篇文章帶你入門(mén)C語(yǔ)言:操作符

    這篇文章主要介紹了C語(yǔ)言中的運(yùn)算符,文中講解非常詳細(xì),適合初學(xué)小白進(jìn)行學(xué)習(xí),想入門(mén)C語(yǔ)言的朋友不妨了解下,希望能給你帶來(lái)幫助
    2021-08-08
  • 淺析c與c++中struct的區(qū)別

    淺析c與c++中struct的區(qū)別

    c與c++中struct的區(qū)別你是否了解,下面小編就詳細(xì)的為大家介紹一下
    2013-07-07
  • C++基于CreateToolhelp32Snapshot獲取系統(tǒng)進(jìn)程實(shí)例

    C++基于CreateToolhelp32Snapshot獲取系統(tǒng)進(jìn)程實(shí)例

    這篇文章主要介紹了C++基于CreateToolhelp32Snapshot獲取系統(tǒng)進(jìn)程實(shí)例,是Windows應(yīng)用程序設(shè)計(jì)中非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • C/C++合并兩個(gè)升序鏈表的方式

    C/C++合并兩個(gè)升序鏈表的方式

    這篇文章主要介紹了C/C++合并兩個(gè)升序鏈表的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++實(shí)現(xiàn)LeetCode(123.買(mǎi)股票的最佳時(shí)間之三)

    C++實(shí)現(xiàn)LeetCode(123.買(mǎi)股票的最佳時(shí)間之三)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(123.買(mǎi)股票的最佳時(shí)間之三),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論