<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # C++ 繼承 > 原文: [https://www.programiz.com/cpp-programming/inheritance](https://www.programiz.com/cpp-programming/inheritance) #### 在本文中,您將學習有關 C++ 中繼承的所有知識。 更具體地說,繼承是什么以及通過示例實現繼承的不同方法。 繼承是 C++ 中面向對象編程的主要功能之一。 它允許用戶從現有的類(基類)創建一個新的[類](/cpp-programming/object-class "C++ class")(派生類)。 派生類繼承了基類的所有功能,并且可以擁有自己的其他功能。 * * * ## 為什么要使用繼承? 假設您在游戲中需要三個角色-**數學老師**,**足球運動員**和**商人**。 由于所有角色都是人,因此他們可以走路和說話。 但是,他們也有一些特殊技能。 數學老師可以**教數學**,足球運動員可以**踢足球**,商人可以**經營企業**。 您可以單獨創建三個可以走路,說話和執行其特殊技能的類,如下圖所示。 ![Solving a problem without inheritance in C++](https://img.kancloud.cn/ea/98/ea980e6d017b7f7e828699f4ca9ca0a9_740x196.png "Without inheritance") 在每個類中,您將為每個角色復制相同的步行和交談代碼。 如果要添加新函數`eat`,則需要為每個字符實現相同的代碼。 這很容易導致出錯(復制時)和重復代碼。 如果我們有一個`Person`類,它具有基本的功能,例如說話,走路,吃飯,睡覺,并根據我們的角色向這些功能添加特殊技能,那就容易得多。 這是使用繼承完成的。 ![Solving a problem with inheritance in C++](https://img.kancloud.cn/e5/ff/e5ff283652b3246d9b45fc71110aac39_740x333.png "With inheritance") 使用繼承,現在您不必為每個類實現相同的代碼。 您只需要**繼承它們即可**。 因此,對于數學老師(派生類),您可以繼承`Person`(基類)的所有函數并添加新函數`TeachMaths`。 同樣,對于足球運動員,您繼承了`Person`的所有函數并添加了新函數`PlayFootball`,依此類推。 這使您的代碼更簡潔,易于理解和可擴展。 **重要的是要記住**:在處理繼承時,每個派生類都應滿足“**是**”基類的條件。 在上面的示例中,數學老師**是**人,足球先生**是**人。 您不能擁有:商人**是**企業。 * * * ## C++ 編程中繼承的實現 ```cpp class Person { ... .. ... }; class MathsTeacher : public Person { ... .. ... }; class Footballer : public Person { .... .. ... }; ``` 在以上示例中,類別`Person`是基類,類別`MathsTeacher`和`Footballer`是從`Person`派生的。 派生的類與類的聲明一起顯示,后跟冒號,關鍵字`public`和派生該類的基類的名稱。 由于`MathsTeacher`和`Footballer`源自`Person`,因此可以從中訪問`Person`的所有數據成員和成員函數。 * * * ## 示例:C++ 編程中的繼承 使用繼承概念創建游戲角色。 ```cpp #include <iostream> using namespace std; class Person { public: string profession; int age; Person(): profession("unemployed"), age(16) { } void display() { cout << "My profession is: " << profession << endl; cout << "My age is: " << age << endl; walk(); talk(); } void walk() { cout << "I can walk." << endl; } void talk() { cout << "I can talk." << endl; } }; // MathsTeacher class is derived from base class Person. class MathsTeacher : public Person { public: void teachMaths() { cout << "I can teach Maths." << endl; } }; // Footballer class is derived from base class Person. class Footballer : public Person { public: void playFootball() { cout << "I can play Football." << endl; } }; int main() { MathsTeacher teacher; teacher.profession = "Teacher"; teacher.age = 23; teacher.display(); teacher.teachMaths(); Footballer footballer; footballer.profession = "Footballer"; footballer.age = 19; footballer.display(); footballer.playFootball(); return 0; } ``` **輸出** ```cpp My profession is: Teacher My age is: 23 I can walk. I can talk. I can teach Maths. My profession is: Footballer My age is: 19 I can walk. I can talk. I can play Football. ``` 在此程序中,`Person`是基類,而`MathsTeacher`和`Footballer`是從`Person`派生的。 `Person`類具有兩個數據成員 - `profession`和`age`。 它還具有兩個成員函數-`walk()`和`talk()`。 `MathsTeacher`和`Footballer`都可以訪問`Person`的所有數據成員和成員函數。 但是,`MathsTeacher`和`Footballer`也具有自己的成員函數:分別為`teachMaths()`和`playFootball()`。 這些函數只能由自己的類訪問。 在`main()`函數中,創建了一個新的`MathsTeacher`對象`Teacher`。 由于可以訪問`Person`的數據成員,因此設置了`Teacher`的`profession`和`age`。 使用在`Person`類中定義的`display()`函數顯示此數據。 此外,將調用`MathsTeacher`類中定義的`teachMaths()`函數。 同樣,還將創建一個新的`Footballer`對象`footballer`。 它也可以訪問`Person`的數據成員,這可以通過調用`display()`函數來顯示。 然后,只有足球運動員才能使用的`playFootball()`函數被調用。 * * * ### 繼承中的訪問說明符 從基類創建派生類時,可以使用不同的訪問說明符來繼承基類的數據成員。 這些可以是公共的,受保護的或私有的。 在以上示例中,基類`Person`已由`MathsTeacher`和`Footballer`公開繼承。 了解有關 C++ 中的[公共,保護和私有繼承的更多信息](/cpp-programming/public-protected-private-inheritance "Public, Protected and Private inheritance in C++")。 * * * ### 繼承中的成員函數覆蓋 假設基類和派生類的成員函數具有相同的名稱和參數。 如果創建派生類的對象并嘗試訪問該成員函數,則僅調用派生類中的成員函數。 派生類的成員函數將覆蓋基類的成員函數。 了解有關 C++ 中的[函數覆蓋的更多信息](/cpp-programming/function-overriding "C++ function overriding")。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看