函数参数的拓展

inline内联函数

最好 小的函数都写成内联函数, 写上inline 编译器不一定内联,

C++中推荐使用内联函数替代宏代码片段
C++中使用inline关键字声明内联函数
内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。
宏替换和函数调用区别
结论:
)内联函数在编译时直接将函数体插入函数调用的地方
)inline只是一种请求,编译器不一定允许这种请求
)内联函数省去了普通函数调用时压栈,跳转和返回的开销
最好 小的函数都写成内联函数, 写上inline 编译器不一定内联,

默认参数

函数默认参数的规则
只有参数列表后面部分的参数才可以提供默认参数值
一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默认参数值
传参时:print(,); 后面的不写就是默认的,写的话就按照写的
在类的构造函数中常用来这样写
void print(int a, int b, int x = , int y=, int z = )
{
printf("x:%d\n", x);
}

函数重载

什么是函数重载

用同一个函数名定义不同的函数
当函数名和不同的参数搭配时函数的含义不同
函数重载发生在同一个类中

函数重载的好处

函数重载的条件

  • 函数名称必须相同。
  • 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
  • 函数的返回类型可以相同也可以不相同。
  • 仅仅返回类型不同不足以成为函数的重载。

注意函数的返回值不做为重载的条件
void myPrint(int a)
{
cout << "a = " << a << endl;
} void myPrint(char *p)
{
cout << "p = " << p << endl;
} void myPrint(int a, int b)
{
cout << "a = " << a << "b = " << b << endl;
}

重载例子

重载的规则,和注意事项

编译器调用重载函数的准则
将所有同名函数作为候选者
尝试寻找可行的候选函数
精确匹配实参
通过默认参数能够匹配实参
通过默认类型转换匹配实参
匹配失败
最终寻找到的可行候选函数不唯一,则出现二义性,编译失败。
无法匹配所有候选者,函数未定义,编译失败。 函数重载的注意事项
重载函数在本质上是相互独立的不同函数(静态链编)
重载函数的函数类型是不同的
函数返回值不能作为函数重载的依据
函数重载是由函数名和参数列表决定的。 函数重载是发生在一个类中里面

当函数重载遇上默认参数

void fun(int a) { cout << "a" << endl; } void fun(int a, char c='a') { cout << "a c"<<endl; } int main() { fun(); // 二义性报错 return ; }

当函数重载遇到const, reference , 指针 重点

普通重载(加上const也不可以), 引用和引用(常量和非常量可以),指针和指针(常量和非常量可以),引用和指针(都可以)

普通const, 二义性

void fun(const int a)
{
cout << "a" << endl;
}
void fun(int a)
{
cout << "a "<<endl;
}
int main()
{
fun(); // 二义性报错
return ;
}

普通const

const指针和普通指针 可以重载

void fun(const int *a) 常
void fun(int *a)可以重载
但是int * const a 不能与int*a
//const 指针
void fun(const int *a)
{
cout << "const int b = 20 调用时形参:const int *a" << endl;
}
void fun(int *a)
{
cout << "int a = 10 调用时形参: int *a"<<endl;
}
int main()
{
int a = ;
fun(&a);
const int b = ;
fun(&b);
cout << "可以重载"<<endl;
return ;
}

指针和普通指针

const引用(常量引用)和const指针一样可以

引用和引用

void fun(const int &a) 和 void fun(int &a)可以重载
引用和指针
void fun(int &a) 和 void fun(int *a)可以重载, 加上const也可以,因为本来就是两种不同类型

// 重载 重写重定义
// 重写发生在两个类之间
// 重载必须在一个类之间

// 重写分为两类
// 1虚函数重写 将发生多态
// 2非虚函数重写 (重定义)

后面写

最新文章

  1. todoList使用教程
  2. Fzu2124 - 吃豆人 BFS
  3. Network of Schools --POJ1236 Tarjan
  4. js windows对象
  5. Open SQL详解
  6. md5算法原理一窥(其一)
  7. jni数据传递——会不断的更新,测试没有问题,再整理进来。
  8. 学习总结 java Iterator迭代器练习
  9. Hadoop学习记录(6)|Eclipse安装Hadoop 插件
  10. android源码编译过程
  11. private、 protected、 public、 internal 修饰符的访问权限
  12. SqlServer中存储过程中将Exec的执行结果赋值给变量输出
  13. Jenkins系统监测
  14. java基础(3)java常用API
  15. Idea的pom文件导入依赖包仍然报错
  16. Deep Learning(深度学习)学习笔记整理系列 一
  17. Hadoop HDFS命令
  18. JsonResponse返回中文乱码问题
  19. 《大话设计模式》c++实现 之工厂模式
  20. 【POJ2154】Color P&#243;lya定理+欧拉函数

热门文章

  1. HTML中,input元素的 Disabled属性 所产生的后端无法接收数据的问题
  2. [LeetCode] 898. Bitwise ORs of Subarrays 子数组按位或操作
  3. [LeetCode] 416. Partition Equal Subset Sum 相同子集和分割
  4. 中移物联网Java面试-社招-三面(2019/07)
  5. 收藏一份devmem源码
  6. EF Code Frist 执行 nuget命令
  7. 基于Django的Rest Framework框架的序列化组件
  8. nacos服务注册与发现及服务配置实现
  9. Unity Shader 序列帧动画
  10. vue中js文件中export常见方法及使用