函数重载需要注意的点
生活随笔
收集整理的這篇文章主要介紹了
函数重载需要注意的点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基本概念:
作用:函數名可以相同,提高復用性
函數重載滿足的條件:
1.同一作用域
2.函數名相同
3.函數參數類型不同,個數不同,順序不同
基本規則就上面那幾條,不多說了,開始難一些的東西:
1.函數的返回類型不能當作重載的條件:
void func()
{cout << "我好帥" << endl;
}int func()
{cout << "我好帥" << endl;
}
以上代碼會出現下圖報錯,也就是說一個是void? 另外一個是int返回類型不同的函數,不滿足重載函數的條件
?2.引用作為函數重載的條件:
?
#include<iostream>
using namespace std;void func(int &a)
{cout << "func(int &a)的調用" << endl;
}void func(const int &a)
{cout << "func(const int &a)的調用" << endl;
}int main()
{int a = 10; //調用第一個函數 相當于int &a = a;func(a); //a = 10;system("pause");return 0;
}
運行結果
表明了運行第一個函數? 相信大家這個應該都能懂
#include<iostream>
using namespace std;void func(int &a)
{cout << "func(int &a)的調用" << endl;
}void func(const int &a)
{cout << "func(const int &a)的調用" << endl;
}int main()
{func(10); //第一個函數int &a = 10不合法system("pause");return 0;
}
?如果直接調用第一個函數的話? 會報錯? 報錯結果如下:
?因此直接調用func(10)的話,相當于上述代碼中的第一個函數的參數調用不合法;而第二個函數因為前有const修飾因此可以直接調用!!!
至于這個const int &a = 10可以直接調用:::::
? ? ?重點來了:引用的本質就是指針常量?指向的地址不可變 但是可以對地址內存的數據進行操作
??前有const修飾的話 相當于:
const int& a = 10; //相當于int temp = 10;//const int &a = temp;
上述代碼中的注釋都是編譯器識別到a是引用之后自動在編譯器中完成,你知道有這個規則即可!!!
3.函數重載遇到默認參數:
#include<iostream>
using namespace std;int func(int a, int b = 20)
{return a + b;
}int func(int a)
{return a + b;
}int main()
{func(30);system("pause");return 0;
}
運行結果會報錯:
因為func(30)調用上面兩個函數都可以通過,出現了二義性。當然要是func(30,10)這樣的話 ,只能調用第一個,畢竟第一個函數有兩個參數!!!
? ?
現在所偷的懶,以后會數倍返還與你所流的汗!!!
總結
以上是生活随笔為你收集整理的函数重载需要注意的点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 狗狗好听的名字英文名
- 下一篇: “复此新秋池”下一句是什么