文档详情

第12章 关于类和对象的进一步讨论.ppt

发布:2018-04-16约2.88万字共122页下载文档
文本预览下载声明
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 不将average函数定义为静态成员函数,程序需要作什么修改?为什么要用静态成员函数?请分析其理由。 如果在average函数中引用stud[1]的非静态数据成员score,应该怎样修改? 12.10 友元 友元(friend)包括友元函数和友元类。 友元可访问与其有好友关系的类的私有成员。 12.10.1 友元函数 将普通函数声明为友元函数 例3.12 友元函数的简单例子。 #include iostream using namespace std; class Time {public: Time(int,int,int); friend void display(Time ); private: int hour; int minute; int sec; }; Time∷Time(int h,int m,int s) {hour=h; minute=m; sec=s; } void display(Time t) {coutt.hour″:″t.minute″:″t.sec endl;} int main( ) { Time t1(10,13,56); display(t1); return 0; } 由于声明了display是Time类的friend函数,所以display函数可以引用Time中的私有成员。在引用这些私有数据成员时,必须加上对象名。 因为display函数不是Time类的成员函数,不能默认引用Time类的数据成员,必须指定要访问的对象。 2. 友元成员函数 例3.13 友元成员函数的简单应用。 #include iostream using namespace std; class Date; //对Date类的提前引用声明 class Time {public: Time(int,int,int); void display(Date ); //display是成员函数,形参是Date类对象的引用 private: int hour; int minute; int sec; }; class Date {public: Date(int,int,int); friend void Time∷display(Date ); private: int month; int day; int year; }; Time∷Time(int h,int m,int s) {hour=h; minute=m; sec=s; } void Time∷display(Date d) {coutd.month″/″d.day″/″d.yearendl; couthour″:″minute″:″secendl; } Date∷Date(int m,int d,int y) {month=m; day=d; year=y; } int main( ) {Time t1(10,13,56); Date d1(12,25,2004); t1.display(d1); //调用t1中的display函数,实参是Date类对象d1 return 0; } 运行时输出: 12/25/2004 (输出Date类对象d1中的私有数据) 10:13:56 (输出Time类对象t1中的私有数据) 对类作”提前引用”的声明,即在正式声明一个类之前,先声明一个类名,表示此类将在稍后声明。 只有在正式声明一个类后才能用它去定义类对象。编译系统在“见到”类体后,才确定应为对象预留多大空间。 在对一个类作了提前引用声明后,可以用该类的名字去定义指向该类型对象的指
显示全部
相似文档