函数重载和默认参数
Posted 邓戈麟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数重载和默认参数相关的知识,希望对你有一定的参考价值。
区别一是参数类型不同,二是参数个数不同
仅有函数返回值不同也是区分不了重载函数的
1 #include <iostream> 2 using namespace std; 3 4 void go(int i, double db)//参数的个数,参数的类型不同,顺序不同,与返回值无关 5 { 6 7 } 8 9 void go(double db, int i) 10 { 11 12 } 13 14 void main() 15 { 16 17 system("pause"); 18 }
//定义函数指针并初始化
1 #include <iostream> 2 using namespace std; 3 4 void go(int a)//参数的个数,参数的类型不同,顺序不同,与返回值无关 5 { 6 std::cout << a; 7 } 8 9 void go(double a) 10 { 11 std::cout << a; 12 } 13 14 void go(double a, int b) 15 { 16 std::cout << a << b; 17 } 18 19 void go(int a, double b) 20 { 21 std::cout << a << b; 22 } 23 24 void main() 25 { 26 void(*pgo1)(int a) = go;//定义函数指针并初始化 27 28 void(*pgo2)(double db) = go; 29 30 void(*pgo3)(double a, int b) = go; 31 32 void(*pgo4)(int a, double b) = go; 33 34 printf("%p\n", pgo1); 35 36 printf("%p\n", pgo2); 37 38 printf("%p\n", pgo3); 39 40 printf("%p\n", pgo4); 41 42 system("pause"); 43 }
//默认参数可以多于1个,但必须放在参数序列的后部
//默认参数必须放在右边
//默认参数中间不允许出现不默认的
1 #include <iostream> 2 using namespace std; 3 4 //默认参数必须放在右边 5 //默认参数中间不允许出现不默认的 6 void print(int c, int a = 1, int b = 3)//默认参数可以多于1个,但必须放在参数序列的后部 7 { 8 std::cout << a << " " << b << " " << c << std::endl; 9 } 10 11 void main() 12 { 13 print(1); 14 15 system("pause"); 16 }
//error C2668: “print”: 对重载函数的调用不明确
1 #include <iostream> 2 using namespace std; 3 4 void print(int c, int a = 1, int b = 3) 5 { 6 std::cout << a << " " << b << " " << c << std::endl; 7 } 8 9 //error C2668: “print”: 对重载函数的调用不明确 10 11 void print(int c) 12 { 13 14 } 15 16 void main() 17 { 18 print(1); 19 20 system("pause"); 21 }
解决办法:使用命名空间,或者函数指针
函数指针没有默认参数
//函数指针没有默认参数,必须全部输入数据
//函数重载与函数默认参数冲突,需要输入的参数类型不一样,个数不一样,顺序不一样,不会发生错误,否则一定报错
1 #include <iostream> 2 using namespace std; 3 4 void print(int c, int a = 1, int b = 3) 5 { 6 std::cout << a << " " << b << " " << c << std::endl; 7 } 8 9 //error C2668: “print”: 对重载函数的调用不明确 10 11 void print(int c) 12 { 13 14 } 15 16 //函数指针没有默认参数,必须全部输入数据 17 //函数重载与函数默认参数冲突,需要输入的参数类型不一样,个数不一样,顺序不一样,不会发生错误,否则一定报错 18 19 void main() 20 { 21 void(*pt1)(int c, int a, int b) = print;//函数指针 22 23 pt1(100, 1, 2);//函数指针调用,没有默认参数 24 25 system("pause"); 26 }
以上是关于函数重载和默认参数的主要内容,如果未能解决你的问题,请参考以下文章