C++程序设计(七)—— 类模板与向量

一、类模板

        如果将类看作某些数据类型的框架,然后将这些数据类型从类中分离出来形成一个通用的数据类型T,为这个数据类型设计一个操作集,并且允许原来那些数据类型的类都能使用这个操作集,这将避免因为类的数据类型不同而产生的重复性设计。类型T通常被称为类模板,在编译时,由编译器将类模板与某种特定的数据类型联系起来,就产生一个特定的类(模板类)。

1、类模板基础知识

⑴ 类模板的成分和语法

        为了创建类模板,在类模板参数表之后应有类声明,在类中可以像使用其他类型那样使用模板类型。例如,可以把模板参数用做数据成员的类型、成员函数的类型或成员函数的参数类型等。示例如下:

template <typename T> //带参数T的模板声明,可用typename代替class
class TempTest{
private:
	T x,y; //类型为T的私有数据成员
public:
	TempTest(T a,T b):x(a),y(b){}
	T getX(){ //内联成员函数,返回类型为T
		return x;
	}
	T getY(){
		return y;
	}
};

⑵ 类模板的对象

        类模板也称参数化类,初始化类模板时,只要传给它指定的数据类型,编译器就用指定类型模板参数产生的相应的模板类。示例如下:

int main(){
	TempTest<int> obj(10,20);
	return 0;
}

⑶ 使用类模板计算4个数中的最大值 

//template <typename T,int size = 5> //这种方式可以传递程序中的参数值
template<typename T>
class Math2 {
private:
	T x, y, z , s;
	T max1(T a, T b) {
		return (a > b) ? a : b;
	}
public:
	Math2(T a, T b, T c ,T d);
	T max2(void);
};

template <typename T> //定义成员函数时必须再次声明模板
Math2<T>::Math2(T a,T b,T c,T d):x(a),y(b),z(c),s(d){

}

template <typename T>
T Math2<T>::max2(void){
	return max1(max1(x,y),max1(z,s));
}
#include <iostream>
using namespace std;

#include "Example2.h"
void example2();
int main(){
	example2();
	return 0;
}

void example2(){
	Math2<int> m(10,20,15,8);
	int i = m.max2();
	cout << "这四个数中的最大值是:" << i << endl;//20
}

2、类模板的派生与继承

        类模板也可以继承,继承的方法与普通的类一样。声明模板继承之前,必须重新声明类模板。模板类的基类和派生类都可以是模板(或非模板)类。

        下面是模板类继承非模板类的示例:

#include <iostream>
using std::cout;

cla
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值