【黑马程序员】C++函数

文章目录

  • 函数提高
    • 函数默认参数
    • 函数占位参数
    • 函数重载
      • 基本概述
      • 函数重载注意事项

20240213

函数提高

函数默认参数

  • 如果某个位置不传实参,那么该位置可以实用默认参数

  • 语法:返回值类型 函数名(参数类型 形参名=默认值)

  • 注意

    • 如果某个位置设置了默认参数,那么从左往右后面都必须有默认值
    ```cpp
    #include 
    
    using namespace std;
    
    int func(int a, int b=20, int c=30) {
    	return a + b + c;
    }
    
    int main(){
    	int a = 10;
    	cout << func(a) << endl;
    	return 0;
    }
    
    
    * 函数的声明和定义只能有一个地方有默认参数,否则就会报错,因为如果在声明时指定一个默认值,在实现时在指定一组默认值,此时就会出现二义性,程序不知道使用声明的默认值还是定义的默认值
    
    ```cpp
    #include 
    
    using namespace std;
    
    int func(int a, int b =10);
    
    //error: redefinition of default argument
    int func(int a, int b =10) { 
    	return a+b;
    }
    
    int main(){
    	cout <

函数占位参数

  • C++函数的形参列表中可以有占位参数,用来做占位,调用函数时必须填补该占位

  • 语法:返回值类型 函数名(参数类型) {}

  • 注意

    • 占位参数也可以有默认值,有默认值的时,在调用的时候实参位置传递的占位值也可以不用传
    #include 
    
    using namespace std;
    
    void func(int=1) {
    	cout << "占位参数测试" << endl;
    }
    
    int main(){
    	func(1);
        func();
    	return 0;
    }
    

函数重载

基本概述

  • 作用:函数名可以相同,提高复用性

  • 函数重载需要满足的条件

    • 同一个作用域下

    • 函数名相同

    • 参数列表不同,满足三者之一即可(参数类型不同,参数个数不同,参数顺序不同)

  • 注意:函数返回值类型不同,不可以作为函数重载的条件

#include 

using namespace std;

void func(int a, float b) {
	cout << a << b << endl;
}

// 参数个数不同
void func(int a) {
	cout << a << endl;
}

// 参数类型不同
void func(int a, int b) {
	cout << a << b << endl;
}

// 参数顺序不同
void func(float a, int b) {
	cout << a << b << endl;
}

int main() {
	int a = 1;
	float b = 1.1;
	func(a,b);
	func(a);
	func(a,a);
	func(b,a);
	return 0;
}

函数重载注意事项

  • 引用作为重载的条件
#include 

using namespace std;

// int& a = 1在语法中就是不合法的
void func(int& a) {
	cout << "func(int& a)" << endl;
}

// const int& a = 1;在c++内部会先转化为int temp=1; const int& a=temp;
void func(const int& a) {
	cout << "func(const int& a)" << endl;
}

int main(){
	func(1);
	int a = 1;
	func(a);
	return 0;
}
  • 函数重载碰到默认参数,由于不知道调用那个就会出现函数调用的二义性error: redefinition of 'func'
#include 

using namespace std;

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

void func(int a=1) {
	cout << "func(int a=1)" << endl;
}

int main(){
	func();     //调用出现二义性
	func(1); 
	return 0;
}

你可能感兴趣的:(#,C++笔记,c++,开发语言)