c18函数的重载.cpp
#include <iostream>
#include <string.h>
using namespace std;
void fun4(int a)
{
cout << "int a: "<< a << endl;
}
void fun4(double a)
{
cout << "double a: " << a << endl;
}
void fun4(int a, double b)
{
cout << "int a, double b" << endl;
}
// 1.返回值不同,不能作为重载的条件,因为会产生二义性,
//void fun4(int a, double b) {} 调用时fun(3, 1.2)时 可能不需要返回值,程序就分不清楚执行哪个程序了
// int fun4(int a, double b)
// {
// return 1;
// }
void fun4(double b, int a)
{
cout << "double b , int a" << endl;
}
// 2.函数重载碰上默认参数,也会产生二义性
// void fun4(double b){} 当调用 fun4(3.14)时 程序分不清走哪个函数 所以会产生二义性
// void fun4(double b=3.14, int a=6)
// {
// cout << "默认double b ,int a:" << endl;
// }
// 函数重载的引用
// 传递实参的时候是可读可写,找重载时也匹配一个可读可写的函数
void fun5(int& a)
{
cout << "int &a" << endl;
}
// const 常量,只读不写
void fun5(const int& a) // const int &a = 10
{
cout << "const int &a" << endl;
}
// 会产生二义性,已经有引用的重载,就不要再写普通的重载
// void fun5(int a)
// {
// cout << "int a" << endl;
// }
int main()
{
// 传不同的值,走不同的函数(虽然函数名一样,但是传递的参数不同,就会执行不同的函数)
fun4(2); // void fun4(int a)
fun4(3.14); // void fun4(double a)
fun4(3, 1.2); // void fun4(int a, double b)
fun4(1.2, 3); // void fun4(double b, int a)
int a = 10;
fun5(a); // void fun5(int& a) // 传递实参的时候是可读可写,找重载时也匹配一个可读可写的函数
fun5(20); // void fun5(const int& a) // const 常量
return 0;
}