🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 友元函数,类内实现 ~~~ template<class NameType, class AgeType> class Maker { friend void printMaker(Maker<NameType, AgeType >& p) { cout << "友元函数,类内实现" << p.name << " " << p.age << endl; } public: Maker(NameType name, AgeType age) { this->name = name; this->age = age; } private: NameType name; AgeType age; }; void test01() { Maker<string, int> m1("abc", 18); printMaker(m1); } ~~~ # 友元函数在类外实现 ~~~ //提前声明类,下面的声明要用 template<class NameType, class AgeType> class Maker; //声明下模板,下面要用 template<class NameType, class AgeType> void printMaker(Maker<NameType, AgeType> &p); template<class NameType, class AgeType> class Maker { //1. 在函数名和()之间加上<>,不然编译器会认为是普通函数,加上<> friend void printMaker<>(Maker<NameType, AgeType >& p); public: Maker(NameType name, AgeType age) { this->name = name; this->age = age; } private: NameType name; AgeType age; }; //友元在类外实现需要写成函数模板 template<class NameType, class AgeType> void printMaker(Maker<NameType, AgeType> &p) { cout << "类外实现的友元函数: " << p.name << " , " << p.age << endl; } void test01() { Maker<string, int> m1("abc", 18); printMaker(m1); } ~~~