| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> <C++>C++入门——缺省参数、函数重载 -> 正文阅读 |
|
[C++知识库]<C++>C++入门——缺省参数、函数重载 |
1. 缺省参数缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。 这里有个例子:车子有个备胎,当车轮坏掉时才会启用备胎,如果有车轮就用车轮。 翻译一下:函数有缺省参数,当函数没有指定实参就用缺省值,如果有实参就用实参。(额,如果还不太好理解就请联想一下另一种“备胎”😢); 1.1 缺省参数的分类
1.2 缺省参数的应用栈的初始化
1.3 缺省参数的注意点1?? 缺省值必须是常量或者全局变量 2?? C语言不支持(编译器不支持 ) 3????注意!:缺省参数不能在函数声明和定义中同时出现
只用在声明给缺省值,定义里不用给。 在这稍微解释一下:因为编译阶段我们包含的头文件已经展开了,我们拥有了声明(但还没拿到定义),这时如果我们没有传参,编译器就要去找缺省值,就成功在声明中找到了。如果只把缺省值放在定义里,编译阶段还拿不到定义,就找不到缺省值,会报错!(汇编阶段生成符号表才能找到定义) 2.函数重载2.1 函数重载概念函数重载:是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的
下面两个函数属于函数重载吗?
上面两个函数只有返回值不同,不构成函数重载。因为调用的时候没法判断要调用哪个。 2.2 C++支持函数重载的底层逻辑为什么C++支持函数重载,而C语言不支持函数重载呢? 1??实际我们的项目通常是由多个头文件和多个源文件构成,而通过我们C语言阶段学习的编译链接,我们可以知道,【当前a.cpp中调用了b.cpp中定义的Add函数时】,编译后链接前,a.o的目标文件中没有Add的函数地址,因为Add是在b.cpp中定义的,所以Add的地址在b.o中。那么怎么办呢? 6??通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持了重载。 结论:
2.3 extern“C”有时候在C++工程中可能需要将某些函数按照C的风格来编译**,**在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译。实际上C和C++都可以相互调用(C->C、C->C++、C++ ->C++、C++ ->C) 比如:tcmalloc是google用C++实现的一个项目,他提供tcmallc()和tcfree两个接口来使用,但如果是C项目就没办法使用,那么就使用extern “C”来解决。 鉴于大家都是初学者,我们就来手把手教学如何调用静态库 假设我们想调用栈,首先将栈封装成静态库: 完成后重新生成解决方案,生成Stack_C.lib文件 在Stack_C\Debug文件下能找到静态库 之后我们创建一个cpp文件,通过静态库使用栈
找到你的静态库生成的地址,我的是Stack_C\Debug,找到之后点确认 两个静态库之间记得要加 但是你这样运行还是会有链接错误 现在把栈的 之前链接不上的原因是:test文件是cpp文件,stack是c文件,cpp通过符号表找不到c的函数(上面解释过:两者的函数名修饰规则不同) 那么我们能否让cpp文件调用c呢?加上个
开始尝试c调用c再搞一个test.c文件设置好C的附加库目录就能成功执行了 重点是如何c调用cpp 跟上面的操作一样,再创建一个文件叫Stack_CPP,封装成CPP的静态库,让test.c文件设置好CPP的附加库目录、调用.h文件 执行之后仍然会报错(因为命名规则不同,找不到) 这时,我们在cpp文件里用上条件编译,当在cpp文件中EXTERN_C 被识别成extern “C”,在c文件里隐藏EXTERN_C(因为.c文件不认识extern “C”)这样让cpp的名字修饰规则跟c一样,就能链接起来了
还有一种写法(
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 15:20:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |