C++基础——函数重载

一. 函数重载的定义

C++支持在同一作用域中出现同名函数,但是要求同名函数的形参不能一样(个数,类型等)。这样C++函数调用就表现出多态的特点,使用更加灵活。

1.参数列表个数不一样

#define _CRT_SECURE_NO_WARNINGS 1 
#include<iostream>
using namespace std;
void func()
{
	cout << "func()" << endl;
}
void func(int a,int b)
{
	cout << "func(a, b)" << endl;
}
int main()
{
	func();
    func( 1 , 2 ); 
}

当在同一作用域下调用func函数这个先调用哪一个呢?当然是调用第一个因为只有第一个和func传的参数一样。 

这里也可以看出当两个同名函数构成函数重载时编译器会选择最适合的函数进行调用

2. 参数的类型不一样

#define _CRT_SECURE_NO_WARNINGS 1 
#include<iostream>
using namespace std;
void func(double a, double b )
{
	cout << "func( double a, double b)" << endl;
}
void func(int a,int b)
{
	cout << "func(a, b)" << endl;
}
int main()
{
	func(1.0, 2.0);
	func(1, 2);
}

当调用函数时参数类型不一样也会构成重载。 

3.参数顺序不一样

#define _CRT_SECURE_NO_WARNINGS 1 
#include<iostream>
using namespace std;
void func( int a, double b )
{
	cout << "func( int a, double b)" << endl;
}
void func(double a,int b)
{
	cout << "func(double a,int b)" << endl;
}
int main()
{
	func(1, 2.0);
	func(1.0, 2);
}

当参数顺序也不一样时也构成重载

4.重载和const 形参

当形参被const修饰什么时候构成函数重载呢?

#define _CRT_SECURE_NO_WARNINGS 1 
#include<iostream>
using namespace std;
void func( const int& a )
{
	cout << "func( const int& a)" << endl;
}
void func(int& a)
{
	cout << "func(int a)" << endl;
}
int main()
{
	int i = 10;
	func(i);
	func(10);
}

当形参被const修饰且const 是修饰对象时 i 无法传给const int &只能传给int& 这样就构成了函数重载 这里 const int& 和int &改成const int*和int* 时候也是一样的构成函数重载,但要是换成 int* const和int *时并不会构成函数重载而是会重复定义

#define _CRT_SECURE_NO_WARNINGS 1 
#include<iostream>
using namespace std;
void func( int* const a )
{
	cout << "func( int* const a )" << endl;
}
void func( int* a )
{
	cout << "func( int* a )" << endl;
}
int main()
{
	int i = 10;
	func(&i);
}
5. 函数重载+缺省函数
#define _CRT_SECURE_NO_WARNINGS 1 
#include<iostream>
using namespace std;
void func( int a= 2 )
{
	cout << "func( int a= 2  )" << endl;
}
void func(  )
{
	cout << "func(  )" << endl;
}
int main()
{
	func();
}

这里调用func函数的时候编译器不知道应该匹配哪一个会造成歧义。

6. 构成函数重载的条件 

第一,函数名要相同,第二,函数参数的个数,类型或者顺序不一样。 

返回值类型不同不可以构成函数重载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值