2第二讲——类和对象.ppt

  1. 1、本文档共101页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 友元成员函数 #include iostream.h class two; //前置声明 class one { int a; public: void fun(two ); //因涉及“前置声明”,故必需将函数实现放在类外!因为此时尚无法使用two 的任何成员。 void get (void ){coutaendl;} }; 关于前置声明: 前置声明的类只是声明,不是定义。是将标识符“挂了个号”,尚没有细节,因此不能使用类的成员,也不能创建对象,但可以声明指向该类类型的指针或引用。 class two { int b; friend void one::fun(two ); //one的成员函数在two中是友元成员函数 public: void put (int i){b=i;coutbendl;} }; void one::fun(twor){a=r.b;coutaendl;} //友元成员函数的函数实现放在类外 void main() { one oa; two ob; ob.put(8); //给ob对象赋初值 oa.fun(ob); //用函数给oa对象赋值 oa.get(); } 友元类 若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员(全方位开放)。 声明语法:将友元类名在另一个类中使用friend修饰说明。 友元类 私有成员 公有成员 友元类 友元类举例 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(); } 访问组合对象的私有成员正是友元的“特长”。 请解释此句涵义 B A B A a 友元 组合 请看此题的示意图: 请为此题添加其它必要的函数及主函数,观察运行结果。 友元关系的性质 友元关系是单向的 如果B类是A类的友元,则B类的函数可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据。(孙悟空钻进铁扇公主肚里。) 友元关系不能传递 如果B类是A类的友元, C类是B类的友元,若没特别声明,则 C类和A类无友元关系。 (朋友的朋友不见得是朋友!) 友元关系不能继承 如果B类是A类的友元, B类的子类不会自动成为A类的友元类。(借来的东西不是遗产。) “常”机制的引入 虽然封装机制保证了数据的安全性,但各种形式的数据共享,如静态、友元却又不同程度地破坏了数据的安全。 可见单纯封锁是消极的,也不能满足程序对数据的需要。因此,对于既需要共享,又需要防止改变的数据,语言应该提供一种机制——”常“。因为常量在程序运行期间是不可改变的,所以可有效地保护数据。 “常”的图示: 私有成员 公有成员 常的 私有成员 公有成员 常数据成员是只读的 常对象则使全部数据成员成为只读的 函数成员应具有什么行为? “常”的种类 常引用:被引用的对象不能被更新。 const 类型说明符 引用名 常对象:必须进行初始化,且不能被更新。 类名 const 对象名 常成员(包括常数据成员和常函数成员) 类型说明符 const 数据成员名 返回类型 函数成员名() const 常数组:数组元素不能被更新(下一章介绍)。 类型说明符 const 数组名[大小]... 指向常量的指针和常指针(下一章介绍)。 还有其他许多形式的“常”,随着学习内容的展开,我们还会学习它们。 例 常引用做形参 #includeiostream using namespace std; void display(const double r) //常引用做形参,在函数中不能更新 r所引用的对象, { coutrendl; }

文档评论(0)

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

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

1亿VIP精品文档

相关文档