请选择 进入手机版 | 继续访问电脑版
微信扫一扫 分享朋友圈

已有 306 人浏览分享

开启左侧

C++函数的重载

[复制链接]
306 0
C++函数的重载



课题目的

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

课题引入

由例题引入函数重载

1)函数重载的数据类型

例题

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

[mw_shl_code=cpp,true]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[/mw_shl_code] 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)函数重载也让函数多态,让函数可以对于多种多个参数的相似功能的实现。

函数重载的使用
函数重载时需要对函数的各种情况以同样的函数名进行声明。
如下列代码
[mw_shl_code=cpp,true]#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;
}[/mw_shl_code]
课题实验

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

解题思路:将两个整数,三个整数,两个实数,三个实数的四种可能的函数通过函数重载以max函数来寻找其最大值,而解决三个参数的最大值获取时可以利用已写出的两个参数求最大值函数
[mw_shl_code=cpp,true] 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;[/mw_shl_code]
32 }


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

本版积分规则

热门资讯
网友晒图
图文推荐
  • 联系我们
  • 邮箱:admin@c0ks.com(请把#改成@)
  • 电话:18530790808
  • QQ客服 1031180668
  • 工作时间:周一至周五(早上9点至下午5点)
  • 微信二维码

  • 扫描访问手机版

Archiver|手机版|小黑屋|从零开始

GMT+8, 2020-5-31 13:55 , Processed in 0.092180 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

  • QQ: 1031180668

    客服电话

    18530790808

    电子邮件

    admin@c0ks.com

    在线时间:8:00-16:00