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