目前,C/C++程序设计方面的教材和著作有很多,但大多数是从语法、编程技巧、算法等角度进行组织和编写的。在实际的软件系统开发过程中,许多刚涉足编程工作的程序员编写的代码往往质量不高,程序中往往隐藏着一些问题和错误,因程序员缺乏编程和调试经验而难以发现,给程序设计语言的学习和软件系统的开发造成了很大障碍。夏永祥、史志才编著的《C/C++常见编程问题及解答(附光盘)》借鉴国内外的相关书籍、学术论文、网站论坛等文献资料,结合软件开发中经常遇到的实际问题和笔者长期从事软件系统开发的经验,从用户使用的角度出发,对C/C++编程中容易产生错误的知识点进行解释,对程序中常见的错误进行解析,以帮助读者尽快掌握C/C++编程技术,避免程序中的错误,提高代码质量,尽快成为经验丰富的程序员。
夏永祥、史志才编著的《C/C++常见编程问题及解答(附光盘)》针对C/C++和面向对象程序设计中的常见错误,结合大量实例进行解析,注重实用性,使读者容易理解,快速掌握。每个例子都给出了题目要求、错误代码、编译结果、问题分析、正确代码及其运行结果。其中在编译结果中给出了编译器提供的错误和警告信息,以帮助读者判断错误所在。本书所附光盘中包括书中所有例题、课后练习及其答案的源代码。
《C/C++常见编程问题及解答(附光盘)》适用于计算机、自动化等专业的本科生和研究生,以及计算机程序员和广大C/C++初学者。
第一部分 C语言常见编程问题
第1章 初学者常见问题3
问题1 字母大小写混淆3
问题2 容易混淆的字符4
问题3 在代码中使用了中文字符6
问题4 丢失或添加多余的分号7
问题5 丢失或添加多余的大括号8
问题6 混乱的缩进和对齐11
练习113
第2章 基本数据类型15
问题7 整型常量的第一个字符为0引起的误解19
问题8 将字符常量与字符串常量混淆19
问题9 混淆“/”和“\\\\”20
问题10 缺少强制类型转换 22
问题11 类型转换降低精度23
练习224
第3章 存储类26
问题12 在使用变量前未定义或未初始化28
问题13 错误理解静态变量的作用域29
问题14 全局变量的错误声明31
问题15 滥用全局变量33
练习333
第4章 运算符35
问题16 分母为037
问题17 对实型变量进行“求余”运算38
问题18 "=”与“==”混淆39
问题19 "&”与“&&" , "|”与“‖" 混淆40
问题20 "++" 、 "--”的前置和后置方式41
问题21 运算符优先级错误42
练习443
C/C++常见编程问题及解答目录第5章 流程控制45
问题22 逻辑表达式或关系表达式错误48
问题23 if-else嵌套不配对50
问题24 分号导致的流程变化52
问题25 switch语句:case后面缺少break54
问题26 忽视了while和do-while语句在细节上的区别56
问题27 滥用goto语句57
练习559
第6章 函数61
问题28 使用库函数前没有包含头文件61
问题29 使用函数之前未声明62
问题30 函数实参格式不对63
问题31 错误的返回值65
问题32 递归时设置了错误的边界条件65
练习667
第7章 C语言预处理程序69
问题33 宏定义格式错误71
问题34 带参数的宏替换错误72
问题35 把宏调用混同于函数调用73
问题36 宏定义中多余的空格74
练习775
第8章 指针和数组76
问题37 数组越界79
问题38 定义数组时误用变量80
问题39 动态分配内存空间不够82
问题40 内存泄漏83
问题41 访问悬空指针85
练习886
第9章 结构和联合88
问题42 结构的嵌套89
问题43 结构与联合混淆91
练习992
第10章 输入和输出94
问题44 printf和scanf的参数设置96
问题45 错误的文件打开和关闭方式98
练习10100第二部分 C++常见编程问题
第二部分 C++常见编程问题
第11章 命名空间103
问题46 C++标准程序库的命名空间104
问题47 名字冲突104
练习11107
第12章 C++语言的输入输出108
问题48 "<<" 、 ">>”混淆108
问题49 cout运算符优先级错误109
练习12110
第13章 动态内存的分配与释放111
问题50 new/delete与malloc/free混用111
问题51 没有释放动态分配的内存空间113
问题52 一个指针被delete时,没有指向最初的地址114
问题53 重复释放已释放的空间116
问题54 重复delete同一指向的多个指针117
问题55 delete指向某一普通变量的指针118
练习13119
第14章 引用122
问题56 引用的声明和初始化错误123
问题57 引用作为参数的错误用法124
问题58 引用作为返回值的错误用法126
练习14127
第15章 const修饰符129
问题59 用const定义常量的错误130
问题60 const参数错误131
问题61 const成员函数错误132
练习15133
第16章 字符串135
问题62 使用string类型未引用名字空间135
练习16136
第17章 C++语言中函数的新特性137
问题63 内联函数定义错误138
问题64 函数的缺省参数定义错误139
问题65 函数重载错误140
问题66 函数的缺省参数造成的二义性142
练习17143
第三部分 面向对象程序设计常见编程问题
第18章 类与对象147
问题67 类的定义格式错误149
问题68 对象和类的访问错误150
问题69 在类体中进行数据成员的初始化152
问题70 成员函数实现时缺少作用域运算符154
问题71 缺少引用性说明156
问题72 构造函数/析构函数不应该有返回值158
问题73 多余的析构函数159
问题74 构造函数缺省参数导致的二义性161
问题75 创建对象时缺少相应的构造函数162
问题76 默认的拷贝构造函数导致的内存问题163
问题77 静态数据成员初始化错误166
问题78 静态成员函数引用非静态数据成员167
问题79 局部类定义错误169
问题80 嵌套类定义错误171
练习18174
第19章 友元180
问题81 把友元函数当作类的成员181
问题82 在类外定义友元函数时多余的friend关键字183
问题83 友元关系不具有交换性184
问题84 友元关系不具有传递性186
练习19188
第20章 继承机制191
问题85 基类成员在派生类中的访问权限192
问题86 派生类中由基类说明的数据成员应由基类的构造函数初始化196
问题87 多继承的二义性问题198
问题88 截切问题201
练习20203
第21章 多态和虚函数207
问题89 运算符重载时不可臆造新的运算符209
问题90 运算符重载时不能改变运算符操作数的个数211
问题91 自增、自减运算符的重载: 前缀运算和后缀运算的混淆212
问题92 重载了不允许重载的运算符214
问题93 运算符重载为友元函数时的参数个数215
问题94 不能重载为友元函数的运算符217
问题95 左操作数是常数时的运算符重载219
问题96 虚函数不能是静态成员函数222
问题97 虚函数必须是类的成员函数,不能是友元223
问题98 构造函数不能是虚函数225
问题99 将基类析构函数声明为非虚函数225
问题100 在构造函数和析构函数里调用虚函数227
问题101 重载虚函数导致的问题229
问题102 在构造函数和析构函数中调用纯虚函数231
问题103 实例化抽象类232
问题104 派生类必须实现所有纯虚函数才是具体类,否则仍是抽象类234
练习21237
附录 练习答案242
参考文献250