ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[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); } ~~~