类模板的类外实现

类模板的类外实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>

using namespace std;
//在类的外面声明一下友元模板函数
template<class T>class Person;
template<class T>void Show(Person<T> &p);
template<class T>ostream & operator<< (ostream & os, Person<T> &p);


template<class T>
class Person {
public:
Person();
Person(T name);
friend ostream & operator<< <> (ostream & os, Person<T> &p);
Person<T> operator=(Person<T> & tp);

friend void Show<>(Person<T> &p);
private:
T mName;
};

template<class T>
void Show(Person<T> &p) {
cout << p.mName << endl;
}

template<class T>
Person<T> Person<T>::operator=(Person<T> & tp)
{
this->mName = tp.mName;
return *this;
}
template<class T>
ostream & operator<< (ostream & os, Person<T> &p)
{
os << p.mName;
return os;
}


template<class T>
Person<T>::Person(){
}

template<class T>
Person<T>::Person(T name) {
mName = name;
}


void test01() {
Person<string> p("小明");
Person<string> p2("123");
//p2 = p;
//cout << p2 << endl;
//cout << p << endl;

Show(p);
Show(p2);
}

int main(char *argv[], int argc)
{
test01();

return 0;
}