C++函数

一.参数传递机制

  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;}

 

转载于:https://my.oschina.net/u/2294392/blog/399293

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值