C++(十九)

前言:

本文主要讲解函数的重载与函数模板。

一,重载。

重载就是定义多个书和类型不同的同名函数。

在前文中,我们曾写过一个判断用户所输入的数大小的C++程序:

#include <iostream>
using namespace std;
 
inline int max(int a,int b){
  if(a>b)
   return a;
  else
   return b;
}
int main ()
{
  int c,d,e;//定义两个整数
  cout<<"请输入两个整数:";//提示用户输入
  cin>>c>>d;//获取所输入两个整数
  e=max(c,d);//调用函数,并将两个整数作为参数传入
  cout<<"较大的数是:"<<e<<endl;//输出结果
   return 0; 
}

可以看到,它可以判断用户所输入的整数大小;若想判断小数大小就需要把里面的int全部更改double。若想同时判断,还需要在此基础上,加一个判断语句。

所有代码为:

#include <iostream>
using namespace std;

int main() {
    float f1, f2;
    int i1, i2;

    cout << "请输入第一个浮点数: ";
    cin >> f1;
    cout << "请输入第二个浮点数: ";
    cin >> f2;

    cout << "请输入第一个整数: ";
    cin >> i1;
    cout << "请输入第二个整数: ";
    cin >> i2;

    if (f1 > f2) {
        cout << f1 << ">" << f2 << endl;
    } else if (f1 < f2) {
        cout <<f1 << "<" << f2<< endl;
    } else {
        cout <<f1<<"="<<f2 << endl;
    }

    if (i1 > i2) {
        cout << i1 << ">" << i2<< endl;
    } else if (i1 < i2) {
        cout << i1 << "<" << i2<< endl;
    } else {
        cout << i1<<"="<<i2<< endl;
    }

    return 0;
}

若使用重载,就可以用更简洁的方法实现,代码为:
 

# include <iostream>
using namespace std;

int max(int x, int y);
double max(double x, double y);

int main(){
    int a,b;
    double c,d;
    cout << "请输入两个整数: ";
    cin >> a >> b;
    cout << "请输入两个浮点数:";
    cin >> c >> d;
    cout << "整数中较大的数是: " << max(a,b) << endl;
    cout << "浮点数中较大的数是: " << max(c,d) << endl;
    return 0;
}

int max(int x, int y){
    return x > y ? x : y;
}

double max(double x, double y){
    return x > y ? x : y;
}

该函数调用了两种max函数,一种是int型,一种是double型,两者都顺利调用;也就是所,重载函数后,调用时会根据传递参数的不同,调用与之相对应的策略。

二,函数模板。

现在我们知道可以利用重载来定义同名函数;但是在上文中的函数中,尽管除数据类型之外完全相同,却需要使用两个函数来处理。

因此,C++提供了另一种更便利的方式,可以通过创建函数模板,仅数据不同的函数都可以使用此模型,这种模型被称为函数模型;要使用函数模板,必须经历以下步骤:

1,声明或定义函数模板。

2,调用函数(函数自动生成)。

1,使用函数模板。

语法:

template <class 模板参数列表> //指定替换类型名
函数的声明或定义

例如,还是判断键盘输入的整数和浮点数的大小:

# include <iostream>
template <class T>
T max(T a, T b){
    return (a>b)?a:b;
}
int main(){
  int a , b;
  double c , d;
  std::cout << "请输入两个整数: ";
  std::cin >> a >> b;
  std::cout << "请输入两个浮点数: ";
  std::cin >> c >> d;
  std::cout << "在" << a << " 和" << b << " 中最大的是:  " << max(a, b) << std::endl;
  std::cout << "在" << c << "和" << d << " 中最大的是:  " << max(c, d) << std::endl;
return 0;
}

与之前所写的代码相比,极为简洁;运行结果为:

2,注意事项。

在使用函数模板与重载的时候,应注意using namespace std;的使用,将std命名空间中的所有符号引入到全局命名空间中。而在全局命名空间中,已经存在一个名为max的函数模板,用于比较两个值的大小。这与你自己定义的max函数发生了冲突。

如果存在,则会出现:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值