黑马程序员C++核心编程笔记--3 函数高级

3.1 函数默认参数

本节内容之前已经整理过,详见22.函数的默认值

3.2 函数占位参数

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

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

在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术

示例:

cpp 复制代码
#include <iostream>
using namespace std;


// 函数占位参数,占位参数也可以有默认值
void func(int a, int) {
    cout  << "this is a func" << endl;
}

int main() {
    func(1, 2);
    return 0;
}

3.3 函数重载-基本语法

作用 :函数名可以相同,提高复用性
函数重载满足条件:

  • 同一个作用域下
  • 函数名相同
  • 函数参数类型不同 或者个数不同 或者顺序不同

注意:函数的返回值不可以作为函数重载的条件

示例:

cpp 复制代码
#include <iostream>
#include <iostream>
using namespace std;

// 1.参数类型不同
void print(int a)
{
    cout << "int" << endl;
}
void print(double a)
{
    cout << "double" << endl;
}

// 2.参数顺序不同
void print(double a, int b) {
    cout << "int int" << endl;
}
void print(int a, double b) {
    cout << "double double" << endl;
}
// 注意:同类型参数顺序不同是不被允许的,因为函数名相同,编译器会认为这是同一个函数
// void print(int a, int b) {}和void print(int b, int a) {}同时出现时,编译器会报错

// 3。参数个数不同
void print(int a, int b, int c) {
    cout << "int int int" << endl;
}
void print(int a, int b,  int c, int d) {
    cout << "int int" << endl;
}

// 注意事项:函数返回值类型不同不可作为函数重载的条件
int main()
{
    print(1);
    print(1.0);

    print(1.0, 1);
    print(1, 1.0);

    print(1, 1, 1);
    print(1, 1, 1, 1);
    
    return 0;
}

3.4 函数重载-注意事项

  • 引用作为重载条件
  • 函数重载碰到函数默认参数

示例:

cpp 复制代码
#include <iostream>
using namespace std;

// 函数重载注意事项
// 1.引用作为重载的条件
void fun(int& a) {
    cout << "func(int& a)调用" << endl;
}

void fun(const int& a) {
    cout << "func(const int& a)调用" << endl;
}

// 2.函数重载碰到默认参数
void func(int a) {
    cout << "func(int a)调用" << endl;
}
void func(int a, int b = 10) {
    cout << "func(int a, int b = 10)调用" << endl;
}

int main() {

    // func(int& a)调用
    int a = 10;
    fun(a);

    // func(const int& a)调用
    const int b = 10;
    fun(b);
    fun(10);

    // 当函数调用碰到默认参数会出现二义性报错
    // func(10);   // 错误❌,默认参数不能省略
    func(10,10);    //  正确
    return 0;
}
相关推荐
Peter-OK26 分钟前
PostgreSQL学习笔记(入门-进阶-精通说明)
笔记·学习·postgresql
wo_jack30 分钟前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
D e re k ZH1 小时前
C++ 标准库算法全景指南
数据结构·c++·算法
雪落漂泊2 小时前
C++算法 二分查找篇(上)
开发语言·c++·算法
成都蜀味缘餐饮技术培训学校2 小时前
手撕烤兔技术培训实战指南,秘制腌料配方比例与调制手法
大数据·经验分享·笔记·其他·微信公众平台
不会算法的笨小孩4 小时前
异常的使用以及会出现的问题
开发语言·c++·c++11·异常
希和20274 小时前
免费AI视频生成工具汇总(国内优先,适合做漫剧、短视频,Obsidian笔记版)
人工智能·笔记·音视频
蒸蒸yyyyzwd5 小时前
秋招学习笔记 day109
笔记·八股
Hhy_11076 小时前
《C++深度解构06》手撕 string —— 从底层内存管理到深浅拷贝彻底吃透
c语言·开发语言·c++·学习·visual studio
青少儿编程课堂6 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