计算机科学与编程导论模块4概要1.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机科学与编程导论模块4概要1

* * * * * * 模块四 友元和引用 计算机科学与编程导论 * 本模块主要内容 友元(friend):即类的朋友,不同类的成员函数之间、类的成员函数与一般函数进行数据共享的机制; 引用(reference):即对象的别名。 * 一、 友元 类的特点是数据隐藏,即类的私有数据只有通过其成员函数访问。当频繁访问类的私有成员时,函数调用将使程序的开销很大; C++提供了一种方法---“友元”机制,可以破坏封装性,即允许外面的类或函数访问另一个类中的私有成员(数据和成员函数),这就是友元。 * 一、 友元 将某个外界对象说明为某一个类的友元,这个外界对象就可以访问这个类对象中的私有成员了; 声明为友元的外界对象既可以是另一个类的成员函数,也可以是不属于任何类的一般函数,还可以是整个的另一个类; 友元声明部分包含在其私有成员可被访问的类的定义体中。此声明可放在公有部分,也可放在私有部分。 * 友元函数 友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员 作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。 访问对象中的成员必须通过对象名。 * 例11 使用友元函数计算两点距离 #include iostream.h #include math.h class Point //Point类声明 { public: //外部接口 Point(int xx=0, int yy=0) {X=xx;Y=yy;} int GetX() {return X;} int GetY() {return Y;} friend float Distance(Point a, Point b); private: //私有数据成员 int X,Y; }; * float Distance( Point a, Point b) { double dx=a.X-b.X; double dy=a.Y-b.Y; return sqrt(dx*dx+dy*dy); } int main( ) { Point p1(3.0, 5.0), p2(4.0, 6.0); double d=Distance(p1, p2); coutThe distance is dendl; return 0; } 36 * 友元成员 一个类的成员函数作为另一个类的友元; 在声明友元成员函数时要加上成员函数所在的类名和作用域运算符::,格式如下: friend 函数返回类型 类名::函数名(参数表); 例12 教师修改学生成绩。 * 提前引用声明 类应该先声明,后使用。 如果需要在某个类的声明之前,引用该类,则应进行提前引用声明。 提前引用声明只为程序引入一个标识符,但具体声明在其它地方。 * 提前引用声明举例 class B; //提前引用声明 class A { public: void f(B b); }; class B { public: void g(A a); }; * 友元类 友元可以是一个类; 当一个类是另一个类的友元时,它的所有成员函数都成为另一个类的友元函数,即作为友元的类中的所有成员函数都可以访问另一个类中的私有成员; 格式为:friend class 类名; 在A类的定义体中:friend class B;则B是A的友元。 * 友元类举例 class A { friend class B; public: void Display() {coutxendl;} private: int x; } class B { public: void Set(int i); void Display(); private: A a; }; * void B::Set(int i) { a.x=i; } void B::Display() { a.Display(); } 39 例13 输入10个数,求其最大值和最小值。 * 友元的特性 不对称:如果A是B的友元,但B不一定是A的友元; 不传递:友元关系不能传递,如果A是B的友元,B是C的友元,但A不一定是C的友元; 不继承:基类的友元并不能由其派生类继承。 * 慎用友元 友元对封装性是一种破坏,但增加灵活性,使程序员可以在封装和快速性方面做合理选择; 建议:Do not use “friend” if not necessary. * 7 引用 引用即别名。建立引用时,总要

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档