泛型编程之泛型参数

一、泛型参数

问题:用C++语言实现求一个数的平方。

分析:一个数,可以是int、double、complex等,规则求数的平方"x*x"

伪代码:sqrt(x)

              return x * x;

实现一:提供一组用于求不同数字类型的平方函数。

int sqrtInt(int x)
{
    return x*x;
}

int sqrtDouble(double x)
{
    return x*x;
}

// ...

实现二:上述一组函数,对不同的数字类型,有不同的函数名,挑战了人的记忆能力,编码也变得麻烦。可以采用C++的函数重载技术改进方案。

int sqrt(int x)
{
    return x*x;
}

int sqrt(double x)
{
    return x*x;
}

// ...

实现三:实现二的方案意味着类型越多,相同结构的代码越多,导致大量的重复代码,容易产生错误且难以维护。这里可以采用C++里的泛型编程技术对上述函数族进行参数泛化,即泛型参数。

template<typename T>
T sqrt(T x)
{
    return x*x;
}

从方案的变化过程可以看出泛型参数的第一个优点:避免静态类型语言中的代码重复。

进一步分析实现三,泛型同样对参数进行了操作方面的约束”x*x“,参数类型必须满足乘法规则。即泛型参数的第二个优点:约束参数的操作行为。不满足操作行为规则将会编译失败。

如下图例子:

第三个优点:通过编译器的静态类型检查,可以在编译时保证类型的正确。

如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值