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;
}
上一篇: 2、STL之vector
下一篇: 1、STL之排序与检索