3、面向对象-函数

本文详细介绍了内联函数的原理、与宏函数的区别,以及默认参数和函数占位参数的作用。同时讨论了函数重载的概念、标准和注意事项,包括函数名、参数类型、个数和顺序的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、内联函数

1、作用

不是在调用时发生控制转移,而是在编译时将函数体嵌入在每一个调用处,适用于功能简单,规模较小又使用频繁的函数。递归函数无法内联处理,内联函数不能有循环体,switch语句,不能进行异常接口声明。
 
主要体现在于inline关键字
 
     内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收
获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

2、内联函数和宏函数区别     

  内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。内联函数与带参数的宏定义进行下比较,它们的代码效率是一样,但是内联欢函数要优于宏定义,因为内联函数遵循的类型和作用域规则,它与一般函数更相近,在一些编译器中,一旦关联上内联扩展,将与一般函数一样进行调用,比较方便。 
       另外,宏定义在使用时只是简单的文本替换,并没有做严格的参数检查,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。
 

二、默认参数(为解决传参时数量不够的问题)

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 void print(int x,int y,int z = 100)   //默认参数(当没有参数传入,使用默认参数) 
  6 {                                   //一旦使用了默认参数。后面的所有参数都得加上默认参数
  7     cout << x << y << z << endl;
  8 }
  9 
 10 int main()
 11 {
 12     int a = 1,b = 2;
 13 
 14     print(a,b);  
 15 
 16     return 0;
 17 }

//默认参数(当没有参数传入,使用默认参数) 
//一旦使用了默认参数。后面的所有参数都得加上默认参数

三、函数占位参数

作用:为了方便后期给函数增加参数

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 void print(int x,int y,int = 0)      //占位参数结合默认参数一起使用
  6 {
  7     cout << x << y << endl;
  8 }
  9 
 10 int main()
 11 {
 12     int a = 1,b = 2;
 13     print(a,b);              //传参没有变量接受
 14 
 15     return 0;
 16 }

四、函数重载

 1、重载概念

两个函数名字一样,但是参数类型不一样,根据参数自动匹配

2、重载标准、

①参数类型不一样

②参数个数不一样

③参数的顺序不一样

④函数的返回值不能作为重载的标准

1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 void add(int x,int y)                 //两个函数名字一样,但是参数类型不一样,根据参数自动匹配
  6 {
  7     cout << x+y << endl;
  8 }
  9 
 10 void add(double x,double y)           //重载标准1.参数类型不一样
 11 {
 12     cout << x + y << endl;
 13 }
 14 
 15 void add(int x,int y,int z)          //2.参数个数不一样
 16 {
 17     cout << x + y + z << endl;
 18 }
 19 
 20 void add(int a,char ch)               //重载标准3:参数的顺序不一样
 21 {
 22     cout << (char)(x + ch) << endl;
 23 }
25 /*int add(char ch,int x)           //4.函数的返回值不能作为重载的标准
 26 {
 27 }*/
 28 
 29 int main()
 30 {
 31     int a = 1, b =2;
 32 
 33     add(a,b);
 34 
 35     double c = 1.11,d = 2.222;
 36     add(c,d);
 37 
 38     add(1,2,3);
 39 
 40     add(1,'a');
 41 
 42     add('a',1);
 43     return 0;
 44 }

函数和默认参数的歧义:

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 void f(int x,int y)
  6 {
  7 }
  8 
  9 void f(int x,int y,int z = 0)         //歧义
 10 {
 11     
 12 }
 13 
 14 int main()
 15 {   
 16     f(1,2);
 17     
 18     return 0;
 19 }

3、注意事项

重载函数在本质上是相互独立的不同函数(静态链编)
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值