程序设计教程用C语言编程第四次印刷的勘误表

上传人:沈*** 文档编号:65460272 上传时间:2022-03-24 格式:DOC 页数:9 大小:77KB
收藏 版权申诉 举报 下载
程序设计教程用C语言编程第四次印刷的勘误表_第1页
第1页 / 共9页
程序设计教程用C语言编程第四次印刷的勘误表_第2页
第2页 / 共9页
程序设计教程用C语言编程第四次印刷的勘误表_第3页
第3页 / 共9页
资源描述:

《程序设计教程用C语言编程第四次印刷的勘误表》由会员分享,可在线阅读,更多相关《程序设计教程用C语言编程第四次印刷的勘误表(9页珍藏版)》请在装配图网上搜索。

1、程序设计教程用C+语言编程第四次印刷的勘误表pIX. 第17行错:8.3 虚函数对:8.3 消息(成员函数调用)的动态绑定p33. 第18行错:上述操作符的含义是:如果“#=”代表上面的复合操作符,则a #= b按照a = a # b理解。对:上述操作符的含义是:如果“#=”代表上面的复合操作符,则a #= b按照a = a # (b)理解。p118. 倒数第5行(注意格式对齐)错: cout fib(8)cout , count endl;return 0;对: cout fib(8);cout , count endl; return 0;p142. 倒数第4行错:由小到大排个序,则在查找

2、时,可以采用一种较快的查找算法:折半查找(或称二分法)。对:由小到大排个序,则在查找时,可以采用一种较快的查找算法:折半查找(或称二分法查找)。p163. 第13行错:当然,在上面的函数max中,也可以用“*xi”的形式访问数组元素。对:当然,在上面的函数max中,也可以用“xi”的形式访问数组元素。p170. 第2个图错:p a head a1 a2. an NULL对:p a head a1 a2. an NULLp226. 倒数第6行错:void f() . void g(int i) . 对:void f() h(); . void g(int i) x = i; . p251. 第1

3、0行错:private;用于给出在派生类中新定义的成员和对基类一些成员的重定义。对:private;用于给出在派生类中新定义的成员,其中包括对基类一些成员的重定义(参见8.3.2节中的虚函数)。p251. 倒数第16行错:(1)派生类除了拥有基类的所有成员(基类的构造函数和赋值操作符重载函数除外)外,也可以具有新的成员。例如,对于上面的派生类B,它除了拥有基类A的成员:x、y、f和g外,它还包含了新的成员z和h,对一个B类的对象,其内存安排和操作如下:对:(1)派生类除了拥有新定义的成员外,还包含了基类的所有成员(基类的构造函数和赋值操作符重载函数除外)。例如,对于上面的派生类B,它除了拥有新

4、的成员z和h外,还包含了基类A的成员x、y、f和g。对B类的一个对象b,其内存安排和操作如下:p251. 倒数第9行错:(2)派生类的定义用于描述派生类与基类的差别。派生类中可以给出新的成员,也可以对基类的成员进行重定义。如果在派生类中对基类的某个成员进行了重定义,则在派生类中对该成员的访问是针对派生类中重定义的成员。例如:对:(2)如果在派生类中定义了与基类成员同名的成员,则在派生类中对该名字的访问是指派生类中新定义的成员。例如:p252. 第9行错:(3)派生类成员名的作用域嵌套在基类作用域中。对于基类的一个成员,如果派生类中没有定义与其同名的成员,则该成员名在派生类的作用域内可见,否则,

5、该成员名在派生类的作用域内不直接可见,如果要使用之,必须用基类名受限。例如:对:(3)派生类成员名的作用域嵌套在基类作用域中。对于基类的一个成员,如果派生类中没有定义与其同名的成员,则该成员名在派生类的作用域内可见,否则,该成员名在派生类的作用域内不直接可见(被隐藏了,hidden),如果要使用之,必须用基类名受限。例如:p253. 倒数第3行错:在派生类中定义新的成员或对基类的成员重定义时,往往需要用到基类的一些private成对:在派生类中定义新的成员或对基类的成员重定义时,往往需要用到基类的一些private成p255. 第19行错:给基类对象的消息也能发给派生类对象,以及基类的对象标识

6、可以标识派生类对象。例如,假对:给基类对象的消息也能发给派生类对象,以及在需要基类对象的地方可以用派生类对象去替代。例如,假p261. 第1行错:8.3 虚函数对:8.3 消息(成员函数调用)的动态绑定p261. 第711行,交换(2)和(3)的次序,并作一些文字修改错:(2)消息的多态。一个可以发送到基类对象的消息,也可以发送到派生类对象,从而可能会得到不同的解释。(3)对象标识的多态。基类的指针或引用可以指向基类对象,也可以指向或引用派生类对象,即一个对象标识符可以属于多种类型,可以标识多种对象。在对象标识符定义时指定的类型称为它的静态类型,而在运行时它实际标识的对象的类型称为它的动态类型

