C 函式過載, 預設引數

2021-09-27 10:24:33 字數 1926 閱讀 7960

在我們的自然語言當中, 乙個詞在不同的情景之下可能會有多重不同的含義, 但是我們可以通過合理地判斷來確定該詞的真正含義, 這種情況, 我們可以說該詞被"過載"了.

關於函式過載的概念

函式過載其實就是函式的一種特殊的情況, 在我們的c++中允許在同一作用域當中宣告幾個功能類似的同名函式, 但是這個同名函式的形參列表(引數個數或是引數型別或是引數的順序)必須不同, 經常用來處理想要實現功能類似而資料型別不同的需求問題.

總的來說, c++允許兩個重名函式同時存在, 但是它們的引數列表不能完全相同, 哪怕是返回值的型別不同也不可以.

比如下面這樣時不允許的

#include using namespace std;

int add(short a, short b)

short add(short a, short b)

int main()

這樣的方式是不可以的, 只要這兩個同名函式的引數列表相同, 即便它們的返回值不同, 這樣的操作也是不可以的

接下來我們來看下函式過載的正確做法

#include using namespace std;

void swapargs(int * pa, int * pb)

void swapargs(float * pa, float * pb)

int main()

這樣我們就實現了乙個不同引數列表的同名函式, 這樣的功能其實為我們的操作的提供了很大的便利. 這是c語言當中無法做到的.

關於c++中的預設引數

預設引數其實是宣告或定義函式時為函式的引數指定乙個預設值.在呼叫該函式的時候, 如果沒有指定實參就會採用這個預設值, 否則的話就會使用我們傳入的實參值.

總的來說, 在c++的函式引數列表中, 能夠允許存在被賦值的引數, 這些引數具備一定的特點:

首先, 如果傳人了實參的值, 就會取傳入的值, 如果沒有傳入, 就會取函式定義時被賦予的預設值

來看例子

#include using namespace std;

void test(int a, int b = 20, int c = 30)

int main()

這樣我們傳入乙個值10,可以得到相應的結果為

再傳入乙個值試試

test(10, 200);
結果變為

再傳入乙個數

test(10, 200, 300);
結果是

其次, 這些引數必須位於引數列表的尾部, 不能穿插.

也就是說, 我們在呼叫時, 不能寫為

test(10, , 300);

這樣的形式, 即便在引數列表中是預設引數, 在傳入實參時也不可以跳過, 除非給引數位於引數列表末尾.(即 test(10, 200) 這種情況).

還有我們在編寫函式功能時, 也要注意不能寫為下面這樣

void test(int a = 10, int b, int c = 30)

void test(int a = 10, int b, int c)

等等這樣都是不被允許的.

作為引數列表中的預設引數, 必須位於引數列表的尾部,不能穿插!!

最後,被賦值的引數列表不能再宣告和定義中同時出現, 只能出現一次.

C 預設引數 函式過載

預設引數 預設引數是宣告或定義函式時為函式的引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。例void testfunc int a 0 intmain 預設引數分類 1.全預設引數 void testfunc int a 10,int b 20,int c ...

c 函式過載和預設引數

函式過載 是c 語言物件導向的特點 多型的一種表現形式 又稱為靜多型 過載的規則 1 函式名相同。2 引數個數不同,引數型別不同,引數順序不同,均可構成過載。3 僅返回值型別不同則不可以構成過載。void func int a ok void func char a ok void func int...

c 函式過載與預設引數

函式過載 是指同一作用域內,一組具有相同函式名,不同引數列表的函式,構成過載關係,這組名稱相同的函式成為過載函式。過載函式通常完成的功能相近,這樣做的好處是減少了函式名的數量,提高了程式的可讀性。注意 過載與函式的返回型別無關,引數相同僅返回值不同的兩個函式不構成過載關係,與形參名字無關,只與引數的...