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 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15136229.html