C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

C++ 數(shù)組 & 字符串

C++ 數(shù)據(jù)結(jié)構(gòu)

C++ 類 & 對象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊

C++ 繼承

在本文中,您將學(xué)習(xí)有關(guān)C ++中繼承的所有知識。更具體地說,繼承是什么以及通過示例實(shí)現(xiàn)繼承的不同方法。

繼承是C ++中面向?qū)ο缶幊痰闹饕δ苤?。它允許用戶從現(xiàn)有的類(基類)創(chuàng)建一個新的(派生類)。

派生類繼承了基類的所有功能,并且可以擁有自己的其他功能。

為什么要使用繼承?

假設(shè)您在游戲中需要三個角色-一個數(shù)學(xué)老師(Maths teacher),一個足球運(yùn)動員(Footballer)和一個商人(Businessman)。

由于所有角色都是人,因此他們可以走路和說話。但是,他們各自也有一些特殊技能。數(shù)學(xué)老師可以教數(shù)學(xué),足球運(yùn)動員可以踢足球,商人可以經(jīng)營企業(yè)。

您可以單獨(dú)創(chuàng)建三個可以走路,說話和執(zhí)行其特殊技能的類,如下圖所示。

解決C ++中沒有繼承的問題

在每個類中,您將為每個角色復(fù)制相同的Walk(走路)和說話(Talk)代碼。

如果要添加新功能-eat(吃飯),則需要為每個字符實(shí)現(xiàn)相同的代碼。這很容易導(dǎo)致錯誤(復(fù)制時)和重復(fù)代碼。

如果我們擁有一個Person類,它具有基本的功能,例如說話,走路,吃飯,睡覺,并根據(jù)我們的角色向這些功能添加特殊技能,那就容易得多。這是使用繼承完成的。

解決C ++中的繼承問題

使用繼承,現(xiàn)在您不必為每個類實(shí)現(xiàn)相同的代碼。您只需要繼承它們即可。

因此,對于數(shù)學(xué)老師(派生類),您可以繼承Person(基類)的所有功能并添加新功能TeachMaths(教數(shù)學(xué))。同樣,對于足球運(yùn)動員,您繼承了Person的所有功能并添加了新功能PlayFootball(踢足球)等。

這使您的代碼更簡潔,易于理解和可擴(kuò)展。

重要的是要記?。?/strong>當(dāng)使用繼承時,每個派生類都應(yīng)該滿足條件,不管它是否是基類。在上面的實(shí)例中,數(shù)學(xué)老師是一個人,足球運(yùn)動員是一個人。你不可能擁有:商人就是企業(yè)

C ++編程中繼承的實(shí)現(xiàn)

class Person 
{
  ... .. ...
};

class MathsTeacher : public Person 
{
  ... .. ...
};

class Footballer : public Person
{
  .... .. ...
};

在上面的示例中,Person類是基類,而MathsTeacher和Footballer類則是從Person派生出來的。

派生的類與類的聲明一起出現(xiàn),后跟冒號,關(guān)鍵字public和派生該類的基類名稱。

由于MathsTeacher和Footballer是從Person派生的,因此可以從它們訪問Person的所有成員數(shù)據(jù)和成員函數(shù)。

示例:C ++編程中的繼承

使用繼承概念創(chuàng)建游戲角色。

#include <iostream>
using namespace std;

class Person
{
     public:
        string profession;
        int age;

        Person(): profession("unemployed"), age(16) { }
        void display()
        {
             cout << "我的職業(yè)是: " << profession << endl;
             cout << "我的年齡是: " << age << endl;
             walk();
             talk();
        }
        void walk() { cout << "我會走路。" << endl; }
        void talk() { cout << "我會說話" << endl; }
};

// MathsTeacher類派生自基類Person。
class MathsTeacher : public Person
{
    public:
       void teachMaths() { cout << "我會教數(shù)學(xué)。" << endl; }
};

// Footballer類派生自基類Person。
class Footballer : public Person
{
    public:
       void playFootball() { cout << "我會踢足球。" << endl; }
};

int main()
{
     MathsTeacher teacher;
     teacher.profession = "老師";
     teacher.age = 23;
     teacher.display();
     teacher.teachMaths();

     Footballer footballer;
     footballer.profession = "運(yùn)動員";
     footballer.age = 19;
     footballer.display();
     footballer.playFootball();

     return 0;
}

輸出結(jié)果

我的職業(yè)是: 老師
我的年齡是: 23
我會走路。
我會說話
我會教數(shù)學(xué)。
我的職業(yè)是: 運(yùn)動員
我的年齡是: 19
我會走路。
我會說話
我會踢足球。

在此程序中,Person是基類,而MathsTeacher和Footballer則從基類Person派生出來的。

Person類具有兩個數(shù)據(jù)成員- profession和age。它還具有兩個成員函數(shù)- walk()和talk()。

既MathsTeacher和Footballer可以訪問Person的所有的數(shù)據(jù)成員和成員函數(shù)。

但是,MathsTeacher和Footballer也分別具有自己的成員函數(shù):teachMaths()和playFootball()。這些函數(shù)只能由自己的類訪問。

在main()函數(shù)中,創(chuàng)建了一個新MathsTeacher teacher對象。

因?yàn)?,它可以訪問Person的數(shù)據(jù)成員,因此可以設(shè)置teacher的profession(職業(yè))和age(年齡)。使用Person類中定義的display()函數(shù)顯示此數(shù)據(jù)。 同樣,在MathsTeacher類中定義了teachingMaths()函數(shù)。

同樣,還將創(chuàng)建一個新Footballer footballer對象。它也可以訪問Person的數(shù)據(jù)成員,也可以通過調(diào)用display()函數(shù)來顯示。然后只有足球運(yùn)動員(footballer)才能訪問的playFootball()函數(shù)。

繼承中的訪問說明符

從基類創(chuàng)建派生類時,可以使用不同的訪問說明符來繼承基類的數(shù)據(jù)成員。

這些可以是public, protected 或 private.。

在上面的實(shí)例中,基類Person被MathsTeacher和football公開地繼承了。

了解有關(guān)C ++中的公共繼承,保護(hù)繼承和私有繼承的更多信息。

繼承中的成員函數(shù)重寫

假設(shè)基類和派生類的成員函數(shù)具有相同的名稱和參數(shù)。

如果創(chuàng)建派生類的對象并嘗試訪問該成員函數(shù),則只能調(diào)用派生類中的成員函數(shù)。

派生類的成員函數(shù)將覆蓋基類的成員函數(shù)。

了解有關(guān)C ++中的函數(shù)重寫的更多信息。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清