函数多态是C++在C语言基础上新增的功能。默认参数让您可以使用不同数目的参数调用同一个函数,而函数多态让您可以使用多个同名的函数。
1.1 函数重载的使用
函数重载可以是以下几种情况:1. 参数的个数不同,2. 参数的类型不同,3. 顺序不同, 和返回值无关
问题:如何访问一个重载函数的地址?
回答: 我们可以通过函数指针进行匹配。
#include<iostream>
#include<stdio.h>
//参数的个数,参数的类型不同,顺序不同,返回值无关
void go(int a)
{
std::cout << a;
}
void go(double a) // 参数类型不同
{
std::cout << a;
}
void go(double a,int b ) //参数个数不同
{
std::cout << a << b;
}
void go(int a, double b) //参数的顺序不同
{
std::cout << a << b;
}
int main()
{
void(*pgo1)(int a)=go;
void(*pgo2)(double a)=go;
void(*pgo3)(double a, int b)=go;
void(*pgo4)(int a, double b)=go;
printf("%p\n",pgo1);
printf("%p\n", pgo2);
printf("%p\n", pgo3);
printf("%p\n", pgo4);
getchar();
return 0;
}
输出
1.2 函数的默认参数
在C语言中我们是没有默认参数这一个说法的,默认参数是C++新的功能。默认参数是指的是当函数调用中省略实参时自动使用的一个值。对于带参数列表的函数,必须从右往左添加默认值,也就是说,要为某个参数设置默认值,则必须为右边的所有参数提供默认值。 另外,实参按照从左往右的顺序依次赋值给相应的形参,而不能跳过任何参数。 通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
//默认参数必须放在右边
//默认参数中间不允许出现不默认的
void print(int c,int a = 1, int d=2, int b = 3)
{
std::cout << a<<b<<c << std::endl;
}
void print(double c)
{
}
int main()
{
//print(1,2,3);
//函数指针没有默认参数,必须全部输入数据
//函数重载与函数默认参数冲突,需要你输入的参数类型不一个,个数不一样,顺序不一样不会出现问题,否则一定报错
void(*pt1)(int c, int a , int d , int b ) = print;
pt1(100,1,2,3);//函数指针调用,没有用默认的
print(100);
system("pause");
return 0;
}
注意一下
1. 函数指针是不可以输入默认参数的。
2. /函数重载与函数默认参数冲突,优先可以使用命名空间解决,实在不行使用函数指针解决。