C++核心程式設計---3.函式高階【P95~P98】

黃小白的進階之路發表於2021-01-01

3. 函式高階

3.1 函式的預設引數

在這裡插入圖片描述
注意事項:
1、如果某個位置已經有了預設引數,那麼從這個位置往後,從左到右都必須有預設值
2、如果函式宣告有預設引數,函式實現就不能有預設引數,宣告和實現只能有一個有預設引數

#include<iostream>
using namespace std;

//函式預設引數,如果你給了引數,那函式就用你給的引數,如果你沒給引數,那函式就用預設引數,相當於預設值
//注意事項:1、如果某個位置已經有了預設引數,那麼從這個位置往後,從左到右都必須有預設值
//比如這個函式,一旦給了引數b預設值,那麼引數b後的引數都得設定預設值,否則報錯

int func(int a, int b = 20, int c = 30)
{
	return a + b + c;
}

//2、如果函式宣告有預設引數,函式實現就不能有預設引數,宣告和實現只能有一個有預設引數
//雖然程式沒有出現紅線,但執行時會報錯
int func2(int a = 10, int b = 10);

int func2(int a = 10, int b = 10)
{
	return a + b;
}

int main()
{
	cout << func(10) << endl;

	system("pause");
	return 0;
}

3.2 函式的佔位引數

在這裡插入圖片描述

#include<iostream>
using namespace std;

void func(int a,int)
{
	cout << "this is a func  " << endl;
}

int main()
{
	func(10,10);

	system("pause");
	return 0;
}

3.3 函式過載-基本語法

在這裡插入圖片描述

#include<iostream>
using namespace std;

//函式過載的滿足條件:
//1、同一個作用域下
//2、函式名稱相同
//3、函式引數型別不同,或者個數不同,或者順序不同

void func()
{
	cout << "this is a func  " << endl;
}

void func(int a)
{
	cout << "THIS IS A FUNCTION " << endl;
}

int main()
{
	func();
	func(10);
	system("pause");
	return 0;
}

3.4 函式過載-注意事項

  • 引用作為過載條件
  • 函式過載碰到函式預設引數
#include<iostream>
using namespace std;

//1、引用作為函式過載條件
void func(int &a)
{
	cout << "func (int &a) 呼叫" << endl;
}

void func(const int &a)
{
	cout << "func(const int &a)呼叫" << endl;
}

//2、函式過載碰到預設引數
void func2(int a)
{
	cout << "func2(int a )的呼叫" << endl;
}
void func2(int a,int b=10)
{
	cout << "func2(int a,int  b)的呼叫" << endl;
}

int main()
{
	int a = 10;
	func(a);

	func(10);

	func2(100);//當函式過載碰到預設引數,出現二義性

	system("pause");
	return 0;
}

相關文章