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核心编程整理(下) 线程的堆栈 每当创建一个线程时,系统就会为线程的堆栈(每个线程有他自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个以保 ...
随机推荐
- 使用Eclipse搭建SSM框架(Spring + Spring MVC + Mybatis)
1.创建项目 1)打开Eclipse,点击File --> New --> Other 2)输入maven,找到Maven Project 3)然后一直按Next,直到出现一下界面: 4) ...
- Servlet学习笔记(三)之HttpServletResponse
init() 方法中参数 ServletConfig 对象使用 通过ServletConfig 获得 ServletContext对象 使用 HttpServletRequest 与HttpServl ...
- Nginx+Tomcat+Memcached实现session共享
实验环境: server1:nginx tomcat memcached server2:tomcat memcached Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入 ...
- 分布式系列-分布式ID
一.数据库自增(单实例) 1.方案描述 基于数据库自增ID(auto_increment)利用其来充当分布式ID.实现方式就是用一张表来充当ID生成器,当我们需要ID时,向表中插入一条记录返回主键ID ...
- GDAL的基本操作
上一节简单介绍了GDAL,这一节将介绍一些GDAL的基本操作,如影像读写.波段提取.波段合成等.代码均用python编写. 1.遥感影像的读写 众所周知,遥感影像是以栅格形式存储的,GDAL中使用da ...
- throw关键字
1.基础用法 2.方法中加合法校验,告知方法的调用者 数组越界判断 3.一切皆为对象,创建的是运行期对象,则可以不处理(throws/try catch),直接交给JVM处理(打印并终止程序) 4.O ...
- tk.mybatis中常用方法的使用(最实用)
一.前言 不知道环境和maven依赖怎么配置的,先看一下这个: SpringBoot整合tk.mybatis 二.方法的介绍和使用 插入方法 int insertSelective(T var1); ...
- weblogic漏洞分析之CVE-2021-2394
weblogic漏洞分析之CVE-2021-2394 简介 Oracle官方发布了2021年7月份安全更新通告,通告中披露了WebLogic组件存在高危漏洞,攻击者可以在未授权的情况下通过IIOP.T ...
- crontab 语法和最快速的学习
1.Cron 时间表语法 # ┌───────────── 分钟 (0 - 59) # │ ┌───────────── 小时 (0 - 23) # │ │ ┌───────────── 月的某天 ( ...
- 洛谷P1060——开心的金明
https://www.luogu.org/problem/show?pid=1060 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈 ...