- 1.程序算法
- 2.作者答疑
C++强大的泛型编程,那什么是泛型编程,即不考虑具体数据类型的编程方式,它有两个关键字,template与typename(class)。本文介绍类模板,首先在模板编程中,声明是不会编译的,cpp文件才进行编译,模板类是两次编译的,编译模板的时候不能分文件编译,写模板的时候一般头文件和cpp文件放在同一个文件中(hpp),引用的时候直接引用hpp,可以保证两次编译,产生具体的类。
C++中每一个对象所占的空间大小,对象的内存分布都是在编译时期就确定下来的。而对于模板类来说,对象占空间的大小和内存分布是不知道的,依所套用的类型而定,比如A为模板类,则A类对象所占的空间大小和内存分布显然不同于A。(这里插一句,虽然模板类中有一个类字,但是对于实例化的模板类才算是真正的类,未实例化的模板类还不能算是类。)因此,对于未实例化的模板类,编译器无法确定其大小,所以略过对模板类的编译,在编译时只检查一些与模板无关的错误。而此时如果模板类的声明和定义中有错误的话,编译器就检查不到。
模板类的显示申明,代码如下:
template class Person<int>;//显示申明,防止二次编译问题。
先看一个简单的类模板例子,代码如下:
template<typename T>
class Person
{
public:
Person();
~Person()
{
}
Person(T a)
{
t1 = a;
}
//运算符重载+
Person<T> operator+(Person<T> &c)
{
Person<T> t(this->t1 + c.t1);
return t;
}
private:
T t1;
};
//类成员,函数模板
template<typename T>
Person<T>::Person()
{
}
//测试代码
Person<int> p1(1), p2(2), p3(3);
p1 = p2 + p3;
由于二次编译问题的存在,最好将类的实现放在类的内部。
2.作者答疑如有疑问,请留言。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)