C++类模板与友元的类内类外实现
2023-12-13 03:27:39
- 全局函数类内实现-直接在类内声明友元即可
- 全局函数类外实现-需要提前让编译器知道全局函数的存在
总结:建议全局函数做类内实现,用法简单,而且编译器可以直接识别
#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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!