类模板和模板类的区别是什么?

2024-11-14 05:57:24
推荐回答(2个)
回答(1):

类模版 (class template)说明的是该类是一个模版,它代表的是整个类家族的参数化描述。
模版类 (template class)通常被用于下面几个方面:
(1)作为类模版的同义词
(2)从模版产生类
(3)具有一个template-id名称的类。(template-id指的是模版名称与紧随其后的尖括号内部的所有实参的组合)
第二个和第三个含义区别是很细微的,它们的这些区别无关紧要。
通常使用的是 类模版。就像常使用 函数模版,而不是模版函数。

回答(2):

引用是在变量表中增加该变量的别名,不占用内存空间,一经确定不能修改。但指针要在内存中分配空间。把指针定义为const可做引用使用,但有本质的区别。
首先,要认识到在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。
因为引用肯定会指向一个对象,在c++里,引用应被初始化。指针没有这样的限制。
不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高。因为在使用引用之前不需要测试它的合法性。
指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。
总的来说,在以下情况下你应该使用指针,一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。
还有一种情况,就是当你重载某个操作符时,你应该使用引用。最普通的例子是操作符[]。这个操作符典型的用法是返回一个目标对象,其能被赋值。

模板类
在c++中有如下语句
int a;
char b;
long c;
float d;
像上面的 int, char, long, float 被称为“类型”。
有时我们需要将“类型”也做为参数来处理,比如,要写一个比较大小的函数 comp(x,y)
如果是两个int型比较就返回一个int类型的值,如果是两个float型比较就返加一个float型结果,当然可以用函数重载来实现,但利用函数模板就只要写一个函数
template
T comp(T x,T y)
{
return x> y?x:y;
}
其中template 就是声明将T作为一个类型参数
和以下重载的函数比较一下
int comp(int x,int y)
{
return x> y?x:y;
}
float comp(float x,float y)
{
return x> y?x:y;
}
当然也可以在函数内部利用T来声明变量,如
T a,b;
这是函数模板,理解了以后再看类模板等就不难了