企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 友元普通函数 ## 声明 friend 类型 函数名(); ## 特点 可以突破类的封装,访问类中的数据成员 ## 例子 ~~~ #include <iostream> using namespace std; ​ class Time { public:   Time(int,int,int);       friend void display(Time &);         //声明display函数为Time类的友元函数   private:               //以下数据是私有数据成员   int hour;       int minute;       int sec; }; ​ Time∷Time(int h,int m,int s)       //构造函数,给hour,minute,sec赋初值 { hour=h;   minute=m;   sec=s; } ​ void display(Time& t)               //这是友元函数,形参t是Time类对象的引用 { cout<<t.hour<<″:″<<t.minute   <<″:″<<t.sec<<endl; } ​ int main( ) { Time t1(10,13,56);   display(t1);   return 0; //调用display函数,实参t1是Time类对象 } /**** 结果:10:13:56 ****/ ~~~ # 友元成员函数 在一个类中,将另一个类中的成员函数声明为友元成员函数,这个函数可访问两个类中的所有数据成员 ## 例子 ~~~ #include <iostream> using namespace std; ​ class Date;                 //对Date类的提前引用声明 class Time                 //定义Time类 { public:   Time(int,int,int);       void display(Date &);           //display是成员函数,形参是Date类对象的引用   private:   int hour;   int minute;       int sec; }; ​ class Date                               //声明Date类 { public:   Date(int,int,int);       friend void Time∷display(Date &);           //声明Time类display函数为Date类的友元成员函数   private:   int month;       int day;       int year; }; ​ Time∷Time(int h,int m,int s)//类Time的构造函数 { hour=h;   minute=m;   sec=s; } ​ void Time∷display(Date &d)       //display的作用是输出年、月、日和时、分、秒 { cout<<d.month<<″/″<<d.day<<″/″   <<d.year<<endl;//引用Date类对象中的私有数据   cout<<hour<<″:″<<minute<<″:″   <<sec<<endl; //引用本类对象中的私有数据 } ​ Date∷Date(int m,int d,int y) //类Date的构造函数 { month=m;   day=d;   year=y; } ​ int main( ) { Time t1(10,13,56);         //定义Time类对象t1   Date d1(12,25,2004);     //定义Date类对象d1   t1.display(d1);                   //调用t1中的display函数,实参是Date类对象d1       return 0; } ~~~ # 友元类 ## 声明 在一个类中将另一个类声明为友元 格式:friend 类名; ## 特点 * 友元关系是单向的 * 友元关系不能传递