C++ 友元函数

来源:互联网 发布:外国人淘宝购物 编辑:程序博客网 时间:2024/05/21 14:11

1将全局函数声明为友元函数


//---------------------------1将全局函数声明为友元函数#include <iostream>using namespace std;class Time{public:Time(int=1,int=1,int=1);friend void call(Time &);//声明友元函数;private:int hour;int min;int sec;};Time::Time(int h,int m,int s){hour=h;min=m;sec=s;}void call(Time &t) {//全局函数,且是Time类的友元函数;cout<<"Call:"<<t.hour<<"-"<<t.min<<"-"<<t.sec<<endl;//访问private成员;}int main(){Time t;call(t);system("PAUSE");return EXIT_SUCCESS;}


2友元成员函数

//-----------------2友元成员函数#include <iostream>using namespace std;class Date; //对Date类的提前引用声明;class Time{public:Time(int=1,int=1,int=1);void call(Date &);//声明成员函数;private:int hour;int min;int sec;};class Date{public:Date(int=1,int=1,int=2008);friend void Time::call(Date&); //声明Time类的call为本类的友元成员函数;private:int year;int mon;int day;};Time::Time(int h,int m,int s){hour=h;min=m;sec=s;}void Time::call(Date &d) {cout<<"TIME:"<<hour<<"-"<<min<<"-"<<sec<<endl;cout<<"DATE:"<<d.mon<<"-"<<d.day<<"-"<<d.year<<endl; //访问Date类的private成员;}Date::Date(int m,int d,int y){mon=m;day=d;year=y;}int main(){Time t;Date d;t.call(d);system("PAUSE");return EXIT_SUCCESS;}

3将一个函数声明为多个类的友元函数

//----------------------------3将一个函数声明为多个类的友元函数;#include <iostream>using namespace std;class Date; //对Date类的提前引用声明;class Time{public:Time(int=1,int=1,int=1);friend void call(Time&,Date&);//声明函数call为本类的友元成员函数;private:int hour;int min;int sec;};class Date{public:Date(int=1,int=1,int=2008);friend void call(Time&,Date&); //声明函数call为本类的友元成员函数;private:int year;int mon;int day;};Time::Time(int h,int m,int s){hour=h;min=m;sec=s;}Date::Date(int m,int d,int y){mon=m;day=d;year=y;}void call(Time &t,Date &d) {cout<<"TIME:"<<t.hour<<"-"<<t.min<<"-"<<t.sec<<endl;cout<<"DATE:"<<d.mon<<"-"<<d.day<<"-"<<d.year<<endl;}int main(){Time t;Date d;call(t,d);system("PAUSE");return EXIT_SUCCESS;}

4友元类

//-------------------5友元类#include <iostream>using namespace std;class Date; //对Date类的提前引用声明;class Time{public:Time(int=1,int=1,int=1);friend class Date;//将Date类声明为当前类的友元类private:int hour;int min;int sec;};class Date{public:Date(int=1,int=1,int=2008);void call_hour(Time&);void call_min(Time&);void call_sec(Time&);private:int year;int mon;int day;};Time::Time(int h,int m,int s){hour=h;min=m;sec=s;}Date::Date(int m,int d,int y){mon=m;day=d;year=y;}void Date::call_hour(Time &t){cout<<"HOUR:"<<t.hour<<endl;}void Date::call_min(Time &t){cout<<"MINUTE:"<<t.min<<endl;}void Date::call_sec(Time &t){cout<<"SECOND:"<<t.sec<<endl;}int main(){Time t;Date d;d.call_hour(t);d.call_min(t);d.call_sec(t);system("PAUSE");return EXIT_SUCCESS;}



0 0