什麼是c++中的函數重載?
兩個或多個函數可以有相同的名稱但不同的形參;這樣的函數在c++中稱為函數重載。c++特性中的函數重載用於提高代碼的可讀性。使用它是為了讓程序員不必記住各種函數名。如果任何類有多個函數,其不同的形參具有相同的名稱,則稱它們是重載的。如果必須使用不同數量或類型的參數執行單個操作,則需要重載函數。
如果我說參數列表,它意味著參數的數據類型和序列。例如,函數myfunction (int a, double b)的形參列表為(int, double),這與函數myfunction (double a, int b)的形參列表(double, int)不同。函數重載是一種編譯時多態性。因為我們已經知道了什麼是參數列表,所以讓我們看看重載的規則:我們可以在相同的作用域中有以下函數。
Sum (int a, int b) Sum (int a, int b, int c)
記住這條規則最簡單的方法是,參數應該滿足以下條件中的任意一個或多個:
- 它們應該有不同的類型
- 它們應該有不同的數字
- 它們應該有不同的參數序列。
簡單地說,
c++中的函數重載可以具有相同的名稱但不同的參數
- 什麼是c++中的函數重載?
- c++示例中的函數重載
- 為什麼在c++中使用函數重載?
- c++中的函數重載規則
- c++中函數重載和重寫的區別是什麼?
- 函數重載的原因
- c++中函數重載的優點
- c++中函數重載的缺點
- 函數重載和運算符重載的區別
- 函數重載與函數重寫的區別
- c++ faq中的函數重載
- 結論
c++有許多特性,其中最重要的特性之一是函數重載。它是一種具有多個同名函數的代碼,具有各種類型的參數列表。此參數列表包括參數的數據類型和參數的順序。
c++示例中的函數重載
示例1:
#include using namespace std;void SumNum(int A, int B);void SumNum(int A, int B, int C);void SumNum(int A, int B, int C, int D);int main() {SumNum(1,2);SumNum(1、2、3);SumNum(1、2、3、4);返回0;} void SumNum(int A, int B) {cout<< endl << " SumNum is: "<< A+B;} void SumNum(int A, int B, int C) {cout<< endl << " SumNum is: "<< A+B+C; } void SumNum(int A, int B, int C, int D) { cout<< endl << "SUMNUM is : "<< A+B+C+D; }
輸出:SumNum是3 SumNum是6 SumNum是10
示例2:
#include using namespace std;類加法{public: int sum(int a,int b){返回a+b;} int sum(int a,int b, int c){返回a+b+c;}};int main(void){添加對象;cout < < obj。總和(20、15)< < endl;cout < < obj。總和(81、100、10);返回0; }
輸出:35 191
為什麼在c++中使用函數重載?
函數重載類似於多態性,它幫助我們使用相同的函數名獲得不同的行為。c++中的函數重載用於代碼的可重用性和節省內存。
c++中的函數重載規則
不同的參數或三種不同的條件:
1.這些函數具有不同的參數類型
Sum (int a, int b) Sum (double a, double b)
2.這些函數有不同數量的參數
Sum (int a, int b) Sum (int a, int b, int c)
3.這些函數有不同的參數序列
Sum (int a, double b) Sum (double a, int b)
以上三種情況都是有效的超載情況。我們可以有任意數量的函數,但是記住參數列表必須是不同的。例如:
Int mul(Int, Int) double mul(Int, Int)
由於參數列表相同,所以不允許這樣做。即使它們的返回類型不同,它也是無效的。
c++中函數重載和重寫的區別是什麼?
函數重載 | 功能覆蓋 | |
定義 | 當一個類中的兩個或多個方法具有不同的參數但方法名相同時,這稱為函數重載。 | 當函數被重寫時,一個方法在父類中,另一個在子類中,但是它們具有相同的參數和方法名。 |
函數簽名 | 參數的數量或類型應該有所不同。 | 函數簽名不應該改變。 |
行為 | 定義幾個方法的行為。 | 更改過程的行為方式。 |
函數的範圍 | 他們屬於同一類別。 | 他們有一個明顯的範圍。 |
繼承 | 即使沒有繼承,這種情況也會發生。 | 隻有當一個類從另一個類繼承時才會發生這種情況 |
多態性 | 編譯時 | 運行時 |
技術 | 代碼的改進方法。 | 替換代碼的方法。 |
函數重載和歧義
c++編程語言提供了一個重載特性,允許重載名稱相同但參數不同的兩個或多個方法,以創建編譯時多態性。可以使用函數和運算符重載來實現它。操作符重載重載操作符以提供具有特定含義的用戶定義數據類型,而函數重載重載具有相同名稱但參數不同的兩個或多個函數。
該特性使對用戶定義類型使用內置操作符成為可能。操作符重載通過重新定義功能來滿足用戶需求,從而使代碼更容易理解。本文將詳細討論函數重載和操作符重載,以及如何在c++中應用它們。
使用重載思想,c++可以創建靈活且可理解的代碼。它支持以最少的更改數量向現有代碼添加不同的功能,從而最小化對重複代碼的需求。實際上,c++允許兩種基本類型的重載。
函數重載是c++的一個特性,它允許我們創建具有相同名稱但提供給它們的數據類型或參數數量不同的函數。由於這個功能,開發人員可以在相同的作用域中定義同名的函數。有名稱的函數也共享相同的行為,從而支持編譯時多態性。函數重載的一個好處是它使代碼更容易閱讀。
可以以任何方式使用參數來創建函數重載。參數的使用可能涉及特定的參數類型、參數計數或參數序列。因此,定義為calc (float x, int y)的函數與calc (int x, float y)不同,後者具有不同數據類型的單獨參數。
c++中函數重載的類型
c++-中有兩種類型的函數重載
- 編譯時重載-在編譯時重載中,函數使用不同的簽名重載。函數的簽名包括函數的返回類型、參數個數和參數類型。
- 運行時重載-運行時重載,使用不同數量的參數重載函數。
c++中函數重載的原因
- 類型轉換。
- 使用默認參數的函數。
- 帶有傳遞引用的函數。
1.類型轉換
計劃:
#include using namespace std;void函數(浮動);void函數(int);void函數(float x) {std::cout << " x的值是:" <
輸出:
這個例子顯示了一個錯誤“重載' function '的調用是模糊的”。根據我們的預測,函數(3.4)將調用第一個函數,函數(34)將調用第二個函數。但事實並非如此,因為在c++中,所有的浮點常量都不會被視為浮點數;相反,他們被視為雙重身份。如果將float變量替換為double變量,程序將正常工作。因此,我們稱其為從float到double的類型轉換錯誤。
2.帶有默認實參的函數
計劃:
#include using namespace std;void函數(int);無效的函數(int, int);void函數(int x) {std::cout << " x的值是:" <
輸出:
上麵的例子顯示了一個錯誤,說“重載的' fun(int) '的調用是模糊的”,這是因為函數(int y, int z=12)可以用兩種方式調用:
通過調用隻有一個參數的函數(它會自動取z = 12的值)
通過調用隻有兩個參數的函數。
當你調用function: function(12)時,我們會完全填充function(int)和function(int, int)的條件;因此,編譯器會陷入一種產生錯誤的歧義。
3.函數帶有一個傳遞引用
計劃:
#include using namespace std;void函數(int);void函數(int &);void函數(int a) {std::cout << " a的值是:" <
輸出:
上麵的程序顯示了一個錯誤,說“調用重載的' fun(int&) '是模糊的”。如我們所見,第一個函數接受一個整數實參,第二個函數接受一個引用形參作為實參。在這種情況下,編譯器無法理解用戶需要哪個函數,因為fun(int)和fun(int &)之間沒有語法區別;因此,它會產生一個歧義錯誤。
使用不同類型的參數進行重載
#include using namespace std;空白printValue (int);空白printValue (char);空白printValue(浮動);int main() {printValue(10);printValue (' @ ');printValue(3.14度);返回0;} void printValue(int A) {cout<< endl << " A的值:"<< A;} void printValue(char A) {cout<< endl << " A的值:"<< A; } void printValue(float A) { cout<< endl << "Value of A : "<< A; }
輸出:A值:10 A值:@ A值:3.14
可以根據傳遞到函數中的許多類型的參數來實現函數重載。類的非成員函數和成員函數都可以實現函數重載。
通過改變參數的數量來實現函數重載
根據提供給函數的參數的數量,實現函數的重載。類的非成員函數和成員函數都可以實現函數重載.
#include using namespace std;void SumNum(int A, int B);void SumNum(int A, int B, int C);void SumNum(int A, int B, int C, int D);int main() {SumNum(1,2);SumNum(1、2、3);SumNum(1、2、3、4);返回0;} void SumNum(int A, int B) {cout<< endl << " SumNum is: "<< A+B;} void SumNum(int A, int B, int C) {cout<< endl << " SumNum is: "<< A+B+C; } void SumNum(int A, int B, int C, int D) { cout<< endl << "SUMNUM is : "<< A+B+C+D; }
輸出:SumNum是3 SumNum是6 SumNum是10
在這種函數重載的方式中,我們定義了兩個類型相同但具有相同名稱的不同參數數量的函數。例如,在下麵給出的程序中,我們創建了兩個add()函數來返回兩個和三個整數的和。
//第一個函數定義int add(int a, int b) {cout << a+b;} //第二個重載函數定義int add(int a, int b, int c) {cout << a+b+c;}
這裏add()函數是重載的,因為它有兩個定義,一個可以接受兩個參數,另一個可以接受三個參數。將調用哪個add()函數,這取決於參數的數量。
Int main() {add(10,20);//添加2個參數add(10,20,30);//sum()有3個參數}
程序(通過改變參數的數量):
#include using namespace std;Int add(Int a, Int b) {cout << a+b <
輸出:60 90
在上麵的例子中,我們通過改變參數的數量來重載add()函數。首先,我們定義一個帶有兩個形參的add()函數,然後我們可以通過再次定義一個add()函數來重載它,但這次有三個形參。
不同類型參數的函數重載
在這種方法中,我們定義了兩個或多個函數,它們的形參具有不同的數據類型,但具有相同數量的同名形參。例如,在這個程序中,我們有三個add()函數;第一個將獲得兩個整數參數,第二個將獲得兩個float參數,第三個將獲得兩個double參數。
計劃:
#include using namespace std;Int add(Int x, Int y) //第一個定義{cout<< x+y << endl;返回0;} float add(float a, float b) {cout << a+b << endl;返回0;} double add(double x, double y) {cout << x+y << endl;返回0;} int main() {add(20, 40);添加(34.5 23.45 f, f);添加(40.24,20.433); }
輸出:60 57.95 - 60.673
在上麵的例子中,我們定義了add()函數三次。第一,使用整數作為參數,第二,使用float作為參數,第三,使用double作為參數。
因此,我們重寫了兩次add()函數。
c++中函數重載的優點
- 這個程序非常簡單,也很容易理解。
- 它節省了內存空間,保持了一致性,無論參數的類型如何,都為方法提供了清晰的接口和程序的可讀性。
- 使用函數重載的概念,我們可以用相同的名稱開發多個函數,但是傳遞的參數應該是不同的類型。
- 函數重載可以更快地執行程序。
- 函數重載用於代碼可重用性和節省內存。
要清楚地理解c++中的函數重載,您必須精通c++。如果你想提高你的技能,你可以參加c++入門免費課程在Grbeplay2018官网eat Learning Academy學習c++的基本概念和基礎知識,以幫助您建立該學科的專業知識。
c++中函數重載的缺點
- 返回類型不同的函數聲明不能用函數重載過程重載。
- 如果聲明了任何靜態成員函數,則不能重載相同的形參或相同的名稱類型。
函數重載和運算符重載的區別
函數重載 | 操作符重載 |
函數重載允許我們以多種方式調用它。 | 操作符重載允許操作符的擴展意義超出其預定義的操作意義。 |
可以使用相同的名稱但不同的參數重載函數。 | 你可以重載(定義自定義行為)操作符,比如' + ',' - ','()','[]'。 |
函數重載意味著使用單一名稱並為其提供更多功能。 | 操作符重載意味著為某個操作符添加額外的功能。 |
當操作符重載時,該操作符具有不同的含義,這取決於其操作數的類型。 | 當函數重載時,相同的函數名根據其簽名(函數形參列表中的實參類型列表)有不同的解釋。 |
如果你想了解更多關於操作符重載的信息,請訪問c++中的操作符重載.
函數重載與函數重寫的區別
函數重載 | 功能覆蓋 | |
定義 | 在函數重載中,一個類中的兩個或多個方法具有不同的參數但方法名相同。 | 在函數重寫中,兩個方法具有相同的參數和方法名,但一個方法在父類中,另一個在子類中。 |
函數簽名 | 參數的類型或參數的數量都應該不同。 | 函數簽名應該保持不變。 |
行為 | 為一個方法定義多個行為。 | 更改方法的行為。 |
函數的範圍 | 它們在同一個範圍內。 | 他們在不同的範圍。 |
繼承 | 它可以在沒有遺傳的情況下發生。 | 它隻發生在一個類從另一個類繼承時。 |
多態性 | 編譯時 | 運行時 |
技術 | 代碼優化技術 | 代碼替代技術 |
不。類的 | 隻需要一個類。 | 至少需要兩節課。 |
c++ faq中的函數重載
函數重載是指存在兩個或多個具有相同名稱但參數不同的函數。
函數重載是c++的眾多特性中最關鍵的特性之一。這段代碼中有許多同名函數,每個函數都有一組惟一的參數列表。參數的數據類型和順序也包括在這個參數列表中。
c++函數重載特性用於使代碼更易於閱讀。它用來使程序員不必去記憶不同的函數名。重載函數屬於一個類,但具有多個實例,具有相同的名稱但不同的形參。如果必須使用不同數量或類型的參數執行單個操作,則必須重載函數。
函數重載在OOP中被稱為多態性函數。
與多態類似,函數重載使我們能夠在保持函數名的同時獲得不同的行為。在c++中,函數重載用於減少內存使用和增加代碼重用。
後期綁定和動態多態性是運行時多態性的其他名稱。在運行時多態中,函數調用在運行時解析。相比之下,對於編譯時或靜態多態,編譯器在運行時推導出哪個函數調用後決定綁定到對象。
通過使用繼承,可以對現有的類進行擴展和重用,而無需進行更改,從而在它們之間創建層次鏈接。類可以通過繼承嵌入到對象中。假設您在類型B的類規範中包含了類型x的類a對象。
函數重載的基本好處是它使代碼更容易閱讀和重用。
函數重載用於提高一致性、可讀性和內存效率。
它加速了程序的執行。
此外,代碼維護也變得簡單。
函數重載為代碼提供了靈活性。
函數的多功能性避免了使用多個函數名來執行同一組函數的需要。
結論
c++中的函數重載可以以不同的方式使用,以增強代碼的可讀性。在用c++進行編程時,它有助於節省編譯時間和內存空間。您還了解了如何使用函數重載的概念執行類似的操作。
你可以在c++概念中增強函數重載: