C++函数重载,函数指针

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;
	
}

	
发布了35 篇原创文章 · 获赞 2 · 访问量 2428

猜你喜欢

转载自blog.csdn.net/weixin_41375103/article/details/104298576