cprimer学习笔记4.pdf

上传人:zh****71 文档编号:126718760 上传时间:2020-03-27 格式:PDF 页数:97 大小:766.70KB
返回 下载 相关 举报
cprimer学习笔记4.pdf_第1页
第1页 / 共97页
cprimer学习笔记4.pdf_第2页
第2页 / 共97页
亲,该文档总共97页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《cprimer学习笔记4.pdf》由会员分享,可在线阅读,更多相关《cprimer学习笔记4.pdf(97页珍藏版)》请在金锄头文库上搜索。

1、 读书笔记 4 终篇 分类 IT 书籍读书笔记2012 08 28 01 39 1916人阅读 评论 2 收藏 举报 读书 c exceptionstringiostream 友元 类并非只能拥有友元函数 也可以将类作为友元 在这种情况下 友元类的所有方法都可以访问原始类的私有成员和保护成员 另外 也可以做更严格的限制 只将特定的成员函数指定为另一个类的友元 有一些函数 成员函数或类为友元只能是由类定义 而不能从外部强 加友情 因此 金光友元被授予从外部访问类的私有部分的限制 但 他们并不与面向对象的编程思想相悖 相反 他们提高了公有接口的 灵活性 嵌套类 在 c 中 可以将类声明放在另一个类

2、中 在另一个类中声明的类 被称为嵌套类 nested class 他通过提供新的类型作用域来避免名称 混乱 包含类的成员函数可以创建和使用被嵌套类的对象 而仅当声 明位于公有部分 才能在包含类的外面使用嵌套类 而且必须使用作 用域解析操作符 1 嵌套类的访问权限 有两种访问权限适合于嵌套类 首先 嵌套类的声明位置决定了嵌 套类的作用域 即他决定了程序的哪些部分可以创建这种类的对象 其次 和其他类一样 嵌套类的公有部分 保护部分和私有部分控制 了对类成员的访问 在哪些地方可以使用嵌套类以及如何使用嵌套类 取决于作用域和访问控制 如果嵌套类是在另一个类的私有部分声明的 则只有后者知道他 派生类不能

3、直接访问基类的私有部分 如果嵌套类是在另一个类中到的保护部分声明的 则他对于后者来 说是课件的 但是对于外部世界则是不可见的 不过 在这种情况中 派生类将知道嵌套类 并可以直接创建这种类型的对象 如果嵌套类是在另一个类中的公有部分声明的 则允许后者 后者 的派生类以及外部世界使用它 因为他是公有的 不过 由于嵌套类 的作用域为包含它的类 因此在外部世界使用它时 必须使用类限定 符 cpp view plaincopyprint 1 testNestedClass cpp 定义控制台应用程序的入口点 2 3 4 include stdafx h 5 include iostream 6 usin

4、gnamespace std 7 8 class Test 9 10 public 11 Test int a int b 12 13 m a a 14 m b b 15 16 void show 17 18 cout this class Test a value is m a endl 19 cout this class Test b value is m b endl 20 21 void newNestedClass double a double b 22 23 NestedClass a b show 24 25 class NestedClass 26 27 public 28

5、 NestedClass double a double b 29 30 m NestedClass a a 31 m NestedClass b b 32 33 void show 34 35 cout this class NestedClass a valu e is m NestedClass a endl 36 cout this class NestedClass b valu e is m NestedClass b endl 37 38 private 39 double m NestedClass a 40 double m NestedClass b 41 42 priva

6、te 43 int m a 44 int m b 45 46 47 int tmain int argc TCHAR argv 48 49 Test test 7 14 50 test show 51 52 test newNestedClass 10 7 10 14 53 54 Test NestedClass nestedTest 10 8 10 14 55 nestedTest show 56 57 58 return 0 59 异常 程序又是会遇到运行阶段错误 导致程序无法正常地运行下去 例 如 程序可能试图打开一个不可用的文件 请求过多的内存 或者遭 遇不能容忍的值 通常 程序员都会

7、试图预防这种意外的情况 C 异常为处理这种情况提供了一种功能强大而灵活的工具 1 调用 abort 对于处理 X Y X Y 这类问题 处理方式之一是 如果其中 一个参数等于另一个参数的负值 则调用abort 函数 abort 函数的 圆形位于头文件cstdlib 或 stdlib h 中 其典型实现是向标准错误流 即 cerr 使用的错误流 发送消息 然后终止程序 他还返回一个随实现而 异的值 告诉操作系统 处理失败 abort 是否刷新文件缓冲区 用于 存储读写到文件中的数据的内存的区域 取决于实现 如果愿意 也可 以使用 exit 该函数刷新文件缓冲区 但不显示消息 cpp view p

