c++函数相关

xiaoxiao2021-02-28  49

#include <iostream> using namespace std; //宏定义是由预处理器处理 //斜杠的作用是换行,连接下段代码 #define MAX(a, b) \     (a) > (b) ? (a) : (b) //inline为内联函数关键字,内联函数由编译器处理,当函数为内联函数时,编译器会把主代码中内联函数名直接替换为内联函数的代码,这样运行起来会减少内存开销 inline int printAB(int a, int b) {     cout << "a=" << a << endl;     cout << "b=" << b << endl;     return 0; } //函数有默认形参时,调用此函数时,可以不传递值进来,当传递值进来,默认值就会被替换 int func1(int a = 666) {     cout << "a=" << a << endl;     return 0; } //函数有多个参数且包含默认形参时,默认形参一定要定义在最右边,不然报错,可以定义多个默认参数,但一定要从右向左连续 int get_volume(int width, int height, int len = 100) {     int volume = len * width * height;     cout << "volume=" << volume << endl;     return 0; } //函数的形参有占位参数(本质是c++设计时为了可拓展性发明的,但其实是c++典型的一个坑,发展成熟后发现确实没有什么作用),但在主函数中调用时,需要用值去填补占位参数的空间,尽管这个值根本用不到 int func2(int a, int) {     return 0; } //函数的重载:函数名相同,参数列表不同(参数个数不同,参数类型不同,参数顺序不同),但只有返回值不同,其他都相同时,并不能构成重载,会报错误 //当使用函数重载时,尽量不要写函数默认形式参数,为了避免歧义,出现函数调用冲突 //函数重载的调用是由规则的,当可以完全匹配的时候匹配完全匹配的,如果不可以完全匹配,先进行隐式转换,进行匹配,如果还是匹配不成功,则会报错 //函数重载的原理是c++根据符合条件的重载函数,对函数进行重新命名,这样就不会发生歧义了 int func3(int a, int b) {     return 0; } int func3(int a, char b) {     return 0; } /* float func3(int a, int b) {     return 0; } int func3(int a, int b, int c = 100) {     return 0; } */ //函数重载与函数指针是完全不冲突,不歧义的,不论用下面3种方法中的哪一种,它们都是包含两个形参函数的指针,而不是包含三个形参函数的指针 int func4(int a, int b) {     cout << "a=" << a << endl;     cout << "b=" << b << endl;     return 0; } int func4(int a,int b,int c) {     cout << "a=" << a << endl;     cout << "b=" << b << endl;     cout << "c=" << c << endl;     return 0; } //1.定义函数类型 typedef int (MY_FUNC)(int, int); //2.定义函数指针类型 typedef int (* MY_FUNC_P)(int, int); //3.直接定义成函数指针类型 int (* p3)(int, int); int main() {     int a = 10;     int b = 20;     for (int i = 0; i < 10; i++)     {         a++;         b++;         printAB(a, b);         /*         {             cout << "a=" << a << endl;             cout << "b=" << b << endl;         }         */     }     func1();     int len = 10;     int width = 20;     int height = 30;     get_volume(len, width);     func2(a, 10);     //函数类型指针     MY_FUNC *p1 = NULL;     p1 = func4;//直接赋值函数名字,不需要加括号,即为指针p指向了函数func4     p1(111, 222);     MY_FUNC_P p2 = NULL;     p2 = func4;//p1与p2类型其实是完全相同的,都为函数指针     p2(222, 333);     p3 = func4;     p3(333, 444);     return 0; }
转载请注明原文地址: https://www.6miu.com/read-2619951.html

最新回复(0)