C++中函数重载和函数模板的理解

第二遍看C++Primer Plus。。泪目啊。。C++真心难,第一遍是我一年前看的。现在再看感觉好像全新的一样。。。

好了,简单介绍下函数重载,学过编程的都对这个重载很熟悉了。函数重载的判断标识是它的函数参数列表,而不是返回值来判断的。所以像 

long gronk(int n, float m);
double gronk(int , float m);
是会报错的。这没有函数重载。

接下来是函数模板。

函数模板类似

template<class Any>
void swap (Any &a, Any &b)
{
    Any temp;
    temp = a;
    a = b;
    b = temp;
}		

接下来介绍下函数模板里非常重要的具体化和实例化。

其实,在使用函数模板时,编译器会自动把模板实例化,称为隐式实例化,类似 

void swap (int &a, int &b);

就是实例化成了这样一个函数, 只不过是隐式的。

显示实例化类似

template void swap<int>(int &a,int &b);
显示具体化类似
template <> void swap<int>(int &a,in t &b);
两者的差别是template后面的括号。

具体化将会覆盖常规模板,非模板函数将会覆盖具体化和常规模板。

在我的理解就是,显式具体化和显示实例化都是讲某一特定类型的模板函数进行实例化,调用它们时将不会调用模板函数的定义。所以同一编程单元中,同一类型不能同时存在显示具体化和显示实例化。否则二义了。

好了,先介绍这里。明天开始我网络方面的可靠数据传输协议还要看看,C++的类和对象还要复习下,争取把const和引用的关系整理出来,也写一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++重载函数可以用于求取不同类型或者相同类型的最大值。可以使用函数重载或者函数模板来实现。函数重载是指在同一个作用域内,函数名相同但是参数列表不同的函数函数模板是指定义一个通用的函数,可以用于不同类型的参数。下面是两种实现方式的示例代码: 1. 使用函数重载 可以定义两个函数Max,一个用于求取两个整数的最大值,另一个用于求取三个整数的最大值。示例代码如下: ``` #include <iostream> using namespace std; int Max(int a, int b) { return a > b ? a : b; } int Max(int a, int b, int c) { int Max = a > b ? a : b; return Max > c ? Max : c; } int main() { int x1, x2; cout << "请输入两个整数:"; cin >> x1 >> x2; cout << "这两个整数的最大值:" << Max(x1, x2) << endl; int x3, x4, x5; cout << "请输入三个整数:"; cin >> x3 >> x4 >> x5; cout << "这三个整数的最大值:" << Max(x3, x4, x5) << endl; return 0; } ``` 2. 使用函数模板 可以定义一个通用的函数Max,使用模板参数来表示不同类型的参数。示例代码如下: ``` #include <iostream> using namespace std; template<typename T> T Max(T a, T b) { return a > b ? a : b; } template<typename T> T Max(T a, T b, T c) { T Max = a > b ? a : b; return Max > c ? Max : c; } int main() { int x1, x2; cout << "请输入两个整数:"; cin >> x1 >> x2; cout << "这两个整数的最大值:" << Max(x1, x2) << endl; double y1, y2, y3; cout << "请输入三个双精度数:"; cin >> y1 >> y2 >> y3; cout << "这三个双精度数的最大值:" << Max(y1, y2, y3) << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值