C++函数的重载

时间:2019-09-16
本文章向大家介绍C++函数的重载,主要包括C++函数的重载使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

C++函数的重载


 


课题目的


学生通过本课了解函数重载的优点,掌握并熟用函数重载。

课题引入


由例题引入函数重载

1)函数重载的数据类型

例题

编写函数求不同的数据类型(int型,float型,double型)的绝对值

以前解法为依次将int型,float型,double型的对应函数打出

 int abs1(int x) { if (x<0) x=-x ; return x ;}
 float abs2(float x) { if (x<0) x=-x ; return x ;}
 double abs3(double x) { if (x<0) x=-x ; return x ;}
 int main()
 {
    cout<<abs1(-1)<<abs2(-1.0f)<<abs3(-1.0);
    return 0;
 }

观察以上三条函数,发现除了数据类型之外,完全完全相同,然而需要三个函数来实现其功能。

讨论:这样做有些什么缺点

答:编写起来麻烦,更何况功能接近,受数据类型的干扰,太多的函数名麻烦 >>>>>可读性太低

如果使用函数重载的话,例题应这样书写:

 int abs(int x) { if (x<0) x=-x ; return x ;}
 float abs(float x) { if (x<0) x=-x ; return x ;}
 double abs(double x) { if (x<0) x=-x ; return x ;}
 int main()
 {
    cout<<abs(-1)<<abs(-1.0f)<<abs(-1.0);
    return 0;
 }

如上可见,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。

2)函数重载的元素个数

阅读以下代码,谈谈函数重载的特别处:

void f()
{
    cout<<"1"<<endl;
}
 
void f(int x)
{
    cout<<"2"<<endl;
}
 
void f(int x,int y)
{
    cout<<"3"<<endl;
}
 int main()
{
    f();
    f(1);
    f(3,4);return 0;
}

如上可见,可以实现重载函数多个参数数目种类的使用,这样使函数功能更能满足多个元素。

 

综上所述 :

函数重载的特点

1)函数的参数个数不同。
2)函数的参数类型不同或者参数类型顺序不同。
 
函数重载的优点
1)函数重载方便在后期动态调用。便于扩充方法内容,可以少写重复代码。
2)函数重载也让函数多态,让函数可以对于多种多个参数的相似功能的实现。
 
函数重载的使用
函数重载时需要对函数的各种情况以同样的函数名进行声明。
如下列代码
#include<iostream>
using namespace std;
int add();//分别对函数进行声明
int add(int a);
int add(double a);
double add(int a,double b);
int main()
{
    add();
    add(5);
    add(2.0);
    add(1,2.0);
    return 0;
}
int add()
{
    return 1+2;
}
int add(int a)
{
    return a+2;
}
int add(double a)
{
    return a+2;
}
double add(int a,double b)
{
    return a+b;
}

课题实验


编写一函数,能求两个或三个整数或实数的最大值。

解题思路:将两个整数,三个整数,两个实数,三个实数的四种可能的函数通过函数重载以max函数来寻找其最大值,而解决三个参数的最大值获取时可以利用已写出的两个参数求最大值函数
 1 #include<iostream>
 2 using namespace std;
 3 int max(int i, int j);//重载函数
 4 int max(int i, int j, int k);//不同参数数目
 5 double max(double i, double j);//不同参数类型
 6 double max(double i, double j, double k);
 7 int max(int i, int j)
 8 {
 9     return i > j ? i : j; //如果i大于j 返回i,否则返回j;
10 }
11  
12 int max(int i, int j, int k)
13 {
14     return max( max(i, j), k); //线比较i和j,最后比较k
15 }
16 
17 double max(double i, double j)
18 {
19     return i > j ? i : j; //如果i大于j 返回i,否则返回j;
20 }
21 
22 double max(double i, double j, double k)
23 {
24     return max( max(i, j), k); //线比较i和j,最后比较k
25 }
26 
27 int main()
28 {
29     cout<<max(1,5) <<"  "<<max(1.5,0.9)<<"  "<<max(5,3,7)<<"  "    
30    <<max(5.1,3.1,7.5)<<endl;
31     return 0;
32 }

 

 

 

 

$flag 上一页 下一页