C++核心编程 3 函数提高
函数默认参数
在C++中,函数的形参列表中的形参是可以有默认值的;
语法:返回值类型 函数名 (参数 = 默认值){ }
实例:
#include<iostream>
using namespace std; //函数默认参数 int func1(int a, int b = 20, int c = 30) //语法:返回值类型 函数名 (参数 = 默认值){ }
{
return a + b + c;
} //注意事项
//1、如果某个位置已经有了默认参数,那么从这个位置往后,从左到右都必须有默认参数 /*
int func2(int a, int b = 10, int c, int d) ----> int func2(int a, int b = 10, int c = 20, int d = 30)
{
return a + b + c;
}
*/ //2、如果函数声明中有默认参数,函数实现就不能有默认参数 //声明和实现只能有一个有默认参数
int func2(int a = 10, int b = 10); // <---- int func2(int a, int b);
int func2(int a, int b) // <---- int func2(int a = 10, int b = 10)
{
return a + b;
} int main()
{ //cout << func1(10 , 20) << endl; //如果我们自己传入数据,就用自己的数据,如果没有,那么用默认值
cout << func2() << endl; system("pause");
return 0;
}
函数占位参数
C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置
语法:返回值类型 函数名 (数据类型){ }
实例:
#include<iostream>
using namespace std; //函数占位 void func(int a , int) //语法:返回值类型 函数名 (数据类型){ }
{
cout << "this is func" << endl;
} int main()
{ func(1,1); system("pause");
return 0;
}
函数重载
作用:函数名可以相同,提高复用性
函数重载满足条件:
1、同一个作用域下;
2、函数名相同;
3、函数参数类型不同,或者 个数不同,或者顺序不同;
注意:函数的返回值不可以作为函数重载的条件
实例:
#include<iostream>
using namespace std; //函数重载 //函数重载的满足条件
//1、同一个作用域下 满足:都在全局作用域
//2、函数名相同 满足:都叫func() void func(double a, int b) //全局作用域
{
cout << "func(double a, int b)的调用" << endl;
} //3、函数参数类型不同,或者个数不同,或者顺序不同 void func(double a, double b) //函数参数类型不同
{
cout << "func(double a, double b)的调用!" << endl;
} void func(double a, int b, int c) //函数参数个数不同
{
cout << "func(double a, int b, int c)的调用!" << endl;
} void func(int a, double b) //函数参数顺序不同
{
cout << "func(int a, double b)的调用" << endl;
} int main()
{
func(1.0, 2);
func(1.0, 2.0); //根据传入参数的的不同,而调用不同的函数
func(1.0, 2, 3);
func(1, 2.0); system("pause");
return 0;
}
函数重载注意事项
1、引用作为重载条件;
实例:
#include<iostream>
using namespace std; //函数重载的注意事项 //1、引用作为重载条件 void func(int &a) // int &a = 10; 不合法 引用必须是合法的内存空间,不能是常量
{
cout << "func(int &a)的调用" << endl;
} void func(const int &a) //const int &a = 10; 合法 加上const 编译器做了一层优化,相当于创建了一个临时数据,将a指向了一个临时的空间
{
cout << "func(const int &a)的调用" << endl;
} int main()
{
//int a = 10;
//func(a); //打印结果:func(int &a)的调用 func(10); //打印结果:func(const int &a)的调用 system("pause");
return 0;
}
2、函数重载碰到函数默认参数
实例:
#include<iostream>
using namespace std; //函数重载的注意事项 //2、函数重载碰到函数默认参数 void func2(int a, int b=10)
{
cout << "func2(int a, int b)的调用" << endl;
} void func2(int a)
{
cout << "func2(int a)的调用" << endl;
} int main()
{ //func2(10); //当函数重载碰到默认参数,出现二义性,报错,尽量避免这种情况
func2(10, 20); system("pause");
return 0;
}
C++核心编程 3 函数提高的更多相关文章
- windows核心编程 - 线程同步机制
线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...
- windows核心编程---第九章 同步设备IO与异步设备IO之同步IO
同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...
- windows核心编程---第二章 字符和字符串处理
使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...
- 【windows核心编程】 第八章 用户模式下的线程同步
Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ① 需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ② 一个线程需要通知其他线程 ...
- python核心编程第二版笔记
python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d 提供调试输出1.2 –O 生成优化的字节码(生成 ...
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集 .
http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!! 第二章:字符和字符串处理 使用vc编程时项目-->属性-->常 ...
- python核心编程--笔记
python核心编程--笔记 的解释器options: 1.1 –d 提供调试输出 1.2 –O 生成优化的字节码(生成.pyo文件) 1.3 –S 不导入site模块以在启动时查找pyt ...
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- 【Windows】windows核心编程整理(下)
windows核心编程整理(上) windows核心编程整理(下) 线程的堆栈 每当创建一个线程时,系统就会为线程的堆栈(每个线程有他自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个以保 ...
随机推荐
- SpringCloud升级之路2020.0.x版-24.测试Spring Cloud LoadBalancer
本系列代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 通过单元测试,我们 ...
- springboot静态资源路径制定
spring.resources.static-location参数指定了Spring Boot-web项目中静态文件存放地址, 该参数默认设置为: classpath:/static, classp ...
- mysql最强
MYSQL 与mysql第一次亲密接触 数据库相关概念 一.数据库的好处 二.数据库的常见概念 ★ 三.数据库存储数据的特点 四.常见的数据库管理系统 MYSQL的介绍 一.MySQL的背景 二.My ...
- Git入门配置
1.账户注册: 无论是GitHub还是码云(下称Gitee),要使用他们,我们都需要先注册账户,已有账户的可以跳过此步骤. Gitee GitHub 2.创建仓库: a.创建远程仓库 登入Gitee后 ...
- javaScript知识储备
javaScript知识储备 组成 ECMAScript(核心) 提供语法.变量等,遵循ECMA-262标准 DOM(文档对象模型) 提供操作HTML标签的API,遵循W3C规范 BOM(浏览器对象模 ...
- java IO操作,看完你应该就清晰了。
前言: java中IO里的一些知识对于一个java新手来说,是比较难理解的.因为里面存在一些很绕的概念,比如: 1.到底是读入写出,还是读出写入: 2.我要将一个文件的内容拷贝到另一个文件是先用Inp ...
- 使用 Dockerfile 自定义 Nginx 镜像
一般来说,自定义Nginx只需要把静态文件放到镜像里就可以了,不需要重写 CMD 与 ENTRYPOINT.但是,如果的确需要在 Nginx 启动前执行一些操作,就需要重写 CMD 了,如果写成下边就 ...
- Python常见问题 - 写入数据到 excel 报 ValueError: invalid literal for int() with base 10 错误
背景 在上写入数据到excel中,报了以下错误 出现原因 对于写入excel场景下出现该错误的话,很大概率是写入数据的单元格原本的数据格式有问题 解决方法 清理掉单元格的旧数据,然后再写入就可以了
- 【Python机器学习实战】决策树与集成学习(六)——集成学习(4)XGBoost原理篇
XGBoost是陈天奇等人开发的一个开源项目,前文提到XGBoost是GBDT的一种提升和变异形式,其本质上还是一个GBDT,但力争将GBDT的性能发挥到极致,因此这里的X指代的"Extre ...
- openswan IPSec专栏目录锦集
为了方便查阅现有的文章,特准备一个目录页供后续查询使用 专栏序言 1. 基础知识 openswan任务调度基础知识之信号 2. openswan环境搭建 openswan框架和编译时说明 opensw ...