- 1、本文档共122页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 关于类和对象的进一步讨论
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 不将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中的私有数据) 对类作”提前引用”的声明,即在正式声明一个类之前,先声明一个类名,表示此类将在稍后声明。 只有在正式声明一个类后才能用它去定义类对象。编译系统在“见到”类体后,才确定应为对象预留多大空间。 在对一个类作了提前引用声明后,可以用该类的名字去定义指向该类型对象的指
文档评论(0)