<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # [19] 繼承 — 基礎 ## FAQs in section [19]: * [19.1] 對于C++,繼承是否重要? * [19.2] 何時該使用繼承? * [19.3] 在C++中如何表達繼承? * [19.4] 將一個派生類型的指針轉換成它的基類型可以嗎? * [19.5] `public:`, `private:`和 `protected:`有什么不同? * [19.6] 為什么派生類不能訪問基類的`private:`成員? * [19.7] 如何才能在改變類的內在部分時,保護其派生類不被破壞? ## 19.1 對于C++,繼承是否重要? 是。 繼承是面向對象編程和抽象數據類型(ADT)編程的區分標志 ## 19.2 何時該使用繼承? 作為一種特化的機制。 人們抽象事物有兩種角度:“部分”和“種類”。Ford?Taurus是一種(is-a-kind-of-a)汽車,并且?Ford?Taurus?有(has-a)引擎,輪胎等。“部分”層次已經隨著ADT風格而成為軟件系統的一部分。繼承則增加了另一種分解的角度。 ## 19.3 在C++中如何表達繼承? 通過 `:public`? 語法: ``` ?class?Car?:?public?Vehicle?{ ?public: ???//?... ?}; ``` 我們有幾種方式聲明以上的關系: * `Car` 是?“一種”("a?kind?of?a")`Vehicle(交通工具)` * `Car` 起源于("derived?from")`Vehicle` * `Car` 是一種特殊化的("a?specialized") `Vehicle` * `Car` 是`Vehicle`的一個子類("subclass") * `Car` 是`Vehicle`的一個派生類(“derived class”) * `Vehicle` 是`Car`的基類("base?class") * `Vehicle` 是`Car` 的超類("superclass")(這在C++ 社群中不常用) (注意:?本?FAQ?的論述僅與公有繼承(`public` inheritance)有關;?私有和保護繼承并不相同) ## 19.4 將一個派生類型的指針轉換成它的基類型可以嗎? 可以。 派生類對象是基類對象的一種。因此從派生類指針到基類指針的轉換是非常安全的,并且始終會發生。例如,如果有一個?car?類型的指針,而實際上指向了?vehicle,這種從?`Car*`?到?`Vehicle*` 的轉換是非常安全的和常規的: ``` ?void?f(Vehicle*?v); ?void?g(Car*?c)?{?f(c);?}??// 非常安全;?不用轉換 ``` (注意:?本?FAQ?的論述僅與公有繼承(`public` inheritance)有關;?私有和保護繼承并不相同) ## 19.5 `public:`, `private:`和 `protected:`有什么不同? * 在類的`private:`節中聲明的成員(無論數據成員或是成員函數)僅僅能被類的成員函數和友元訪問。 * 在類的`protected:` 節中聲明的成員(無論數據成員或是成員函數)僅僅能被類的成員函數,友元以及子類的成員函數和友元訪問。 * 在類的`public:`節中聲明的成員(無論數據成員或是成員函數)能被任何人訪問。 ## 19.6 為什么派生類不能訪問基類的`private:`成員? 為了使派生類在將來基類改變時不受影響。 派生類無法訪問基類的私有成員。這樣在對基類私有成員作任何改變時,就有效地鎖定了派生類。 ## 19.7 如何才能在改變類的內在部分時,保護其派生類不被破壞? 類有兩套截然不同的接口,它們分別面向兩個截然不同的客戶: * 有為無關類服務的`public:` 接口 * 有為派生類服務的`protected:`?接口 除非你期望你的所有子類全部由你自己的團隊建立,否則你應該考慮讓基類部分成為`private:`,并且用?`protected:`來內聯供子類訪問基類私有數據的訪問函數。使用這種方法,私有部分可以被改變,但是派生類的代碼不會被破壞(除非你改變了`protected`的訪問函數)。
                  <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>

                              哎呀哎呀视频在线观看