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核心编程整理(下) 线程的堆栈 每当创建一个线程时,系统就会为线程的堆栈(每个线程有他自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个以保 ...
随机推荐
- mysql基础操作(三):数据约束
首先创建一个数据库 create database homework default character set utf8; use homework; 1.1 默认值约束(default) -- 数 ...
- Java中除数为0的情况
转自http://blog.csdn.net/alanzyy/article/details/8591534 在数学中,规定被除数不能为0 那么在Java程序中一旦出现除数为0时,会出现什么情况呢: ...
- Flink 保证ExactlyOnce
Flink 保证 ExactlyOnce 1.使用执行ExactlyOnce 的数据源,比如 kafka 2.使用FlinkConsumer,开启CheckPointing,偏移量会保存通过Check ...
- Flink与Strom两个框架的对比分析
一.Flink与Storm两个框架的对比 二.Flink 的特性 1.高吞吐.低延迟.高性能 2.支持带事件的窗口(window) 操作:time.count.session.data-driven ...
- 基于SigalR实现的奥运会实时金牌榜
系统架构 三端 winform 后台数据管理 + Asp.Net Mvc 前台数据展示 + Xamarin.Forms 移动端跨平台APP 因为本人的代码水平一般,期间遇到了一些问题,如signalR ...
- TCP/IP以及Socket聊天室带类库源码分享
TCP/IP以及Socket聊天室带类库源码分享 最近遇到个设备,需要去和客户的软件做一个网络通信交互,一般的我们的上位机都是作为客户端来和设备通信的,这次要作为服务端来监听客户端,在这个背景下,我查 ...
- BUUCTF-[网鼎杯 2020 青龙组]AreUSerialz
BUUCTF-[网鼎杯 2020 青龙组]AreUSerialz 看题 <?php include("flag.php"); highlight_file(__FILE__) ...
- Mybatis-plus<二>通用CRUD,分页
Mybatis-plus<二>通用CRUD,分页 与博客Mybatis-plus<一>为同一个Springboot项目. Demo GitHub下载地址:https://git ...
- aes加解密前后端-前端
一.ajax请求前端 f12请求和响应参数效果: 1.在前端封装ajax的公共Util的js中,封装ajax请求的地方,在beforeSend方法和成功之后的回调函数success方法中: var p ...
- golang指针接收者和值接收者方法调用笔记
初学go时很多同学会把 值接收者 和 指针接收者 的方法相互调用搞混淆,好多同学都只记得指针类型可以调用值接收者方法和指针接收者方法,而值类型只能调用值接收者方法,其实不然,在某些情况下,值类型也是可 ...