函数默认参数

  在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. Spring 事务回滚机制详解

    1:事务原理 1.2:aop/动态代理 类路径:org/springframework/aop/framework/CglibAopProxy.java ReflectiveMethodInvocat ...

  2. Servlet过滤器----Filter

    JavaEE的Servlet规范描述了三种技术:Servlet,Filter,Listener (一)过滤器简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过F ...

  3. CountDownLatch能不能在多个线程上添加await?

    在CountDownLatch类的使用过程中,发现了一个很奇怪的现象: CountDownLatch countDownLatch = new CountDownLatch(2); Runnable ...

  4. 开源的 Web 框架哪个快?我在 GitHub 找到了答案

    在开源这片自由的土地上,孕育了太多开源 Web 框架.我在 GitHub 上搜了一下"web framework"关键字显示有 56000+ 匹配的开源项目,它们百花齐放各有特色, ...

  5. K8S命令行工具——kubectl

    1.kubectl概述 2.kubectl命令的语法 例子: 3.kubectl子命令使用分类 (1)基础命令 (2)部署和集群管理命令 (3)故障和调试命令 (4)其他命令 4.kubectl命令例 ...

  6. 快速模式第二包: quick_inI1_ouR1()

    文章目录 1. 序言 2. quick_inI1_outR1()流程图 3. 快速模式消息②数据包格式 4. 源码分析 4.1 quick_inI1_outR1() 4.2 quick_inI1_ou ...

  7. PPP协议、PPPoE协议、L2TP协议的关系

    1. 简述 首先对这3中协议做一个简单的描述: 协议 协议类型 描述 PPP 点对点链路层协议 应用最广泛的点对点协议,可应用在多种网络,改善了SLIP协议的不足 PPPoE 点对点链路层协议 对PP ...

  8. unity2021游戏引擎安装激活并汉化

    今天重新搭建了下unity的开发环境,也踩了不少坑,还有就是看了一些unity3d的教程,越看越不可思议,unity居然能做这么多好玩的东西,像枪战类,模拟类,角色扮演,动作冒险都很震撼. 但是震撼归 ...

  9. Python - poetry(4)管理环境

    环境隔离 poetry 核心之一:使项目环境隔离,意味着始终和本地全局 Python 环境隔离 poetry 首先会检查当前项目是否在虚拟环境中运行:如果是将直接使用它,而不创建新的:如果不是,poe ...

  10. 创建一个web项目