C++函数重载

函数重载主要以以下几个问题展开:
1,C++为什么支持函数重载,C语言不支持?
2,函数重载要注意什么?
3,C++和C代码之间如何互相调用?

#include<iostream>

//不同参数类型的比较函数

bool Compare(int a, int b)
{
	std::cout << "compare_int "<< std::endl;
	return a > b;
}
bool Compare(double a, double b)
{
	std::cout << "compare_double" << std::endl;
	return a > b;
}
bool Compare(const char* a, const char* b)
{
	std::cout << "compare_char" << std::endl;
	return strcmp(a, b) > 0;
}
int main()
{
	Compare(10, 20);
	Compare(11.1, 11.2);
	Compare("abcd", "abcde");
	return 0;
}

在这里插入图片描述
编译器没有报函数重定义错误,运行成功。这是典型的函数重载。

函数重载:一组函数,其中函数名相同,参数列表的个数或者类型不同,那么这一组函数就称作->函数重载。
C++代码产生函数符号时,是以函数名+参数列表类型组成。
C语言产生函数符号时,只由函数名决定。
所以在 .c文件中,因为函数名相同,所以会产生链接错误。
C++中,函数名相同时还带上了参数列表:

bool Compare(int a, int b)//Compare_int_int
bool Compare(double a, double b)//Compare_double_double
bool Compare(const char * a, const char * b)//Compare_char_char

当在main函数中声明函数时,因为作用域原因,函数调用时只取作用域内的函数声明。
在这里插入图片描述
一组函数要说是重载函数,必须要是先处于相同的作用域下。
在这里插入图片描述
可以使用#include<typeinfo>查看参数类型
在这里插入图片描述
这说明int和const int 主体都是int,是相同的。
在这里插入图片描述
在这里插入图片描述

运行成功了。

constvolatile的时候是怎么影响形参类型的?(后续在完善)

一组函数,函数名相同,参数列表也相同,仅仅是返回值不同,这种不叫函数重载。返回值是否相同,与该函数是否为重载函数没有任何关系。

C++调用C代码,无法直接调用,但可以将C函数的声明包含在extern "c"{}中,让编译器知道此方法是C定义即可。
C调用C++代码,将C++源码写在extern "c"{}中。

#ifdef _cplusplus
extern "c" {
#endif
	int sum(int a, int b)
	{
		return a + b;
	}
#ifdef  _cplusplus
}
#endif

只要是C++编译器,都内置了_cplusplus这个宏。宏内的方法都可以直接调用。生成的都是C接口的函数,但C和C++都可以调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值