<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之旅 廣告
                在結構體定義中聲明函數,稍后再定義函數,這看起來是一件麻煩事。任何時候你要改變一個函數的接口,都需要在兩個地方做修改,即使只是做了很小的變動,比如把一個參數聲明為const。 盡管如此,這種麻煩是有理由的,我們能夠把結構體定義和函數分離到兩個文件中:頭文件包含著結構體定義,而實現文件包含著函數。 頭文件通常和實現文件同名,但后綴是.h而不是.cpp。對于我們一直看的例子,頭文件名為Time.h,它包含以下內容: ~~~ struct TIme { // 實例變量 int hour, minute; double second; //構造函數 Time (int hour, int min, double secs); Time (double secs); //修改器 void increment (double secs); //函數 void print () const; bool after (const Time& time2) const; Time add (const Time& t2) const; double convertToSeconds () const; }; ~~~ 請注意,我們并不需要在結構體定義中給每個函數名前面包含前綴Time::。編譯器知道我們聲明的函數是Time結構體的成員。 Time.cpp包含了成員函數的定義(為節省篇幅,我已經省去了函數體): ~~~ #include <iostream.h> #include "Time.h" Time::Time (int h, int m, double s) ... Time::Time (idouble secs) ... void Time::increment ( double secs) ... bool Time::after (const Time& time2) const ... Time Time::add (const Time& t2) const ... double Time::convertToSeconds () const ... ~~~ 在本例中,Time.cpp中的定義與Time.h中聲明的順序相同,這并非必要。 另一方面,有必要使用include語句將頭文件包含進來。這樣一來,當編譯器讀取函數定義時,它能足夠了解結構體,便于檢查代碼并捕獲錯誤。 最后,main.cpp包含了函數main,以及我們需要的非Time結構體的成員的函數(本例中沒有): ~~~ #include <iostream.h> #include "Time.h" void main() { Time currentTime (9, 14, 30.0); currentTime.increment (500.0); currentTime.print (); Time breadTime (3, 35, 0.0); Time doneTime = currentTime.add (breadTime); doneTime.print (); if (doneTime.after (currentTime)) { cout << "The bread will be donw after it starts." <<endl; } } ~~~ 再一次,main.cpp必須包含頭文件。 把如此小的程序分成三部分的好處也許并不明顯。其實,大部分優點會在我們處理更大的程序時體現出來: **重用**:當你寫了個類似于Time的結構,你也許會發現它在多個程序中都有用。通過把Time的定義從main.cpp中分離出來,在其它程序中包含Time結構會變得容易。 **管理交互**:隨著系統變大,組件之間的交互數量快速增加,變得難以管理。通過從使用它們的程序中分離出Time.cpp這樣的模塊,可以最小化這些交互。 **獨立編譯**:單獨的文件可以被獨立編譯,之后鏈接到一個程序中。其中的細節依賴于你的編程環境。隨著程序規模變大,獨立編譯能節省很多時間,由于你通常每次只需要編譯少數一些文件。 對于類似本書這樣的小程序來說,分割程序并沒有多大好處。但你最好知道這個特性,特別是它解釋了我們寫的第一個程序中出現的一個語句: ~~~ #include <iostream.h> ~~~ iostream.h是一個包含著cin和cout聲明以及操作它們的函數的頭文件,當編譯程序時,你需要該頭文件中的信息。 這些函數的實現存儲在一個庫中,有時候被稱為"標準庫",它能自動鏈接到你的程序中。好處在于當你編譯程序時,你不需要每次都重新編譯庫。大多數情況下,庫不會改變,因此沒有理由重新編譯它。
                  <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>

                              哎呀哎呀视频在线观看