8、laincopyprint 1 testException cpp 定义控制台应用程序的入口点 2 3 4 include stdafx h 5 include iostream 6 usingnamespace std 7 8 double hmean constdouble a double b 9 10 int tmain int argc TCHAR argv 11 12 double x y z 13 cout x y 15 16 z hmean x y 17 cout harmonic mean of x and y is z endl 18 cout Enter next set

9、 of numbers 19 20 cout Done endl 21 22 return 0 23 24 25 double hmean constdouble a double b 26 27 if a b 28 29 cout untenable arguments to hmean 操作符使用了这种技术的变体 通过告知调用程序是成功了还是失败 了 他将 hmean 的返回值重新定义为bool 函数 让返回值指出成功 了还是失败了 另外还给该函数增加了第三个参数 用于提供答案 cpp view plaincopyprint 1 testException2 cpp 定义控制台应用程序的入

10、口点 2 3 4 include stdafx h 5 include iostream 6 usingnamespace std 7 include cfloat 8 9 bool hmean double a double b double ans 10 11 int tmain int argc TCHAR argv 12 13 double x y z 14 cout x y 16 17 if hmean x y 20 21 else 22 23 cout One value should not be the n egative of the other try again endl

11、 24 25 cout Enter next set of numbers 26 27 cout Done endl 28 29 return 0 30 31 32 bool hmean double a double b double ans 33 34 if a b 35 36 ans DBL MAX 37 returnfalse 38 39 else 40 41 ans 2 0 a b a b 42 returntrue 43 44 3 异常机制 C 异常是针对程序运行过程中发生的异常情况 例如被 0 除 的一种 相应 异常提供了将控制权从程序的一个部分传递到另一部分的途径 对异常的处理

12、有3 个组成部分 a 引发异常 b 捕获有处理程序的异常 c 使用 try 块 程序在出现问题时将引发异常 例如 可以修改程序 testException2 cpp中的 hmean 使之引发异常 而不是调用abort 函 数 throw 语句实际上是跳转 即命令程序跳到另一条语句 throw 关 键字表示引发异常 紧随其后的值 例如字符串或对象 指出了异常的特 征 程序使用异常处理程序 exceptiong handler 来捕获异常 异常处理 程序位于要处理问题的程序中 catch 关键字表示捕获异常 处理程序 以关键字 catch 开头 随后是位于括号中的类型声明 它指出了异常 处理程序要

13、响应的异常类型 然后是一个用花括号括起的代码块 指 出要采取的措施 catch 关键字和异常类型用作标签 指出当异常被引 发时 程序应跳到这个位置执行 异常处理程序也被称为catch 快 try 块标识其中特定的异常可能被激活的代码块 他后面跟一个或多 个 catch 块 try 块是由关键字try 指示的 关键字try 的后面是一个有 花括号括起来的代码块 表明需要注意这些代码引发的异常 cpp view plaincopyprint 1 testException3 cpp 定义控制台应用程序的入口点 2 3 4 include stdafx h 5 include iostream 6

14、usingnamespace std 7 8 double hmean double a double b 9 10 int tmain int argc TCHAR argv 11 12 double x y z 13 cout x y 16 17 try 18 19 z hmean x y 20 21 catch constchar s 22 23 cout s endl 24 cout Enter a new pair of numbers 25 continue 26 27 cout Harmonic mean of x and y is z endl 28 cout Enter ne

15、xt set of numbers 29 30 cout Done endl 31 32 return 0 33 34 35 double hmean double a double b 36 37 if a b 38 39 throw bad hmean arguments a b not allowed 40 41 return 2 0 a b a b 42 这个例子里被引发的异常是字符串 bad hmean arguments a b not allowed 异常类型可以是字符串或其他C 类型 通常为类类 型 执行 throw 语句类似于执行返回语句 因为它也将终止函数的执行 但 thr

16、ow 不是将该控制权返回给调用程序 而是导致程序沿函数调用 序列后退 直到找到包含try 块的函数 catch 块有点类似于函数定义 但并不是函数定义 关键字catch 表 明这是一个处理程序 而char s 则表明该处理程序与字符串异常匹配 s 与函数参数定义及其类似 因为匹配的引发将被赋给s 另外 当异 常与该处理程序匹配时 程序就爱那个执行括号中的代码 如果函数引发了异常 而没有try 块或没有匹配的处理程序时 在 默认情况下 程序最终将调用abort 函数 但可以修改这种行为 4 将对象用作异常类型 通常 引发异常的函数将传递一个对象 这样做的主要优点之一是 可以使用不同的异常类型来区分不同的函数在不同情况下引发的异常 另外 对象可以携带信息 程序员可以根据这些信息来确定引发异常 的原因 同时 catch 块可以根据这些信息来决定采取什么样的措施 cpp view plaincopyprint 1 testException4 cpp 定义控制台应用程序的入口点 2 3 4 include stdafx h 5 include iostream 6 usingnamespace

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号