首页 > 编程语言 >C++基础知识学习笔记(5)——函数

C++基础知识学习笔记(5)——函数

时间:2024-05-25 17:45:13浏览次数:24  
标签:函数 int 笔记 基础知识 add 默认 参数 C++ cout

学习参考:https://www.bilibili.com/video/BV1et411b73Z?p=95&spm_id_from=pageDriver&vd_source=cc561849591f6a210152150b2493f6f3

函数

函数的默认参数

可以为形参提供默认值。

int add(int a, int b = 1, int c = 2) {
	return a + b + c;
}
int main()
{
	cout << (add(1, 3, 4)) << endl;//8
	cout << (add(1, 3)) << endl;//6
	cout << (add(1)) << endl;//4
	return 0;
}

注意:

  1. 默认参数后面的形参,也必须提供默认参数。
  2. 如果函数声明有默认参数,那么函数实现就不能有默认参数。
    声明、实现只能有一处有默认参数,不能都有否则会有歧义。

声明时有默认参数:

int add(int a, int b = 1, int c = 2);
	int add(int a, int b, int c) {
	return a + b + c;
}

实现时有默认参数:

int add(int a, int b, int c);
	int add(int a, int b = 1, int c = 2) {
	return a + b + c;
}

函数占位参数

形参列表里可以有占位参数,用来占位,调用时必须提供对应的值来填补该位置。

下面代码中形参列表中第三个int是用来占位的。调用时必须传递一个int值。

int add(int a, int b, int){
	return a + b;
}
int main()
{
	cout << (add(1, 3, 4)) << endl;//8
	return 0;
}

占位还可以有默认值,调用的时候就不用传参了:

int add(int a, int b, int = 100){
	return a + b;
}
int main()
{
	cout << (add(1, 3)) << endl;//8
	return 0;
}

函数重载

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

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

  • 同一个作用域下
  • 函数名相同
  • 形参类型、个数、顺序等至少有一处不同(否则无法区分两个函数了)

函数重载注意事项:

  1. 引用作为重载的条件时
  • 值传递和引用传递可能会产生歧义(定义没问题,但调用时报错):
void func(int& a) {
	cout << "int & a" << endl;
}
void func(int a) {
	cout << "int a" << endl;
}
  • 引用传递和引用常量之间不会产生歧义:
void func(int& a) {
	cout << "int & a" << endl;
}
void func(const int& a) {
	cout << "const int& a" << endl;
}
int main()
{
	int a = 9;
	func(a);//"int & a"
	func(10);//"const int& a"
	return 0;
}
  • 值传递和引用常量之间会产生歧义(调用时报错):
void func(int a) {
	cout << "int a" << endl;
}
void func(const int& a) {
	cout << "const int& a" << endl;
}
  1. 函数重载碰到函数默认参数时可能会产生歧义。

标签:函数,int,笔记,基础知识,add,默认,参数,C++,cout
From: https://www.cnblogs.com/redcode/p/18212452

相关文章

  • C++容器之无序集(std::unordered_set)
    目录1概述2使用实例3接口使用3.1construct3.2assigns3.3iterators3.4capacity3.5find3.6count3.7equal_range3.8emplace3.9emplace_hint3.10insert3.11erase3.12clear3.13swap3.14bucket_count3.15max_bucket_count3.16bucket_s......
  • Vue3实战笔记(40)—组件逻辑复用:自定义Hooks的完全指南
    文章目录前言一、状态管理二、副作用处理三、生命周期钩子总结前言自定义Hooks是Vue3中的一个重要特性,它允许您创建可重用的函数,以便在组件之间共享状态和逻辑。以下是一些关于自定义Hooks的常见用法。一、状态管理使用reactive或ref来创建响应式数据,并在组件中......
  • 【刷题笔记Day2】数组|977.有序数组的平方、209. 长度最小的子数组、59.螺旋矩阵II
    文章目录977.有序数组的平方解题思路遇到的问题及解决方案209.长度最小的子数组解题思路遇到的问题及解决方案59.螺旋矩阵II解题思路遇到的问题及解决方案总结977.有序数组的平方题目描述:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新......
  • 原始字面常量(C++11)
    原始字面常量(C++11)文章目录原始字面常量(C++11)前言一、原始字面量二、代码示例总结前言字面量一般是指数值(12、454等)和字符串(“Hw”、“h\t”),但是有时候我们想表达字符原始的意义,不想进行转义,比如说"h\t"字符串中‘\t’表达的意思是制表符即进行了转义,C++11添加了......
  • 知道做到 读书笔记
    [[知道做到:跃迁式学习]]元数据[!abstract]知道做到:跃迁式学习书名:知道做到:跃迁式学习作者:彼得•霍林斯简介:学习是改善你的生活环境、成为你想成为的人的关键。科学的方法能加速学习进程,让你事半功倍。技能、信息和能力永远不会突然降临,需要你自己去寻找它们,这本书将手......
  • 卡片笔记写作法 精读笔记 01
    熟悉不等于理解单纯的重复阅读没有任何意义,无论是对理解还是对学习都是如此。甚至,我们能不能将其称为“学习”都还值得商榷。感悟熟悉不等于掌握,看书、听书、看电影、看视频都一样,看再多都没有用,包括做项目也一样,不总结没有用,就想我之前准备考试一样,不重复做题,不可以联系,不从大......
  • C++基础知识学习笔记(4)——引用
    学习参考:https://www.bilibili.com/video/BV1et411b73Z?p=89&spm_id_from=pageDriver&vd_source=cc561849591f6a210152150b2493f6f3引用作用:给变量起别名语法:数据类型&变量=原变量;intmain(){ inta=10; int&b=a; b=20; cout<<b<<endl;//20 co......
  • tracer ftrace笔记(4)—— events.rst 翻译
    基于msm-5.4Android-12一、翻译=============事件追踪=============:作者:TheodoreTs'o:更新:李泽凡和汤姆·扎努西 1.简介===============无需创建自定义内核模块即可使用跟踪点(请参阅Documentation/trace/tracepoints.rst)来使用事件跟踪基础设施注册探测函数。并非......
  • 学习笔记-主席树
    学习笔记-主席树主席树,就是可持久化权值线段树,也叫函数式线段树引入考虑如下问题:给定一个数列,查询其中第k大值显然,我们可以建一棵权值线段树,直接在上面二分就好了,即对于每个结点,查看它左子树的结点数量是否大于k,设为\(sum\)如果\(sum\gek\),则第k个结点在其左子树中,否则......
  • C++ - 比较两个浮点数大小
    简介两个浮点数不能直接使用 ==来确定相等,因为浮点数精度可能导致微小的误差 方法一:使用std::abs()函数来比较两个浮点数的差值是否小于一个非常小的阈值floata=1.5;floatb=2.3;floatepsilon=1e-9;if(std::abs(a-b)<epsilon){cout<<"aiseq......