C++类模板与友元的类内类外实现

2023-12-13 03:27:39
  1. 全局函数类内实现-直接在类内声明友元即可
  2. 全局函数类外实现-需要提前让编译器知道全局函数的存在

总结:建议全局函数做类内实现,用法简单,而且编译器可以直接识别

#include<iostream>
using namespace std;
#include<string>


//2.全局函数配合友元  类外实现-先做函数模板声明,下方在做函数模板定义,在做友元
template<class T1,class T2>
class Person;

template<class T1,class T2>
void printPerson2(Person<T1, T2>& p)
{
	cout <<"类外实现---" << "姓名:" << p.mname << "年龄:" << p.mage << endl;
}

template<class T1,class	T2>
class Person
{
	//1 . 全局函数配合友元    类内实现
	friend void printPerson(Person<T1, T2>& p)
	{
		cout << "姓名:" << p.mname << "年龄:" << p.mage << endl;
	}


	//2 . 全局函数配合友元    类外实现
	//friend void printPerson2(Person<T1, T2>& p);  缺了一个东西  那就是  <>
	friend void printPerson2<>(Person<T1, T2>& p);
public:
	Person(T1 name, T2 age)
	{
		this->mage = age;
		this->mname = name;
	}

private:
	T1 mname;
	T2 mage;
};

//全局函数类内实现
void test01()
{
	Person <string, int>p("Tom", 25);
	printPerson(p);
}

//全局函数类外实现
void test02()
{
	Person <string, int>p("jerry", 21);
	printPerson2(p);
}

int main()
{
	test01();
	test02();
	return 0;
}


文章来源:https://blog.csdn.net/weixin_55741769/article/details/134960164
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。