<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/multilevel-multiple-inheritance](https://www.programiz.com/cpp-programming/multilevel-multiple-inheritance) #### 在本文中,您將學習 C++ 編程中的不同繼承模型:帶有示例的多繼承,多層和分層繼承。 [繼承](/cpp-programming/inheritance "C++ Inheritance")是面向對象編程語言的核心功能之一。 它允許軟件開發人員從現有的類派生一個新的類。 派生類繼承基類(現有類)的功能。 C++ 編程中有多種繼承模型。 * * * ## C++ 多層繼承 在 C++ 編程中,不僅可以從基類派生一個類,還可以從派生類派生一個類。 這種繼承形式稱為多級繼承。 ```cpp class A { ... .. ... }; class B: public A { ... .. ... }; class C: public B { ... ... ... }; ``` 這里,類別`B`從基礎類別`A`派生,類別`C`從派生類別`B`派生。 * * * ## 示例 1:C++ 多級繼承 ```cpp #include <iostream> using namespace std; class A { public: void display() { cout<<"Base class content."; } }; class B : public A { }; class C : public B { }; int main() { C obj; obj.display(); return 0; } ``` **輸出** ```cpp Base class content. ``` 在此程序中,類別`C`源自類別`B`(源自基礎類別`A`)。 在`main()`函數中定義了`C`類的`obj`對象。 當調用`display()`函數時,將執行`A`中的`display()`。 這是因為在`C`類和`B`類中沒有`display()`函數。 編譯器首先在類`C`中尋找`display()`函數。 由于該函數不存在,因此將在`B`類中查找該函數(因為`C`源自`B`)。 該函數在`B`類中也不存在,因此編譯器在`A`類中查找它(因為`B`是從`A`派生的)。 如果`C`中存在`display()`函數,則編譯器將覆蓋類`A`的`display()`(因為[成員函數將覆蓋](/cpp-programming/function-overriding "Function Overriding in C++ programming"))。 * * * ## C++ 多重繼承 在 C++ 編程中,一個類可以從多個父類派生。 例如:類`Bat`源自基類`Mammal`和`WingedAnimal`。 這很有意義,因為蝙蝠既是哺乳動物又是有翅膀的動物。 ![C++ Multiple Inheritance Example](https://img.kancloud.cn/54/66/5466140b7a0eb9df26ec25bae2e7311a_350x183.png) ## 示例 2:C++ 編程中的多重繼承 ```cpp #include <iostream> using namespace std; class Mammal { public: Mammal() { cout << "Mammals can give direct birth." << endl; } }; class WingedAnimal { public: WingedAnimal() { cout << "Winged animal can flap." << endl; } }; class Bat: public Mammal, public WingedAnimal { }; int main() { Bat b1; return 0; } ``` **輸出** ```cpp Mammals can give direct birth. Winged animal can flap. ``` * * * ### 多重繼承中的歧義 多重繼承最明顯的問題發生在函數覆蓋期間。 假設兩個基類具有相同的函數,但在派生類中未覆蓋該函數。 如果嘗試使用派生類的對象調用該函數,則編譯器將顯示錯誤。 這是因為編譯器不知道要調用哪個函數。 例如, ```cpp class base1 { public: void someFunction( ) { .... ... .... } }; class base2 { void someFunction( ) { .... ... .... } }; class derived : public base1, public base2 { }; int main() { derived obj; obj.someFunction() // Error! } ``` 可以通過使用范圍解析函數指定將`base1`或`base2`分類的函數來解決此問題。 ```cpp int main() { obj.base1::someFunction( ); // Function of base1 class is called obj.base2::someFunction(); // Function of base2 class is called. } ``` * * * ## C++ 分層繼承 如果從基類繼承多個類,則稱為[分層繼承](http://www.programtopia.net/cplusplus/docs/hierarchical-inheritance-c-programming?utm_source=programiz&utm_campaign=display)。 在分層繼承中,子類中共有的所有函數都包括在基類中。 例如:物理,化學,生物學均來自科學類。 * * * ### 分層繼承的語法 ```cpp class base_class { ... .. ... } class first_derived_class: public base_class { ... .. ... } class second_derived_class: public base_class { ... .. ... } class third_derived_class: public base_class { ... .. ... } ```
                  <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>

                              哎呀哎呀视频在线观看