




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+程序设计教程(第二版) 第八章 类 Chapter 8 Class 清华大学出版社 钱 能 *1 n类 类是一种可以作为交易的概念代码 类是自定义的数据类型类与应用 程序不同,类的功能虽然独立,但不 能独立启动,就象汽车零件那样. n类机制 要通过编程的方法来维护类的数据 表达,值范围和操作并不是简单的, 因为要限制一些操作只能让类自己来 做,以免发生问题时,无人敢对其负 责 类机制就是通过语言的规定性来实 现一些技术,使类具有数据封装,信息 屏蔽,多态等特征,起到数据类型的 作用,而达到方便编程的目的. Date2 第八章内容 1. 从结构到类( From Structure to Class ) 2. 成员函数 ( Member Functions ) 3. 操作符 ( Operators ) 4. 再论程序结构 ( Program Struture Restatement ) 5. 屏蔽类的实现 ( Shield Class Implementations ) 6. 静态成员 ( Static Members ) 7. 友元 ( Friends ) Date3 1. 从结构到类( From Structure to Class ) n结构:单纯堆积数据空间构造的类 型 n类:不但描述数据空间,还描述其 操作的自定义类型 n变量:由内部数据类型或衍生的结 构类型所产生的实体 n对象: 由类产生的实体,本质上,变 量也是对象,只不过粗糙一点罢了. Date4 2. 成员函数( Functions ) 成员函数与普通函数的区别: n成员函数属于类, 成员函数定义是类设计的 一部分, 其作用域是类作用域. 而普通函数一 般为全局函数 n成员函数的操作主体是对象,使用时通过捆绑 对象来行使其职责, 而普通函数被调用时没 有操作主体 Date5 成员函数的内联性 成员函数可以在类内,也可以在类外定义,若在类内 定义,则默认为内联函数.但编译器对内联的接受自 有其原则. class Date int year, month, day; public: void set ( int y, int m, int d ) / 默认内联 year=y; month=m; day=d; ; inline bool Date:isLeapYear ( ) / 显式内联 return ! ( year%400 ) | !(year%4) Date6 访问成员函数的方式 对象方式 Date d; d.set(2005,12,5); 对象指针方式 Date* dp = new Date; dp-set(2005,12,5); / delete dp; Date7 常成员函数与函数的常量参数 常成员函数 对捆绑的对象, 不允许写操作 函数的常量参数 对传递的参数, 不允许写操作 例如: bool Date:comp(const Date / error: 常成员函数捆绑的对 象 a.year = 2003; / error: 常量对象 return year=b.yaer Date8 3. 操作符 ( Operators ) n操作符定义就是函数定义,调用操作符就是调用 函数,例如: Point operator+(const Point s.set(a.x + b.x, a.y + b.y); return s; Point p, q; p.set(3, 2); q.set(1, 5); Point r = p + q; / p + q 等价于 operator+(p, q) n一切自定义操作符都是语言中操作符的重载. n操作符作用:让编译器理解人性化编程代码.从 正确性上讲并不是必要的.例如,Java不允许操作 符重载 Date9 值返回 返回临时表达式的值,例如: Point operator+(const Point s.set(a.x+b.x, a.y+b.y); return s; 引用返回 函数将处理结果放入参数中时, 如果有将返回值作连续操作的需要,便需 要返回参数,即引用返回,例如: ostream 值返回与引用返回 Date10 成员操作符与普通操作符 普通操作符: Point operator+(const Point s.set(x+d.x, y+d.y); return s; 成员操作符: Point Point:operator+(const Point s.set(a.x+b.x, a.y+b.y); return s; p + q等价于成员操作符p.operator+(q),或者普通操作符 operator(p, q) 两者必居其一. Date11 4. 再论程序结构 ( Program Structure Restatement ) 访问控制 成员函数 一般为公有public 公有的成员函数在类的外部可以被使 用,即外界可以调用成员函数 数据成员 一般为私有private 私有的数据成员在外部不能被访问, 即外界不能访问对象的数据分量, 而只能由成员函数内部去处理 公有和私有可任意设定 访问控制public和private是语言提 供给程序员的功能 Date12 程序结构 类定义作为头文件,如:point.h 类的实现作为独立编译单元,如: point.cpp 使用类的程序作为另一独立编译单元,如 :f0809.cpp 类的头文件和类的实现可以作为一个独立 的资源提供给编程者 内联的成员函数定义一般放在头文件中 头文件中必须使用头文件卫士技术 Date13 类作用域与类定义作用域 类定义作用域: 从类定义结束开始,到从外面包围类 定义的块结束(若类定义外无包围块 ,则结束于文件) 使用类的程序员在类定义作用域下编 程 类作用域: 类定义内部及成员函数定义内部 实现类的程序员在类作用域下编程 Date14 5. 屏蔽类的实现 ( Shield Class Implementations ) 使用类的应用程序只需要类定 义头文件编程 实现类,也只需要类定义头文 件,不需要使用类的程序细 节 确定了类定义(头文件),便可 以从事两方面的编程而互不 干涉 类定义成功地屏蔽了类的实现 ,是类机制的技术体现 Date15 6. 静态成员 ( Static Members ) 静态数据成员 在类作用域中声明,在类定义作 用域中定义(一般是在main函数启 动之前定义),每个该类对象都共 享描述任何对象的共性状态 在多文件程序结构中,一般放在 类的实现编译单元中 Date16 例如: class Student string name; public: static int num; void set(string +num; ; int Student:num = 0; /静态数据成员初始 化 int main() Student s1, s2; s1.set(“Smith“); s2.set (“John”) ; couts1.num“n”; / 可行,非标准 coutStundent:num“n”; / 访问静态成 员 Date17 静态成员函数 调用时,不捆绑对象,所以,不能直接 操作对象和其成员,若需访问该类 对象,必须以参数传递之. 静态成员函数一般设计为公有的,以 访问私有静态数据成员为目的. 调用方式是以类名加域操作符:后跟 静态成员函数 Date18 例如: class Student static int num; / 静态私有成员 /. public: / . static void showNum() coutnum“n”; / 访问 静态私有成 员 ; int Student:num = 0; / 静态数据成员初始 化 int main() Student s; s.showNum(); / 可行,但非标准 Student:showNum(); / 静态成员函数调用 Date19 7. 友元 ( Friends ) n友元的作用:弥补访问控制符的 不足,在外部频繁操作对象(即 调用成员函数),引起调用开销 的增加时,可以通过直接访问对 象的成员(而不是调用成员函数) ,而使性能明显提高. Date20 例如:矩阵乘向量函数 friend Vector multiply(Matrix / 整型向量初始值0 r.set ( m.szl ); / 直接访问私有数据成员 szl for ( int i=0; im.szl; i+ ) for ( int j=0; jm.szr; j+ ) r.vi += m.mi*m.szr+j * v.vj; return r; 若以普通函数的身份实现,则要大量调用成 员函数去访问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色低碳数字化新型园区污水处理厂项目可行性研究报告模板立项申批备案
- 2025合作协议样本
- 2025年春季部编版初中数学教学设计八年级下册第1课时 平行四边形的判定 1
- 摄像课基础知识培训课件
- 2025年版动产与不动产抵押合同模板
- 公司股权税务知识培训总结
- 公司组织安全知识培训课件
- 插花入门基础知识培训课件
- 制造业岗位面试题及答案
- 2025济南市房屋租赁合同中介版
- 酒店客房样板间装修验收记录表
- 2024年高级统计实务考试真题及答案解析
- 铁总物资〔2015〕250号:中国铁路总公司物资采购异议处理办法
- GB/Z 42625-2023真空技术真空计用于分压力测量的四极质谱仪特性
- 人民医院心血管外科临床技术操作规范2023版
- 助理工程师考试试题以及答案
- 送东阳马生序
- 2017年全国大学生数学建模A题
- 2023年专升本计算机题库含答案专升本计算机真题
- GB/T 16674.1-2016六角法兰面螺栓小系列
- 住宅项目景观工程施工策划(图文并茂)
评论
0/150
提交评论