c++函数重载:函数名相同,形参列表不同
// h_mingcheng.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
//函数的返回值,形参列表(参数个数,参数类型,参数顺序)
//两个函数的函数的返回值,形参列表相同,则这两个函数是同一类型的函数,
//就可以用一个指针指向这两个函数
int func(int a, int b)
{
cout << "fun1" << endl;
return 0;
}
int func(int a)
{
cout << "fun2" << endl;
return 0;
}
int main()
{
func(10, 20);
func(10);
return 0;
}
(根据传入参数的的不同,调用不同的函数)
若函数名相同,形参列表相同,但返回值不同,不是重载,返回值并不构造函数重载的条件
如果想用函数重载,不要使用默认参数,避免出现调用函数冲突
// h_mingcheng.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
//函数的返回值,形参列表(参数个数,参数类型,参数顺序)
//两个函数的函数的返回值,形参列表相同,则这两个函数是同一类型的函数,
//就可以用一个指针指向这两个函数
int func(int a, int b)
{
cout << "fun1" << endl;
return 0;
}
int func(int a,int b,int c=300)
{
cout << "fun2" << endl;
return 0;
}
int main()
{
func(10, 20);//此时,再传递两个会报错,因为两个函数都是传入两个参数
return 0;
}
关于参数调用,
1.如果能够严格匹配,就调用完全匹配的,
2.如果没有完全匹配的,调用隐式转换,
3.如果都匹配不到,调用失败。
c++函数重载底层实现
函数指针
// h_mingcheng.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
//函数的返回值,形参列表(参数个数,参数类型,参数顺序)
//两个函数的函数的返回值,形参列表相同,则这两个函数是同一类型的函数,
//就可以用一个指针指向这两个函数
int func(int a, int b)
{
cout << "fun1" << endl;
return 0;
}
//1.定义一种函数类型
typedef int(MY_FUNC)(int, int);
//2定义一个指向这种寒素类型的指针类型
typedef int(*MY_FUNC1)(int, int);
//3.
int main()
{
MY_FUNC *fp = func;
fp(10, 20);
MY_FUNC1 fp1 = func;
fp1(10, 20);
int(*fp3)(int, int) = func;////会调用两个参数的func
fp3(10, 30);
return 0;
}