您当前的位置: 首页 >  c++

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

插件开发 发布时间:2022-04-24 07:13:35 ,浏览量:1

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

1.程序算法

  C++强大的泛型编程,那什么是泛型编程,即不考虑具体数据类型的编程方式,它有两个关键字,template与typename(class)。本文介绍类模板,首先在模板编程中,声明是不会编译的,cpp文件才进行编译,模板类是两次编译的,编译模板的时候不能分文件编译,写模板的时候一般头文件和cpp文件放在同一个文件中(hpp),引用的时候直接引用hpp,可以保证两次编译,产生具体的类。   C++中每一个对象所占的空间大小,对象的内存分布都是在编译时期就确定下来的。而对于模板类来说,对象占空间的大小和内存分布是不知道的,依所套用的类型而定,比如A为模板类,则A类对象所占的空间大小和内存分布显然不同于A。(这里插一句,虽然模板类中有一个类字,但是对于实例化的模板类才算是真正的类,未实例化的模板类还不能算是类。)因此,对于未实例化的模板类,编译器无法确定其大小,所以略过对模板类的编译,在编译时只检查一些与模板无关的错误。而此时如果模板类的声明和定义中有错误的话,编译器就检查不到。   模板类的显示申明,代码如下:

template class Person;//显示申明,防止二次编译问题。

  先看一个简单的类模板例子,代码如下:

template
class Person
{
public:
	Person();
	~Person()
	{
	}
	Person(T a)
	{
		t1 = a;
	}

	//运算符重载+
	Person operator+(Person &c)
	{
		Person t(this->t1 + c.t1);
		return t;
	}

private:
	T t1;
};

//类成员,函数模板
template
Person::Person()
{

}

//测试代码
Person p1(1), p2(2), p3(3);
p1 = p2 + p3;

由于二次编译问题的存在,最好将类的实现放在类的内部。

2.作者答疑

  如有疑问,请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0378s