模板 - 类模板

 

 2.和函数模板一样,类模板就是建立一个通用类,其数据成员的类型、成员函数的返回类型和参数类型都不具体指定,用一个虚拟类型来代表。当使用类模板建立对象时,系统会根据实参的类型来取代类模板中的虚拟类型从而实现不同类的功能。其定义格式为:

  template <typename 类型参数>

  class 类名

  {类成员声明}

  或

  template <class 类型参数>

  class 类名

  {类成员声明}

在类成员声明里,成员数据类型、成员函数的返回类型和参数类型前面需加上类型参数。在类模板中成员函数既可以定义在类模板内,也可以定义在类模板外,在定义类模板外时C++有这样的规定:需要在成员函数定义之前进行模板声明,且在成员函数名之前加上“类名<类型参数>::”:

  template <typename(class) 类型参数>

返回类型 类名<类型参数>::函数名(形参)

{函数体}

而类模板定义对象的形式:

  类模板名<实际类型> 对象名;

  类模板名<实际类型> 对象名(实参);

示例说明如下:

View Code

 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <string>
 4
 5 template <typename T>//在类模板定义之前,都需要加上模板声明
 6 class BinaryOperation//二目运算类
 7 {
 8 private:
 9         T x;
10         T y;
11 char op;
12 void add()
13         {
14             std::cout<<x<<op<<y<<"="<<x+y<<std::endl;
15         }
16 void sub()
17         {
18             std::cout<<x<<op<<y<<"="<<x-y<<std::endl;
19         }
20 void mul();
21 void div();   
22 public:
23         BinaryOperation(T x,T y):x(x),y(y)
24         {
25         }
26 void determineOp(char op);
27 };
28
29
30 //在类外定义成员函数:
31 //在成员函数定义之前进行模板声明,
32 //且在成员函数名之前加上"类名<类型参数>::"
33 template <typename T>
34 void BinaryOperation <typename T>::mul()
35 {
36     std::cout<<x<<op<<y<<"="<<x*y<<std::endl;
37 }
38
39 template <typename T>
40 void BinaryOperation <typename T>::div()
41 {   
42
43     std::cout<<x<<op<<y<<"="<<x/y<<std::endl;
44 }
45
46 template <typename T>
47 void BinaryOperation <typename T>::determineOp(char op)
48 {
49 this->op=op;
50 switch(op)
51     {
52 case'+':
53             add();
54 break;
55 case'-':
56             sub();
57 break;
58 case'*':
59             mul();
60 break;
61 case'/':
62             div();
63 break;
64 default:
65 break;
66     }
67 }
68
69 int main()
70 {
71
72     BinaryOperation<int> op(10,10);
73     op.determineOp('+');
74     op.determineOp('-');
75     op.determineOp('*');
76     op.determineOp('/');
77
78 return0;
79 }

结果:

10+10=20 10-10 = 0 10*10=100 10/10=1

和函数模板一样,类模板也允许定义多个类型参数,这里不再一一举例了,有兴趣的朋友可以参考上述的示例代码尝试一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山西茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值