C++ 常用特征-泛型编程-类模板

C++ 常用特征-泛型编程-类模板,第1张

文章目录
    • 1.程序算法
    • 2.作者答疑

1.程序算法

  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.作者答疑

  如有疑问,请留言。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/728517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存