函数默认参数

  在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 函数提高的更多相关文章

  1. windows核心编程 - 线程同步机制

    线程同步机制 常用的线程同步机制有很多种,主要分为用户模式和内核对象两类:其中 用户模式包括:原子操作.关键代码段 内核对象包括:时间内核对象(Event).等待定时器内核对象(WaitableTim ...

  2. windows核心编程---第九章 同步设备IO与异步设备IO之同步IO

    同步设备IO 所谓同步IO是指线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备的通知.而IO完成端口就是实现这种通知的很 ...

  3. windows核心编程---第二章 字符和字符串处理

        使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...

  4. 【windows核心编程】 第八章 用户模式下的线程同步

    Windows核心编程 第八章 用户模式下的线程同步 1. 线程之间通信发生在以下两种情况: ①    需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性 ②    一个线程需要通知其他线程 ...

  5. python核心编程第二版笔记

    python核心编程第二版笔记由网友提供:open168 python核心编程--笔记(很详细,建议收藏) 解释器options:1.1 –d   提供调试输出1.2 –O   生成优化的字节码(生成 ...

  6. 《windows核心编程系列》二谈谈ANSI和Unicode字符集 .

    http://blog.csdn.net/ithzhang/article/details/7916732转载请注明出处!! 第二章:字符和字符串处理 使用vc编程时项目-->属性-->常 ...

  7. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  8. 《Windows核心编程》读书笔记 上

    [C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...

  9. 【Windows】windows核心编程整理(下)

    windows核心编程整理(上) windows核心编程整理(下) 线程的堆栈 每当创建一个线程时,系统就会为线程的堆栈(每个线程有他自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个以保 ...

随机推荐

  1. Kafka源码篇 --- 小白也能看懂的Producer的初始化及元数据获取流程

    最近在研究kafka的源码,发现有些小伙伴的源码写的很不错,就想转载一下,让更多的人知道和学习一下. https://blog.csdn.net/weixin_43167418/article/det ...

  2. promise链式调用的应用

    then在链式调用时,会等前一个then或者函数执行完毕,返回状态,才会执行回调函数. (1)代码顺序执行,第一步调用了函数cook ,cook执行返回了一个promise,promise返回的是成功 ...

  3. golang jwt

    什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下. JWT作用? ...

  4. volatile的基本原理

    volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...

  5. vue七种实现组建通信的方法

    目录 组件通信 1.props 父组件--->子组件通信 2.$emit 子组件--->父组件传递 $emit与props结合 兄弟组件传值 3.bus(事件总线) 兄弟组件通信 4.$p ...

  6. tslib移植arm及使用

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 tslib 1.4 下载  https://gitlab. ...

  7. nRF52832蓝牙iBeacon广播

    开发环境 SDK版本:nRF5_SDK_15.0.0 芯片:nRF52832-QFAA 蓝牙iBeacon实现 iBeacon的核心就是广播,不需要进行连接,通过在广播包中插入信息然后广播出去. 广播 ...

  8. Python习题集(七)

    每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 如果有一个列表a= ...

  9. linu命令进阶篇

    预备知识: 本实验要求实验者具备如下的相关知识. 前面我们学习了linux的文件系统,了解的文件系统的结构,也学了linux档案的属性和权限,以及其设定. 当我们执行命令操作一个文件的时候,却不知道这 ...

  10. Vue设置全局cookies样式

    ''' 配置全局cookies样式 下载:cnpm install vue-cookies import cookies from 'vue-cookies' Vue.prototype.$cooki ...