STL之模板

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;

}

发布了18 篇原创文章 · 获赞 14 · 访问量 381

猜你喜欢

转载自blog.csdn.net/fjd7474/article/details/104162144
今日推荐