7、。对:(2)对象标识的多态。基类的指针或引用可以指向或引用基类对象,也可以指向或引用派生类对象,即一个对象标识符可以属于多种类型,它可以标识多种对象。在对象标识符定义时指定的类型称为它的静态类型,而在运行时它实际标识的对象的类型称为它的动态类型。(3)消息的多态。一个可以发送到基类对象的消息,也可以发送到派生类对象,从而可能会得到不同的解释。p262. 倒数第16倒数11行(用新的段替换老的段,请仔细输入新段落的文字)错:一旦在基类中指定某成员函数为虚函数,那么,不管在派生类中是否给出virtual声明,派生类(以及派生类的派生类,依此类推)中对其重定义的成员函数均为虚函数。这里的重定义是指:

8、对派生类中定义的成员函数,其函数名、参数个数和类型以及返回值类型与基类的某个虚成员函数相同。当基类的虚成员函数返回值类型为某个类(假设为C)或其指针或引用时,则派生类中重定义的成员函数的返回值类型也可以是类C的派生类或其指针或引用。派生类对基类虚函数的重定义又称为超越或覆盖(Override)。对:虚函数的动态绑定隐含着:基类中的一个成员函数如果被定义成虚函数,则在派生类中定义的、与之具有相同型构的成员函数是对基类该成员函数的重定义(或称覆盖,override)。这里,相同的型构是指:派生类中定义的成员函数的名字、参数类型和个数与基类相应成员函数相同,其返回值类型或者与基类成员函数返回值类型相

9、同,或者是基类成员函数返回值类型的派生类。一旦在基类中指定某成员函数为虚函数,那么,不管在派生类中是否给出virtual声明,派生类(以及派生类的派生类,依此类推)中对其重定义的成员函数均为虚函数。p270. 倒数第3行倒数第1行错:a A_vtbl b B_vtblvptr: A:f vptr: B:fx: A:g x: A:gy: y: z:当通过引用或指针访问对象的虚成员函数时,将利用虚函数表来动态绑定实际调用的函数,例如:对:a A_vtbl b B_vtblvptr: &A:f vptr: &B:fx: &A:g x: &A:gy: y: z:当通过对象的引用或指针访问类的虚成员函数

10、时,将利用虚函数表来动态绑定实际调用的函数,例如:p271. 第1行第8行错:typedef void (*FuncPtr)(void *); /FuncPtr是一个指向成员函数的指针类型。typedef FuncPtr *VtblPtr; /VtblPtr是一个指向虚函数表的指针类型。A *p;. p-f(); /编译成:(*(VtblPtr*)p)(p);p-g(); /编译成:(*(*(VtblPtr*)p+1)(p); 当通过引用或指针访问对象的非虚成员函数和不通过引用或指针来访问对象的成员函数时,则不用虚函数表来进行动态绑定,而是采用静态绑定,例如:对:typedef void (*

11、FuncPtr)(void *); /FuncPtr是一个指向无参数的成员函数的指针类型。A *p;. /在这段代码中,p或者指向a,或者指向bp-f(); /编译成:(FuncPtr)*(void *)p)(p);p-g(); /编译成:(FuncPtr)*(*(void *)p+1)(p); 当通过对象的引用或指针访问类的非虚成员函数和直接通过对象来访问类的成员函数(包括虚函数)时,则不用虚函数表来进行动态绑定,而是采用静态绑定,例如:p300. 第23行本页结束。(增加一些文字、调整表格的位置。如果本页不够放,可把表格后面的一些文字放入下一页,本页和下一页有一些空行可以删除!),错:上面

12、程序中的hex、endl就是操纵符。表10-2列出了常用的输出操纵符。另外,除了通过插入操作符进行输出外,也可以用ostream类提供的一些基于字节流的操作来进行输出,例如:/输出一个字符(字节)。ostream& ostream:put(char ch); /输出p所指向的内存空间中count个字节。ostream& ostream:write(const char *p,int count); 表 10-2 常用输出操纵符操纵符含义endl输出换行符,并执行flush操作flush使输出缓存中的内容立即输出dec十进制输出oct八进制输出hex十六进制输出setprecision(int

13、n)设置浮点数有效数字的个数或小数点后数字的位数setiosflags(long flags)/resetiosflags(long flags)设置/取消输出格式,flags的取值可以是:ios:scientific(以指数形式显示浮点数),ios:fixed(以小数形式显示浮点数),等等。对:上面程序中的hex、endl就是操纵符。表10-2列出了常用的输出操纵符。其中,对于浮点数(float、double和long double),当输出格式为ios:scientific或ios:fixed时,操纵符setprecision用于设置浮点数小数点后面的位数;当输出格式既不为ios:scie

