第六章 封装性_第1页
第六章 封装性_第2页
第六章 封装性_第3页
第六章 封装性_第4页
第六章 封装性_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在类public部分声明的成员函数,统称为该类的外部接口,其他对象是通过这些外部接口来使用这个类所提供的服务。 在类外声明的成员函数,其函数的全名应该是“类名:函数名”,函数原型应该是“返回值类型 类名:函数名(参数表)”。 可以象重载普通函数那样重载成员函数。(重载将在第八章中详细讲述) 程序实例6_1_1程序实例6_1_2程序实例6_2_1程序实例6_2_2 可以使用其他类的对象作为正在定义的类的数据成员。前面讲过,复杂的对象可以由比较简单的对象以某种方式组合而成,为了在程序中表达这种组合关系(聚合关系) ,就是用对象或指向对象的指针作为类的数据成员。 这种用其他类的对象作为一个类的数据成

2、员,通常称为类嵌套。怎样完成对象成员的初始化工作。具体的做法是,在外层类的构造函数参数表后面写一个冒号:,在冒号后面再写上对象成员名及初值表如下页所示。 。 class namedptr public: namedptr(const string& initname, char *initptr); . private: string name; char * const ptr;namedptr:namedptr(const string& initname, char *initptr) name = initname; ptr = initptr; 用成员初始化列表比在构造函数里赋值要好

3、,可以提高程序运行效率。当使用成员初始化列表时,只有一个string成员函数被调用。而在构造函数里赋值时,将有两个被调用。为了理解为什么?请看在声明namedptr对象时都发生了些什么。对象的创建分两步:1.数据成员初始化。2.执行被调用构造函数体内的动作。 对namedptr类来说,这意味着string对象name的构造函数总是在程序执行到namedptr的构造函数体之前就已经被调用了。当在namedptr的构造函数里对name执行赋值时,会对name调用operator=函数。这样总共有两次对string的成员函数的调用:一次是缺省构造函数,另一次是赋值。相反,如果用一个成员初始化列表来指

4、定name必须用initname来初始化,name就会通过拷贝构造函数以仅一个函数调用的代价被初始化。 假设已经定义了向量类Vector和矩阵类Matrix,向量和矩阵的元素都是float型。在这两个类中各自说明了一个公有成员函数elem,用于存取向量和矩阵的私有数据成员Vi和Mij。下面给出函数elem的定义:Float &Vector:elem(int i) return Vi;Float &Matrix:elem(int i,int j) return Mij; 现在设计一个矩阵乘向量的函数,假设向量只有5个元素,矩阵也仅有5个元素。因为向量和矩阵元素都是私有的,必须通过公有成员函数elem访问它们。下面是用于完成矩阵乘向量操作的全局函数的定义: 为了完成上述矩阵乘向量的操作,函数multiply共需调用成员函数elem的次数为80次。如果矩阵和向量较大,则开销的增大是明显的。 Class C1Class C1 intint f( f(); ); ;Class C2Class C2 friend friend intin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论