文档章节

C++函数

世__界
 世__界
发布于 2015/04/12 21:52
字数 761
阅读 9
收藏 0

一.参数传递机制

  1. 函数被调用时才分配形参的存储单元。

  2. 实参可以是常量、变量或表达式。

  3. 实参必须与形参相符(对应实参与形参的值相同)。

  4. 传递是传递参数值,即单向传递。

二.内联函数

  1. 声明时使用关键字 inline

    例如 inline int add(int a,int b)

  2. 目的:编译时在调用处用函数体进行替换,节省了参数传递、控制转移等开销。

  3. 注意:(1)内联函数体内要简单,不能有循环语句和switch语句。

               (2)内联函数的声明必须出现在内联函数第一次被调用之前。

三.带默认形参值的函数

  1. 函数在声明时可以预先给出默认的形参值,调用时如果给出实参,则采用实参值,否则采用预先给出的默认形参值。

  2. 缺省形参值必须从右向左顺序声明,并且在缺省形参值的后面不能有非缺省形参值的参数。因为调用时实参代替形参是从左到右的顺序。

    int add(int x,int y=5,int z=6);    //正确。

    int add(int x=1;int y=9;int z);    //错误。

#include<iostream>
using namespace std;
void add(int a=1,int b=2)
{
 int z;
 z=a+b;
 cout<<z<<endl;
}
void main()
{
 add();
 add(2);
 add(2,3);
}

                  三次调用函数依次输出的值为3,4,5

四.重载函数

  1. c++允许功能相近的函数在相同的作用域内以形同函数名声明,从而形成重载函数。

  2. 重载函数的形参必须不同:个数不同或类型不同。

  3. 编译器不以形参名来区分,

    int add(int x,int y)

    int add(int a,int b)

  4. 编译器不以返回值来区分。

    int add(int a,int b)

    void add(int a,int b)

 #include<iostream>
using namespace std;
void add(int a,int b)
{
 int z;
 z=a+b;
 cout<<"z="<<z<<endl;
}
void add(double a,double b)
{
 double z;
 z=a+b;
 cout<<z<<endl;
}
void main()
{
 add(4.4,5.5);      //z=9.9      
 add(2,3);          //z=5
}

                   在主函数中调用两次add函数,第一次调用void add(double a,double b),第二次调用void add(nt a,int b)

五.函数模板

  1. 函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数体设计。

  2. 声明方法:

    template<typename  标示符>

    例 .求绝对值函数的模板。

 #include<iostream>
using namespace std;
template<typename T>
T abs(T x)
{
   return x<0?-x:x;
}
void main()
{
   int n=-5;
   double d=-5.5;
   cout<<abs(n)<<endl;            //5
   cout<<abs(d)<<enfl;            //5.5
}

           分析:编译器从调用abs( )时实参的类型,推导出函数模板的类型参数。例如,对于调用表达式abs(n),由于实参n为   int型,所以推导出模板中类型参数T为int。   当类型参数含义确定后,编译器将以函数模板为样板,生成一个函数:

                     int abs(int x)

                    { return x<0?-x:x;}

 

© 著作权归作者所有

上一篇: C++面向对象
下一篇: C++引用
世__界
粉丝 1
博文 24
码字总数 6923
作品 0
驻马店
私信 提问
关于Nebula3工程的几个编译选项

研究一下人家是怎么通过编译选项来优化性能的 DEBUG: C++/Code Generation/Enable String Pooling: Yes (/GF) 该选项使编译器能够为执行过程中程序映像和内存中的相同字符串创建单个副本,从...

长平狐
2012/11/12
89
0
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特...

知然
2013/01/27
0
0
V8引擎扩展的方式 实现cef C++ js交互

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/shuilan0066/article/details/96857363 交互方法,使用V8引擎扩展的方...

夜雨朝露
07/22
0
0
4-C++远征之起航篇-学习笔记

c++教程起航篇 我们会讲C++那些事,C++与C语言的关系。 C++诞生于贝尔实验室。 C++之父: 本贾尼·斯特劳斯特卢普 C++社区排行榜 最新排行,c++排名第三,Python排名第四 C++语言的应用领域:...

天涯明月笙
2018/07/20
0
0
c语言基础学习11_项目实战:IDE(集成开发环境)

============================================================================= ============================================================================= 涉及到的知识点有: 一......

黑泽明军
2018/01/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
46分钟前
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
8
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
78
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部