C++函数模板作为类模板的友元
//program 18.5.2.cpp函数模板作为类模板的友元 #include <iostream> #include <string> /*类模板Pair<T1,T2>*/ using namespace std; template <class T1, class T2> class Pair { private: T1 key; //关键字 T2 value; //值 public: /*constructor:*/ Pair(T1 k, T2 v) :key(k), value(v) { }; /*overload_operator_= */ bool operator < (const Pair<T1, T2>& p) const; /*将重载的全局函数"<<"(流提取运算符)声明为友元;通过传入参数对象来调用该重载运算符:*/ template <class T3, class T4> friend ostream& operator<< (ostream& o, const Pair<T3, T4>& p); }; /*重载"<"成员函数模板*/ template<class T1, class T2> bool Pair<T1, T2>::operator < (const Pair<T1, T2>& p) const { //"小"的意思就是关键字小 return key < p.key; } /*重载流提取运算符"<<";*/ template <class T1, class T2> ostream& operator<< (ostream& o, const Pair<T1, T2>& p) { /*将类模板Pair<T1,T2>实例化为Pair<int,double>模板函数;同时定义了一个该类型的成员对象obj(同时将其初始化为(12,3.14)*/ Pair<int, double> obj(12, 3.14); /*由于该函数模板是类模板的友元函数模板,故可以访问到该成员对象的私有成员变量*/ //obj.key = 4; (合法) /*指定重载后的输出格式:*/ o << "(" << p.key << "," << p.value << ")"; return o;//为了实现连续输出; } int main() { /*类模板Pair<T1,T2>的两种实例化举例*/ Pair<string, int> student("Tom", 29), student_2("jack", 30);/*T<j(大写字母<小写字母)*/ /*另一种实例化*/ Pair<int, double> obj(12, 3.14); /*测试重载后的流提取运算符"<<"的效果:(可以作用域不同类的对象)*/ cout << student << endl << obj << endl; /*重载之后的成员函数"<"的效果(只能够够作用域同类对象之间;即只能够比较同一个模板类下实例化下出对象)*/ cout << "输出键(key)最小的那个元组" << endl << (student < student_2 ? student : student_2) << endl; return 0; } /* 将函数模板operator<<声明为Pair类模板的友元。 编译本程序时﹐编译器自动生成了两个operator<<函数,它们的原型分别如下 ostream & operator <<( ostream & o,const Pair<string,int> &p); ostream & operator <<( ostream & o, const Pair<int, double> & p); 在Visual Studio中,这两行也可以用下面的写法替代: friend ostream & operator <<T1,2>( ostream &o,const Pair<T1,12>& p); 但在 Dev C++中,替代后就编译不过了。 */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-05-24 三元二次方程式x2+y 2=z2的正整数解x、y、z称为一组勾股数,又称为毕达哥拉斯三元数组。该方程式也称为“商高方程”或“毕达哥拉斯方程”。 试通过程序设计求指定区间[a,b]内的所有勾股数组。