14、ntific也不为ios:fixed时,操纵符setprecision用于设置浮点数有效数字的个数,这时的输出格式将根据有效数字的个数自动选择小数形式或指数形式。表 10-2 常用输出操纵符操纵符含义endl输出换行符,并执行flush操作flush使输出缓存中的内容立即输出dec十进制输出oct八进制输出hex十六进制输出setprecision(int n)设置浮点数有效数字的个数或小数点后数字的位数setiosflags(long flags)/resetiosflags(long flags)设置/取消输出格式,flags的取值可以是:ios:scientific(以指数形式显示浮点数

15、),ios:fixed(以小数形式显示浮点数),等等。另外,除了通过插入操作符进行输出外,也可以用ostream类提供的一些基于字节流的操作来进行输出,例如:/输出一个字符(字节)。ostream& ostream:put(char ch); /输出p所指向的内存空间中count个字节。ostream& ostream:write(const char *p,int count); p301. 第1824行错:/输入一个字符istream:get(char &ch); /输入一个字符串直到输入了count-1个字符或遇到delim指定的字符为止,并自动加上一个0字符。istream:getli

16、ne(char *p, int count, char delim=n); /读入count个字符至p所指向的内存空间中。istream:read(char *p,int count);4. 输入/输出操作符“”和“”和“”的重载p304. 倒数第2行错:Windows平台)将自动转换成r和n两个字符写入外部文件。对:Windows平台)将自动转换成r和n两个字符写入外部文件。一般来说,以文本方式组织的文件要用文本方式打开;以二进制方式组织的文件要用二进制方式打开。p307. 倒数第2行错:/判文件结束。当文件位置指针在文件末尾时,进行一次读操作之后将使得feof返回非零(true)。对:/判

17、文件结束。当文件位置指针在文件末尾时,继续进行读操作将会使得feof返回非零(true)。p311. 倒数第17倒数10行错:ofstream out_file(d:myfile.dat,ios:out);if (!out_file) exit(-1);int x;double y;.out_file x , y endl;out_file.put(A);out_file.write(ABCDEFG,7);对:int x;double y;.ofstream out_file(d:myfile.txt,ios:out);if (!out_file) exit(-1);out_file x y

18、x y;in_file.get(ch);in_file.read(buf,7);对:int x;double y;.ifstream in_file(D:myfile.txt,ios:in);if (!in_file) exit(-1);in_file x y; /以文本方式输入数据或ifstream in_file(D:myfile.dat,ios:in|ios:binary);if (!in_file) exit(-1);in_file.read(char *)&x,sizeof(x); /以二进制方式输入数据in_file.read(char *)&y,sizeof(y); /以二进制方

19、式输入数据p313. 倒数第1行错:该函数返回0表示文件未结束;返回非0表示文件结束(文件位置指针指向文件末尾,并且执行对:该函数返回非0表示上一次读操作中遇到文件末尾(文件位置指针指向文件末尾,并且执行p321. 倒数第9行错:导致程序运行异常的错误是可以预料的,但它是无法避免的。为了保证程序的鲁棒性,必对:导致程序运行异常的情况是可以预料的,但它是无法避免的。为了保证程序的鲁棒性,必p329. 第11行错:1. 单文档用户界面对:1. 单文档p339. 倒数第7行错:BOOL IsLoading( ) const; BOOL IsStoring( ) const; CArchive& op

20、erator (.);对:BOOL IsLoading( ) const; /返回true表示相应CArchive对象是用于输入的BOOL IsStoring( ) const; /返回true表示相应CArchive对象是用于输出的CArchive& operator (.); /用于基本数据类型和从CObject继承的类对象的输入p340. 第18行错:应用向导分别为这些类写了一些必要的代码。再例如,应用向导会为CMyApp类重定义一个如下对:应用向导分别为这些类自动编写了一些必要的代码,其中,应用向导会为CMyApp类重定义一个如下p341. 第1行之前增加一段错:另外,为了能够方便地对

21、应用框架中从MFC继承来的类进行维护,Visual C+还提供了一个对:应用向导还为该应用程序定义了一个CMyApp类的全局对象theApp,该对象将在WinMain执行之前创建。在应用向导建立的基于MFC的应用程序框架中隐藏了主函数WinMain。在隐藏的WinMain中将会调用全局对象theApp的成员函数InitInstance对应用程序进行初始化;在调用成功之后将会继续去调用theApp的成员函数Run进入消息循环;消息循环结束之后,将会调用theApp的成员函数ExitInstance进行程序结束前的一些处理。另外,为了能够方便地对应用框架中从MFC继承来的类进行维护,Visual C+还提供了一个

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!