亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

C++ 基礎(chǔ)教程

C++ 流程控制

C++ 函數(shù)

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

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

C++ 類 & 對(duì)象

C++ 指針

C++ 繼承

C++ STL 教程

C++ 參考手冊(cè)

C++ 繼承

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

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

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

為什么要使用繼承?

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

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

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

解決C ++中沒(méi)有繼承的問(wèn)題

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

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

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

解決C ++中的繼承問(wèn)題

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

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

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

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

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

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

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

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

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

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

由于MathsTeacher和Footballer是從Person派生的,因此可以從它們?cè)L問(wèn)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 << "我會(huì)走路。" << endl; }
        void talk() { cout << "我會(huì)說(shuō)話" << endl; }
};

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

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

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

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

     return 0;
}

輸出結(jié)果

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

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

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

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

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

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

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

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

繼承中的訪問(wèn)說(shuō)明符

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

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

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

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

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

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

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

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

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