类模板的特化和函数模板的重载与类模板的继承

类似于函数模板的特化,类模板的特化也是在类模板定义以后,用template来说明一个模板的特化类型,特化的类模板甚至可以定义新的数据成员和成员函数,下面就是一个类模板特化的例子:

#include <stdio.h>

template <class T>

class A{

       T i;

public:

       A(T t){ i=t; }

       T Compute(){ return i*i; }

};

template<> class A<int>{

       int i;

       int j;

public:

       A(int t){ i=t; printf("Specialization!\n");}

       int Compute(){ return i*i*i; }

       void f(){}

};

int main(void){

       A<double> dA(1.1);

       A<int> iA(2);

       printf("%f\n", dA.Compute());

       printf("%d\n", iA.Compute());

       return 0;

}

运行结果:

Specialization!

1.210000

8

模板也提供了函数模板重载的功能,只要定义同名的函数模板,具有不同的返回值类型和形参不同,就实现了了函数模板的重载,编译器会在调用函数,自动选择对应的函数模板实例化和调用.范例如下:

#include <stdio.h>

template <class T>

void func(T a){

       printf("func(T)\n");

}

template<class T1, class T2>

int func(T1 t1, T2 t2){

       printf("func(T1,T2)\n");

       return 1;

}

int main(void){

       func(1, 2);

       func(3);

       return 0;

}

运行结果:

func(T1,T2)

func(T)

于函数模板支持重载一样,类模板也支持继承机制.和普通的类继承一样我们可以在继承类里面添加新的成员变量和成员函数.范例如下:

#include <stdio.h>

template<class T>

class A{

public:

       void func(T a){

              printf("A:func(T)\n");

       }

};

template<class T1, class T2>

class B: public A<T1>{

public:

       void func(T1 t1, T2 t2){

              printf("B:func(T1,T2)\n");

       }

};

int main(void){

       B<int, double> b;

       b.func(1, 1.2);

       A<int> a=static_cast<A<int> >(b);

       a.func(2);

       return 0;

}

运行结果:

B:func(T1,T2)

A:func(T)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值