欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

STL之模板

程序员文章站 2022-07-12 14:37:56
...

1.函数模板和类模板

1.1函数模板传参时不能强转

	Template<class T>
	void fun (T x,T y)
	{	}
	调用时:
	int a = 1;
	double b = 1.1;
	fun(a,b) //错误不能强转,如果写函数void fun1(int x,int y)就可以强转.

1.2.编译器对函数模板编译两次,第一次编译本身模板语法,第二次根据具体调用进行编译

1.3多文件工程写类模板(以下为错误写法)

//Person.h
#pragma once
#include<iostream>
using namespace std;

template<class T>
class Person
{
public:
	Person(T age);
	void show();
public:
	T m_age;
};
//Person.cpp
#include"Person.h"
template<class T>   //此文件里面没有生成具体模板数,
//只进行了一次编译
Person<T>::Person(T age)
{
	m_age = age;
}

template<class T>
void Person<T>::show()
{
	cout << m_age << endl;
}

//main.cpp
#include"Person.h"
int main()
{

	Person<int> p1(10);  
						 */
	p1.show();
	system("pause");
	return 0;
}

1.3.1.C++编译机制和模板实现机制

(1) c++编译机制:每个文件独立编译(不知道其他函数调用自己文件里 面的函数) ·
2)模板实现机制:两次编译

1.3.2.纠错

Person.cpp和main.cpp独立编译,当main.cpp编译时发现一个函数调用在当前文件找不到定义,只找到声明,main函数编译完成,person.cpp文件编译完成后,链接找不到定义(模板函数),因为person.cpp文件里面函数模板没有进行第二次编译(没有具体调用)函数位置生成符号

1.4类模板中的static关键字

从类模板实例化的每个模板类都有自己数据成员,该模板类的所有对象共享一个static数据成员 Person p1;
Person模板类共享自己的static Personp2;


```c

```cpp
#include<iostream>
using namespace std;

template<class T>
class Person
{
public:
	static int m_age;
};
template<class T>
int Person<T>::m_age = 10;
int main()
{
	
	Person<int>p1;
	Person<char>p2;
	p1.m_age = 11;
	cout << p1.m_age << endl;       
	cout << p2.m_age << endl;
	cout << Person<int>::m_age << endl;   //模板类
	cout << Person<char>::m_age << endl;
	system("pause");
	return 0;

}

相关标签: stl c++ stl