函式過載的注意事項 必看

2021-10-25 04:48:12 字數 1398 閱讀 4214

#include "iostream"  

using namespace std;  

void func(const int& a)  

void func(int& a)  

int main()  

上面**中func(a)呼叫那個過載函式呢?

呼叫函式的優先順序取決於「傳入引數的型別與那個過載函式形參最接近」。

函式過載狀態一:

void func(const int& a)  // 該函式形參的a為「唯讀」狀態

函式過載狀態二:

void func(int& a)  // 該函式形參的a為「可讀可寫」狀態

我們在main函式中給func函式傳入的引數是int型別的a,此時的實參a是「可讀可寫狀態」,因此呼叫的是「函式過載狀態二」。

#include "iostream"  

using namespace std;  

void func(const int& a)  

void func(int& a)  

int main()  

上述程式在什麼情況下可以呼叫「函式過載狀態一」?

#include "iostream"  

using namespace std;  

void func(const int& a)  

void func(int& a)  

int main()  

此時可以呼叫「函式過載狀態一」,因為傳入形參是「常量」,與「函式過載狀態一的傳入形參——const常量」相符合。我們反觀函式過載狀態一的形參,函式過載狀態一的形參是「含有「可以訪問的有效記憶體空間」的變數」,顯然常量10不符合要求。

#include "iostream"  

using namespace std;  

void func(const int& a)  

void func(int& a)  

void func(int& a, int b = 10)  

int main()  

​​​​​​​

以上程式能正常執行嗎?

答案是「no」。

當你傳入引數是非const整型變數a時,對應兩個func函式:

① void func(int& a, int b = 10)

② void func(int& a)

但是,這兩個函式沒有呼叫優先順序之分,因此這段程式不可以正常執行!

函式過載相關注意事項

1.過載函式呼叫問題中的列舉型別提公升 1 void newf unsigned char 2 void newf int 3 unsigned char uc 129 4 newf virtual calls newf int 5 newf uc calls newf unsigned char ...

operator 過載 注意事項

進行類的運算操作符過載時,需要把涉及到的運算子過載的類的標頭檔案包含近年來,例如 include 如果沒有包含上面標頭檔案,則下面的類進行operator 過載時會出現編譯錯誤 binary no operator found which takes a right hand operand of ...

過載operator 的注意事項

include include include using namespace std template class type,int dim class point type operator int index type operator int index const private type...