C++ //类模板与友元 //全局函数类内实现 -直接在类内声名由于即可 //全局函数类外实现 -需要提前让编译器知道全局函数的存在

 1 //类模板与友元
 2 //全局函数类内实现 -直接在类内声名由于即可
 3 //全局函数类外实现 -需要提前让编译器知道全局函数的存在
 4 
 5 #include <iostream>
 6 #include <string>
 7 #include<fstream>
 8 using namespace std;
 9 
10 
11 //提前让编译器知道 Person类存在
12 template<typename T1, typename T2>
13 class Person;
14 
15 //类外实现
16 //全局函数类外实现
17 template<typename T1, typename T2>
18 void printPerson2(Person<T1, T2> p)
19 {
20     cout << "类外实现:姓名: " << p.m_Name << "  年龄: " << p.m_Age << endl;
21 
22 }
23 
24 template<class T1,class T2> 
25 class Person
26 {
27     //全局函数 类内函数
28     friend void printPerson(Person<T1,T2> p)
29     {
30         cout << "姓名: " << p.m_Name << "  年龄: " << p.m_Age << endl;
31     }
32 
33     //全局函数类外实现
34     //加空模板的参数列表
35     //如果全局函数是类外实现,让编译器提前知道这个函数的存在
36 
37     friend void printPerson2<>(Person<T1, T2> p);
38 
39 
40 
41 public:
42     Person(T1 name, T2 age)
43     {
44         this->m_Name = name;
45         this->m_Age = age;
46     }
47 
48 
49 private:
50     T1 m_Name;
51     T2 m_Age;
52 };
53 
54  
55 //全局函数类内实现
56 void test01()
57 {
58     Person<string, int>p("Tom", 20);
59     printPerson(p);
60 }
61 
62 
63 ///2.全局函数 在类外实现
64 void test02()
65 {
66     Person<string, int>p("lis", 20);
67     printPerson2(p);
68 }
69 
70 
71 
72 int main()
73 {
74 
75     test01();
76     test02();
77 
78 
79     system("pause");
80 
81     return 0;
82 
83 }

 

posted on 2021-08-13 10:40  Bytezero!  阅读(197)  评论(0编辑  收藏  举报