C/C++:函数模板与类模板

通过例子加深印象:

函数模板:----------------------------------------

//函数模板:用来创建一个通用功能的函数,用来支持不同的形参,进一步简化函数的重载设计
//声明方法:关键字template<tyoename T>

#include <iostream>
using namespace std;

//定义函数模板
//使用函数模板实现abs函数(取绝对值)
template<typename T>
T abs(T x)
{
    return x > 0?x:-x;
}

int main()
{
    //功能:不适用判断语句求两个数值的最大值
    int a = 100;
    int b = -200;
    //调用函数模板abs,输出最大值
    cout << (a + b +abs(a-b))/2<<endl;

    double c = -3.14;
    double d = 5.5;
    //调用函数模板输出最大值
    cout << (c+d + abs(c-d))/2<<endl;

}


类模板:----------------------------------------

//类模板的作用:使用户可以为类声明一种模式,使得类中的某些数据成员、某些成员函数的参数、
//某些成员函数的返回值,能使用任意类型(包括基本类型和用户自定义类型)

//类模板的声明
/*
  template <typename T>
  class 类名
  {
  };
*/

/*在类外部定义类的成员函数采用一下格式
  template <typename T>
  函数返回类型 类名<T>::函数名(参数表){}
 */

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

//定义以模板类
template <typename T>
class Student
{
public:
    Student(const char *name = "",const T score = 0);
    void show();

    ~Student();

private:
    char *m_name;
    T m_score;    //可以是整形,也可以是double行
};

//类成员函数定义
template<typename T>
Student<T>::Student(const char *name, const T score):
    m_name(new char[strlen(name)+1]),
    m_score(score)
{
    memset(m_name,0,strlen(name+1));
    strcpy(m_name,name);
}

template<typename T>
Student<T>::~Student()
{
    delete [] m_name;
    m_name = NULL;
}

//每个成员函数都要tamplate<typename T>...
template<typename T>
void Student<T>::show()
{
    cout << m_name <<":"<<m_score<<endl;
}

int main()
{
    printf("------------------\n");
    //构建对象 Student<数据类型>
    Student<int> S1("数学",100);
    S1.show();

    //构建第二个对象
    Student <double> S2("语文",99.5);
    S2.show();
    printf("------------------\n");
    return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值