模板

#include <iostream>
using namespace std;
#define PI 3.14
template<class T>//早期写成 template<class T>
T maxt(T x, T y)
{
    return (x > y) ? x : y;
}

//类模版
template<typename T>
class Circle{
private:
    T radius;
public:
    Circle(){};//无参构造函数大括号要补充好
    Circle(T r):radius(r){};
    T area();
//  {
//      return radius*radius*PI;
//  }

};
//在类外实现成员函数
template<typename T>
T Circle<T>::area()
{
    return radius*radius*PI;
}
//单参数类模板
template<typename T>
struct S_tmp{
    T a;
};
//以单参数类模板定义为参数的模板
template<template<typename S> class T>
struct MyTest{
    T<int> test;//也不能在这作初始化赋值T<int> test(10);
    void show()
    {
        cout << "test show"<< endl;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    //cout << maxt<int>(4, 6) << endl;//当编译器能够从参数类型推测出模版参数所需的实际类型时,尖括号中的类型可省略
    //cout << maxt<double>(6.98, 5.33) << endl;
    //Circle<int> c1(5);
    //Circle<double> c2(0.5);
    //cout << c1.area() << endl;
    //cout << c2.area() << endl;
    MyTest<S_tmp> TT;//MyTest<Circle> TT;
    TT.show();
    return 0;
}
template<typename RT,typename T,typename S>
RT mymax(T a, S b)
{
    return (a > b) ? a : b;
}
template<typename T,typename S>
auto mymax2(T a, S b)->decltype(a*b)
{
    return (a > b) ? a : b;
}

int _tmain(int argc, _TCHAR* argv[])
{
    //当函数返回值的类型不能由形参直接确定时,要显示提供模版实参,至少提供返回值类型
    cout << mymax<double,int,double>(5, 6.2) << endl;
    cout << mymax<double>(5, 6.2) << endl;
    //或者用auto
    cout << mymax2(5, 6.2) << endl;
    return 0;
}

指针实参

和前面一样

T show(T a)
{
    return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
    double a = 5;
    double* pd = &a;
    cout <<*show(pd)  << endl;
    return 0;
}

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值