【hello C++】初识C++(中)

目录

一、函数重载

1.1函数重载的概念

 1.2 C++支持函数重载的原因

二、C/C++程序调用

2.1 静态库如何生成

2.2 C++程序调用C写的库

2.3 C程序调用C++写的库


【hello C++】初识C++(中)_第1张图片

听说30岁以后的人生很精彩~~ 

今天的内容来了,敲黑板,这可是重点!!!

一、函数重载

自然语言中,一个词可以有多重含义,人们可以通过上下文来判断该词所要表达的真实意思,即该词被重载了。

下面举一个例子:

以前有一个笑话,国有两个体育项目大家根本不用看,也不用担心。一个是乒乓球,一个是男足。前者是“ 谁也赢不了! ,后者是 谁也赢不了!”在此没有冒犯的意思,还请大家见谅!
那函数重载是什么呢?

1.1函数重载的概念

函数重载是函数中的一种特殊情况,C++允许在同一作用域中声明几个功能类似同名函数,这些个同名函数的形参列表(参数个数 或 类型 或 顺序)不同,常用来处理实现功能类似数据类型不同的问题

下面给个示例:

1.参数个数不同

【hello C++】初识C++(中)_第2张图片 2.参数类型不同

【hello C++】初识C++(中)_第3张图片

 3.参数顺序不同

【hello C++】初识C++(中)_第4张图片

注意:返回值不同是不构成函数重载的

 1.2 C++支持函数重载的原因

为什么C++支持函数重载,而C语言不支持函数重载?
这要从它们到底是怎样从一个源文件变成可执行文件说起。
在C/C++中,一个程序要运行起来,需要经过以下四个阶段: 预处理、编译、汇编、链接

预处理阶段:头文件的展开、宏替换、条件编译、去掉注释;

编译阶段:语法检查、生成汇编代码;

汇编阶段:把汇编代码转换为二进制机器码;

连接阶段:合并断表、符号位的合并和重定位

在连接阶段,我们就将各种汇编好的代码进行链接。

连接时,面对函数,每个编译器都有自己的函数名修饰规则,C语言是通过函数名去进行找的(重载的函数名都一样)无法区分,而C++根据自己的函数名修饰规则,只要参数不同,修饰出来的名字就不一样,自然可以区分,支持函数重载。

这部分属于了解性的内容,不必太过注意细节,不要有太大压力。

二、C/C++程序调用

 C++程序调用C++写的库,C程序调用C写的库,这两种情况肯定是可以的。

那么C++程序调用C写的库呢?C程序调用C++写的库呢?

这两种情况都是可以的。

注意这里的库指的是静态库

2.1 静态库如何生成

【hello C++】初识C++(中)_第5张图片

 最后点击 “ 应用 ” 即可。

2.2 C++程序调用C写的库

1.将C程序写的库生成一个静态库,并记录此静态库的位置

【hello C++】初识C++(中)_第6张图片

 2. 配置C++程序的属性

【hello C++】初识C++(中)_第7张图片

 此处便是刚才存放静态库的地址

【hello C++】初识C++(中)_第8张图片

 此处便是静态库的名称

3. 使用 extern "C"{ }

【hello C++】初识C++(中)_第9张图片

2.3 C程序调用C++写的库

1.将C++程序写的库生成一个静态库,并记录此静态库的位置;

2. 配置C程序的属性;

注意:

C++是兼容C的,因此C++调用C的时候在C++程序那使用extern "C" 告诉C++按照C的规则对查找。

而在C调用C++时,C不知道C++的规则因此不能向上述那样,我们应该在将C++编译成静态库前对C++的函数进行如下操作,然后在进行编译。

【hello C++】初识C++(中)_第10张图片

今天的内容到此结束,我们学习了函数重载是什么、C++支持函数重载的原理,C/C++程序及静态库的相互调用。

才疏学浅,如果有什么问题的话还请大家评论指出,谢谢大家!!!

你可能感兴趣的:(C++,c++)