C++重载细究

本文探讨了C++中的函数重载,重点关注static、const修饰符以及缺省参数在重载中的作用。static不能用于重载函数,而const修饰变量和函数可以区分不同的重载形式。const修饰函数时,非成员函数不能使用此方式重载。缺省参数在函数个数和类型不同时可以构成重载,但在函数个数和类型相同时,即使有一个缺省参数,也不构成重载,会导致调用错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,重载只和“参数”“const”有关。和返回值无关。

static在重载函数中

 

无法重载,报错,但如果只有一个static int name(a,b,c)是可以的。

 

const在重载中

const修饰变量

 

其次,如果是简单如const int和int直接不能构成重载,因为函数传参过程无法确定const int和int

但是 char * a和const char* a是区分的,char *a 中a指向的是一个字符串变量,而const char *a指向的是一个字符串常量,所以当参数为字符串常量时,调用第二个函数,而当函数是字符串变量时,调用第一个函数。

对于引用,比如int &i 和const int & i 也是可以重载的,原因是第一个i引用的是一个变量,而第二个i引用的是一个常量

const修饰函数

 

看下面代码,首先

非成员函数不能使用。

下面例子则构成重载

	char myoverload(int a, int b)const
	{
		cerr << "第二个";
		return a + b;
	}
	/*
	const 的是对函数的一个限定,使其无法修改类内的数据成员。const告诉别人这个函数不会
	改变对象的状态。
	声明一个函数用 const 关键字来说明这个函数是一个只读函数(read only method),
	即不会修改任何的数据成员也就是不会改变该对象的状态。该类函数的声明和定义时都要加上
	const 关键字。
	*/
	int  myoverload(int a = 1, int b = 1)
	{
		cerr << "第三个";
		return a + b;
	}

缺省参数在重载中

函数个数和类型相同,一个缺省,一个不缺省时

调用时会出错

fun(int a,int b)和fun(int a,int b=10) 不构成重载,本质还是同一函数

 函数个数和类型不相同时

如下代码,则构成重载,但是函数调用时

会报错的,无法运行,但这个和重载无关了,相当于第二个函数无法使用。

class testload {
	int myoverload(int a, int b, int c = 10)
	{
		cout << "第一个函数";
		return a + b + c;
	}
	char myoverload(int a, int b)
	{
		cerr << "第二个";
		return a + b;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值