欢迎来到天天文库
浏览记录
ID:45580855
大小:218.00 KB
页数:36页
时间:2019-11-15
《《面向对象的妥协》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第6章面向对象的妥协授课内容6.1封装的破坏——友元6.2对象机制的破坏——静态成员6.1封装的破坏——友元6.1封装的破坏——友元友元可以访问与其有好友关系的类中的任何成员。友元友元函数友元类如果在本类以外的其他地方定义了一个函数(这个函数可以是不属于任何类的普通函数,也可以是其他类的成员函数),在类体中用friend对其进行声明,此函数就称为本类的友元函数。友元函数可以访问这个类中的任何成员。如何将普通函数声明为友元函数呢?看下面这个简单的例子:§6.1封装的破坏——友元6.1.1友元函数【例6-1】友元普通函数。#include2、ream>usingnamespacestd;classClock//声明Clock类{public:Clock(int,int,int);friendvoiddisplay(Clock&);private:inthour;intminute;intsecond;};§6.1.1友元函数【例6-1】友元普通函数。#includeusingnamespacestd;classClock//声明Clock类{public:Clock(int,int,int);friendvoiddisplay(Clock&);private:i3、nthour;intminute;intsecond;};【例6-1】友元普通函数。Clock::Clock(inth,intm,ints)//构造函数{hour=h;minute=m;second=s;}//这是友元函数,形参t是Clock类对象的引用voiddisplay(Clock&t){cout<4、友元函数程序运行结果如下:10:13:56cout<usingnamespacestd;classDate;//对Date类的提前引用声明classClock//声明Clock类{public:Clock(int,int,int);voiddisplay(Date&);private:inthour,minute,second;};【例6-2】友元成员函数。classDate//声明Date类{public:D5、ate(int,int,int);friendvoidClock::display(Date&);private:intmonth;intday;intyear;};§6.1.1友元函数Clock::Clock(inth,intm,ints)//Clock类的构造函数{hour=h;minute=m;second=s;}voidClock::display(Date&dd){cout<6、endl;}Date::Date(intm,intd,inty)//Date类的构造函数{month=m;day=d;year=y;}§6.1.1友元函数intmain(){Clockt(10,13,56);//定义Clock类对象tDated(12,25,2004);//定义Date类对象d//调用t的display函数,实参是Date类对象dt.display(d);return0;}§6.1友元函数程序运行结果如下:12/25/200410:13:56不仅可以将一个函数声明为一个类的“朋友”,而且可以将一个类(例如B类)声明为另一个类(例7、如A类)的“朋友”。这时B类就是A类的友元类。友元类B中的所有成员函数都是A类的友元函数,可以访问A类中的任何成员。§6.1封装的破坏——友元6.1.2友元类classstudent;classTeacher{public:voidassigngrades(Student&s);//给出学生成绩protected:intstu_count;//学生人数Student*plist[100];//学生数组};§6.1.2友元类classStudent{public:friendTeacher;//友元类…protected:intnum;strin8、gname;floatscore;};…§6.1.2友元类声明友元类的一般形式为:friend类名;关于友元,有三点需要说明:(1)友元函数的声明可以
2、ream>usingnamespacestd;classClock//声明Clock类{public:Clock(int,int,int);friendvoiddisplay(Clock&);private:inthour;intminute;intsecond;};§6.1.1友元函数【例6-1】友元普通函数。#includeusingnamespacestd;classClock//声明Clock类{public:Clock(int,int,int);friendvoiddisplay(Clock&);private:i
3、nthour;intminute;intsecond;};【例6-1】友元普通函数。Clock::Clock(inth,intm,ints)//构造函数{hour=h;minute=m;second=s;}//这是友元函数,形参t是Clock类对象的引用voiddisplay(Clock&t){cout<4、友元函数程序运行结果如下:10:13:56cout<usingnamespacestd;classDate;//对Date类的提前引用声明classClock//声明Clock类{public:Clock(int,int,int);voiddisplay(Date&);private:inthour,minute,second;};【例6-2】友元成员函数。classDate//声明Date类{public:D5、ate(int,int,int);friendvoidClock::display(Date&);private:intmonth;intday;intyear;};§6.1.1友元函数Clock::Clock(inth,intm,ints)//Clock类的构造函数{hour=h;minute=m;second=s;}voidClock::display(Date&dd){cout<6、endl;}Date::Date(intm,intd,inty)//Date类的构造函数{month=m;day=d;year=y;}§6.1.1友元函数intmain(){Clockt(10,13,56);//定义Clock类对象tDated(12,25,2004);//定义Date类对象d//调用t的display函数,实参是Date类对象dt.display(d);return0;}§6.1友元函数程序运行结果如下:12/25/200410:13:56不仅可以将一个函数声明为一个类的“朋友”,而且可以将一个类(例如B类)声明为另一个类(例7、如A类)的“朋友”。这时B类就是A类的友元类。友元类B中的所有成员函数都是A类的友元函数,可以访问A类中的任何成员。§6.1封装的破坏——友元6.1.2友元类classstudent;classTeacher{public:voidassigngrades(Student&s);//给出学生成绩protected:intstu_count;//学生人数Student*plist[100];//学生数组};§6.1.2友元类classStudent{public:friendTeacher;//友元类…protected:intnum;strin8、gname;floatscore;};…§6.1.2友元类声明友元类的一般形式为:friend类名;关于友元,有三点需要说明:(1)友元函数的声明可以
4、友元函数程序运行结果如下:10:13:56cout<usingnamespacestd;classDate;//对Date类的提前引用声明classClock//声明Clock类{public:Clock(int,int,int);voiddisplay(Date&);private:inthour,minute,second;};【例6-2】友元成员函数。classDate//声明Date类{public:D
5、ate(int,int,int);friendvoidClock::display(Date&);private:intmonth;intday;intyear;};§6.1.1友元函数Clock::Clock(inth,intm,ints)//Clock类的构造函数{hour=h;minute=m;second=s;}voidClock::display(Date&dd){cout<
6、endl;}Date::Date(intm,intd,inty)//Date类的构造函数{month=m;day=d;year=y;}§6.1.1友元函数intmain(){Clockt(10,13,56);//定义Clock类对象tDated(12,25,2004);//定义Date类对象d//调用t的display函数,实参是Date类对象dt.display(d);return0;}§6.1友元函数程序运行结果如下:12/25/200410:13:56不仅可以将一个函数声明为一个类的“朋友”,而且可以将一个类(例如B类)声明为另一个类(例
7、如A类)的“朋友”。这时B类就是A类的友元类。友元类B中的所有成员函数都是A类的友元函数,可以访问A类中的任何成员。§6.1封装的破坏——友元6.1.2友元类classstudent;classTeacher{public:voidassigngrades(Student&s);//给出学生成绩protected:intstu_count;//学生人数Student*plist[100];//学生数组};§6.1.2友元类classStudent{public:friendTeacher;//友元类…protected:intnum;strin
8、gname;floatscore;};…§6.1.2友元类声明友元类的一般形式为:friend类名;关于友元,有三点需要说明:(1)友元函数的声明可以
此文档下载收益归作者所有