#include<iostream>
#include<string>
using namespace std;
//类模板与友元
// 通过全局函数打印person信息
//提前让编译器知道person类的存在
template<class T1, class T2>
class base;
//提前让编译器知道全局函数的存在
template<class T1, class T2>
void showperson1(base<T1, T2> b) {
cout << "类外实现----姓名: " << b.m_name << " 年龄: " << b.m_age << endl;
}
template<class T1, class T2>
class base {
public:
base<T1, T2>(T1 name,T2 age) {
m_name = name;
m_age = age;
}
//全局函数 类内实现
friend void showperson(base<T1, T2> b) {
cout << "姓名: " <<b. m_name << " 年龄: " << b.m_age << endl;
}
//全局函数 类外实现
//加空模板参数列表
//全局函数 类外实现需要让编译器提前知道这个函数的存在
friend void showperson1<>(base<T1, T2> b);
public:
T1 m_name;
T2 m_age;
};
//全局函数在类内实现测试
void test1() {
base<string, int> a("tom", 20);//创建对象时要标明类型
showperson(a);
}
//全局函数在类外实现测试
void test2() {
base<string, int> a("tom1", 20);//创建对象时要标明类型
showperson1(a);
}
int main() {
test1();
test2();
system("pause");
return 0;
}
//建议全局函数类内实现 用法简单 而且编译器可以直接识别
|