类模版02

1.声明

template<class T1, class T2,......,class Tn>
class 类模版名
{

};

2.例子

1)单个参数
template<class T>
class CMath
{
public:
	CMath(T const& t1, T const& t2) :m_t1(t1), m_t2(t2) {}
	T add()//类内实现
	{
		return m_t1 + m_t2;
	}
    T add2();//类外实现
private:
	T m_t1;
	T m_t2;
};

//类外实现
template<class T>T CMath<T>::add()
{
   return m_t1 + m_t2;
}
2)多个参数
template<class A, class B>
class CMath
{
public:
       A m_a;
       B func(){};

};

3.实例化

template<class T>
class CMath
{
public:
	CMath(T const& t1, T const& t2) :m_t1(t1), m_t2(t2) {}
	T add()
	{
		return m_t1 + m_t2;
	}
private:
	T m_t1;
	T m_t2;
};

int main()
{
	int a = 10, b = 20;
	CMath<int> m(a, b);
	cout << m.add() << endl;

	return 0;
}
注意:

1)使用类模板必须对类模板进行实例化(产生真正的类),类模板本身并不代表一个确定的类型(不能用于定义对象),实例化之后才能具备类的语义(定义对象);

2)类模板被实例化时类模板中的成员函数并没有实例化,成员函数只有在被调用时才会被实例化(即产生真正成员函数),成员虚函数除外;

3)某些类型虽然并没有提供类模板所需要的全部功能,但依旧可以实例化类模板,只要不调用那些未提供功能的成员函数即可。

4.类模板的静态成员

        类模板中的静态成员不是每个对象拥有一份,也不是类模板拥有一份,而是由类模板实例化的每一个真正的类各有一份,且为该实例化类定义的所有对象共享。

template<class T>
class A
{
public:
	static void print()
	{
		cout << "&m_i: "<< &m_i << endl<<"&m_t: "<< &m_t << endl;
	}

	static int m_i;
	static T m_t;
};
template<class T>int A<T>::m_i;
template<class T>T A<T>::m_t;

int main()
{
	A<int>x, y, z;
	x.print();
	y.print();
	z.print();
	A<int>::print();

	cout << "--------------------------" << endl;

	A<double>m,n,t;
	m.print();
	n.print();
	t.print();
	A<double>::print();

	return 0;
}

5.类模板的递归实例化

          由类模板实例化产生的类也可以用来实例化类模板自身,即类模板的递归实例化。

template<class T>
class Array
{
public:
	T& operator[](size_t i)//重载下标运算符
	{
		return m_arr[i];
	}
private:
	T m_arr[10];
};

int main()
{
	Array<Array<int>> m;
	for (size_t i = 0; i < 10; i++)
	{
		for (size_t j = 0; j < 10; j++)
		{
			m[i][j] = i + j;
		}
	}

	for (size_t i = 0; i < 10; i++)
	{
		for (size_t j = 0; j < 10; j++)
		{
			cout << m[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值