3 函数提高

3.1 函数默认参数

在C++中,函数的形参列表中的形参是可以有默认值的。

语法:返回值类型 函数名 (参数= 默认值){}

示例:

int func(int a, int b = 10, int c = 10) {
return a + b + c;
} //1. 如果某个位置参数有默认值,那么从这个位置往后,从左向右,必须都要有默认值
//2. 如果函数声明有默认值,函数实现的时候就不能有默认参数
int func2(int a = 10, int b = 10);
int func2(int a, int b) {
return a + b;
} int main() { cout << "ret = " << func(20, 20) << endl;
cout << "ret = " << func(100) << endl; system("pause"); return 0;
}

3.2 函数占位参数

C++中函数的形参列表里可以有占位参数,用来做占位,调用函数时必须填补该位置

语法: 返回值类型 函数名 (数据类型){}

在现阶段函数的占位参数存在意义不大,但是后面的课程中会用到该技术

示例:

//函数占位参数 ,占位参数也可以有默认参数
void func(int a, int) {
cout << "this is func" << endl;
} int main() { func(10,10); //占位参数必须填补 system("pause"); return 0;
}

3.3 函数重载

3.3.1 函数重载概述

**作用:**函数名可以相同,提高复用性

函数重载满足条件:

  • 同一个作用域下
  • 函数名称相同
  • 函数参数类型不同 或者 个数不同 或者 顺序不同

注意: 函数的返回值不可以作为函数重载的条件

示例:

//函数重载需要函数都在同一个作用域下
void func()
{
cout << "func 的调用!" << endl;
}
void func(int a)
{
cout << "func (int a) 的调用!" << endl;
}
void func(double a)
{
cout << "func (double a)的调用!" << endl;
}
void func(int a ,double b)
{
cout << "func (int a ,double b) 的调用!" << endl;
}
void func(double a ,int b)
{
cout << "func (double a ,int b)的调用!" << endl;
} //函数返回值不可以作为函数重载条件
//int func(double a, int b)
//{
// cout << "func (double a ,int b)的调用!" << endl;
//} int main() { func();
func(10);
func(3.14);
func(10,3.14);
func(3.14 , 10); system("pause"); return 0;
}

3.3.2 函数重载注意事项

  • 引用作为重载条件
  • 函数重载碰到函数默认参数

示例:

//函数重载注意事项
//1、引用作为重载条件 void func(int &a)
{
cout << "func (int &a) 调用 " << endl;
} void func(const int &a)
{
cout << "func (const int &a) 调用 " << endl;
} //2、函数重载碰到函数默认参数 void func2(int a, int b = 10)
{
cout << "func2(int a, int b = 10) 调用" << endl;
} void func2(int a)
{
cout << "func2(int a) 调用" << endl;
} int main() { int a = 10;
func(a); //调用无const
func(10);//调用有const //func2(10); //碰到默认参数产生歧义,需要避免 system("pause"); return 0;
}

更多信息请关注公众号:

[C++核心编程] 3、函数提高的更多相关文章

  1. C++核心编程 3 函数提高

    函数默认参数 在C++中,函数的形参列表中的形参是可以有默认值的: 语法:返回值类型 函数名 (参数 = 默认值){ } 实例: #include<iostream> using name ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. python核心编程--笔记

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

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

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

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

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

随机推荐

  1. (瞎学系列)RISC-V & ARM & x86

    reduced instruction set computing (RISC) -> ARM & RISC-V complex instruction set computing (C ...

  2. UIPath踩坑记一在浏览器控件中找不到”打开浏览器“控件

    问题:在浏览器控件中找不到"打开浏览器"控件 解决: 1.检查程序包中是否正常安装"UiPath.UiAutomation"包,如下图12.检查设计设置,是否关 ...

  3. python list dict util (分割,分组)

    1.list数据分割为多个小列表  (java   lists.partition) 2. 分组 import itertools def partition(mylist, size): " ...

  4. 给c++写python的split()与input()【python一样写c++、一】

    python的split确实是很香的功能. 写c++的时候,就会想着,要是能直接input().split()那不挺好. 实际上真的可以:自己动手,丰衣足食. 先放成品展示. int main(){ ...

  5. IDEA中,如何将本地项目推送到Github里面

    具体步骤 1.File->VCS->Create Git Repository 然后进入这样一个界面: 接着我们选中当前项目作为本地库: 设置好之后,我们会发现,项目文件全部标红,这是由于 ...

  6. MySQL学习(六)timestamp & datetime 区别

    参考博客: https://cloud.tencent.com/developer/article/1407693 timestamp只使用datetime一半的存储空间,并且会根据时区变化,具有特殊 ...

  7. 02.SQL

    1. SQL通用语法 SQL语句可以单行或者多行书写,以分号结尾 SQL语句可以使用空格或者缩进来增强语句的可读性 MYSQL数据库的SQL语句不区分大小写,关键字建议使用大写 注释: 单行注释:-- ...

  8. Linux & 标准C语言学习 <DAY12_2>

    一.堆内存     1.什么是堆内存         是进程的一个内存段(text.data.bss.stack.heap)         由程序员手动管理         特点是足够大,缺点是使用 ...

  9. CSP-S划分 解题报告

    n <= 10 爆搜即可 n <= 50 什么乱搞 n <= 400 有一个 \(n^3\) 的 dp 设 dp[i][j] 表示最后一段为 j+1~i 时的最小值 直接三层循环转移 ...

  10. 为什么要用Redis压缩表,是快吗?

    首先需要了解什么是压缩表,推荐Redis设计与实现第二版:压缩列表_w3cschool 为什么要用压缩表呢?是快吗? 其实不是的,恰恰相反,ziplist 是为了节省内存而设计出来的一种数据结构.zi ...