- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++ 参考:C++程序设计教程 p92~p99 第六讲 类和对象(4) 本次议题 关于友元 问题的产生 友元的分类 友元函数 友元全局函数 类的提前声明 友元成员函数 友元类 本次议题 关于友元 问题的产生 友元的分类 友元函数 友元全局函数 类的提前声明 友元成员函数 友元类 问题的产生 通常一个类中的非公有成员是无法被该类外的函数访问的,而只能被该类的成员函数访问 DEMO 8_1 问题的产生 如果将全局函数声明为该类的友元函数,则该函数将能访问该类的非公有成员 DEMO 8_1 本次议题 关于友元 问题的产生 友元的分类 友元函数 类的提前声明 友元全局函数 友元成员函数 友元类 友元的分类 友元全局函数(友元非成员函数) 友元成员函数 友元类 友元函数 本次议题 关于友元 问题的产生 友元的分类 友元函数 类的提前声明 友元全局函数 友元成员函数 友元类 类的提前声明 回忆函数的原型声明 #include iostream using namespace std; void foo(); int main() { foo(); return 0; } void foo(); { cout 函数的提前声明! endl; } class B; //提前声明 class A { …… }; void foo( B r ) { } int main() { void foo(B r); //RIGHT可以声明引用 B *p_b = NULL; //RIGHT可以定义指针! //B bb; //ERROR不能定义对象 return 0; } class B { …… }; 类的提前声明 类和函数也是类似的,有时也需要提前声明 [注意] 提前声明仅能定义该类的指针或引用,不能定义该类的对象 C++没有提供提前声明成员的方法 b1 本次议题 关于友元 问题的产生 友元的分类 友元函数 类的提前声明 友元全局函数 友元成员函数 友元类 友元全局函数 概念: 将全局函数声明为某个类的友元,该全局函数就是该类的友元全局函数 声明方法: friend 类型 函数名(形参表); class CTime { public: CTime(int h = 0, int m = 0, int s = 0); friend void display(CTime r); private: int m_iHour; int m_iMinute; int m_iSec; }; CTime::CTime(int h, int m, int s) { m_iHour = h; m_iMinute = m; m_iSec = s; } void display(CTime r) { cout r.m_iHour : r.m_iMinute : r.m_iSec endl; } int main() { CTime myTime(12,30,60); display(myTime); return 0; } 友元全局函数(cont.) 8_2 友元全局函数(cont.) [注意] 友元非成员函数应该声明在类作用域内,且friend仅在声明友元时出现一次 类的访问属性不会影响成员函数的全局性 友元非成员函数的调用方式和全局函数一样 友元全局函数(cont.) 友元非成员函数的声明语句可作为该函数的声明语句 友元全局函数也可以在类内定义,此时编译环境仍将 其视为全局函数,且定义就相当于声明而不需要提前声明 DEMO 8_3 一个全局函数可以做为多个类的友元 DEMO 8_4 本次议题 关于友元 问题的产生 友元的分类 友元函数 类的提前声明 友元非成员函数 友元成员函数 友元类 友元成员函数 概念:将一个类的成员函数声明为另一个类的友元函数 声明方法:在类中用friend声明函数! friend 类型 类名::函数名(形参表); 必不可少 class A; class B { public: B(int arg = 4); void display(A r); private: double m_dVal; }; B::B(int arg):m_dVal(arg) { } class A { public: A(int arg=3); friend void B::display(A r); private: int m_iVal; }; 友元成员函数
文档评论(0)