立即注册

从零开始,编程论坛

广告联系qq1031180668喜欢网购的小伙伴们看过来啦
查看: 78|回复: 0

[c/c++] C++函数的重载

[复制链接]

classn_11

69

主题

69

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 2019-9-22 16:04:24 | 显示全部楼层 |阅读模式
C++函数的重载



课题目的

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

课题引入

由例题引入函数重载

1)函数重载的数据类型

例题

编写函数求不同的数据类型(int型,float型,double型)的绝对值
以前解法为依次将int型,float型,double型的对应函数打出

[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
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)函数重载也让函数多态,让函数可以对于多种多个参数的相似功能的实现。

函数重载的使用
函数重载时需要对函数的各种情况以同样的函数名进行声明。
如下列代码
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
#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函数来寻找其最大值,而解决三个参数的最大值获取时可以利用已写出的两个参数求最大值函数
[C++] syntaxhighlighter_viewsource syntaxhighlighter_copycode
 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 }


游客
回复
您需要登录后才可以回帖 登录 | 立即注册

手机版|Archiver|小黑屋|sitemap| 从零开始,编程论坛 - 一个单纯的编程学习交流论坛 ( 豫ICP备15032706号 )

GMT+8, 2019-10-15 23:55 , Processed in 1.102139 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表