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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 一.概述 1. **重載** 在不同類型上做類似運算而又用相同名字的情況稱為重載。 2. **重載解析** C++用一種函數命名技術可以準確判斷應該調用哪個重載函數。 3. **重載依據** 返回類型、形參類型、形參個數、形參次序。 >[danger] 注意 > >1. 返回類型不能作為單獨重載解析的依據。 >2. 不能用typedef定義的類型名來區分重載函數聲明中的參數。 4. **匹配順序(簡版)** 類型完全一致 -> 自動類型轉換 -> 用戶定義的轉換。 ```c++ //若有函數原型 void fun(int); void fun(double); //調用函數 fun(1); //匹配void fun(int); fun(1.0); //匹配void fun(double); fun('a'); //匹配void fun(int); fun(3.14f); //匹配void fun(double); ``` ## [$]二.實參匹配順序 1. 精確匹配: + 類型完全相同。 + 左值到右值的轉換。 + 數組轉換成指針以及函數轉換成函數指針。 2. 向參數添加 `const` 限定符或者從實參中刪除 `const` 限定符。 3. **常量轉換** 指向變量的指針或引用轉換成指向常量的指針或引用。 4. **類型提升** 整型提升和浮點提升。 5. **其他的算術轉換、指針轉換、布爾轉換** 等隱式轉換。 6. 用戶定義的轉換 ## [$]三.函數重載與域 >[info]重載函數集合中的全部函數都應在同一個域中聲明。 1. 一個聲明為局部的函數將隱藏而不是重載一個全局域中聲明的函數。 ```c++ void print(const char*); void print(double d); int MyFunc() { void print(int i); print("Hello World");//錯了!void print(const char*);聲明被隱藏了 return 0; } ``` 2. 兩個不同類的成員函數不能相互重載,為不同名字空間成員的函數不能相互重載。 3. 用 `using` 關鍵字聲明函數時會把所有的重載函數引入作用域。 4. 用 `using` 關鍵字引入一個同名的函數時,相當于重載了這個同名函數。 >[danger]如果 `using` 聲明向一個域中引入了一個函數,而該域中已經有同名函數且具有相同的參數表,則該 using 聲明就是錯誤的。 ```c++ namespace demo { void print(const char*); void print(double); void print(int); } void print(int,int); using demo::print; int MyFunc() { print(2020);//OK,demo::print(int) print(2020,2019);//OK,print(int,int) return 0; } ``` ## [$]四.函數重載解析 ```c++ //演示代碼 void print(const char* string); void print(double d); void print(int i); void print(int i,int j); int main() { print(2020);//<-探討該語句的解析過程 return 0; } ``` 1. 確定函數調用考慮的重載函數的集合,確定函數調用中實參表的屬性。 >`void print(const char* string);` >`void print(double d);` >`void print(int i);` >`void print(int i,int j);` 2. 從重載函數集合中選擇函數,該函數可以在(給出實參個數和類型的)情況下用調用中指定的實參進行調用。 + **可行函數** 選出來的函數。 + **參數夠** 可行函數的參數個數與調用的實參表中的參數數目相同,或者可行函數的參數個數多一些,但是每個多出來的參數都要有默認值。 + **可轉換** 對于每個可行函數,調用中的實參與該函數的對應的參數類型之間必須可以進行隱式類型轉換。 + **無匹配情況** 沒有函數與調用匹配。這個調用就是錯的。 >`void print(int i);` **可行** **精確匹配** >`void print(double d);` **可行** **轉換后匹配** 3. 選擇與調用最匹配的函數。 + 從實參類型到相應可行函數參數所用的轉換都被劃分等級。 + **最佳匹配函數** 在實參的轉換上不能比別的同名函數差,而且某些實參的轉換要比別的同名函數好。 >`void print(int i);` **最佳匹配函數√** 精確匹配優于轉換后匹配 >如果還沒找到,那么你調用的東西是二義的。
                  <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>

                              哎呀哎呀视频在线观看