第一部分C语言常见编程问题 3
第1章 初学者常见问题 3
问题1字母大小写混淆 3
问题2容易混淆的字符 4
问题3在代码中使用了中文字符 6
问题4丢失或添加多余的分号 7
问题5丢失或添加多余的大括号 8
问题6混乱的缩进和对齐 11
练习1 13
第2章 基本数据类型 15
问题7整型常量的第一个字符为0引起的误解 19
问题8将字符常量与字符串常量混淆 19
问题9混淆“/”和“” 20
问题10缺少强制类型转换 22
问题11类型转换降低精度 23
练习2 24
第3章 存储类 26
问题12在使用变量前未定义或未初始化 28
问题13错误理解静态变量的作用域 29
问题14全局变量的错误声明 31
问题15滥用全局变量 33
练习3 33
第4章 运算符 35
问题16分母为0 37
问题17对实型变量进行“求余”运算 38
问题18“=”与“==”混淆 39
问题19“&”与“&&.”, “|”与“‖”混淆 40
问题20“+++”、“——”的前置和后置方式 41
问题21运算符优先级错误 42
练习4 43
第5章 流程控制 45
问题22逻辑表达式或关系表达式错误 48
问题23 if-else嵌套不配对 50
问题24分号导致的流程变化 52
问题25 switch语句:case后面缺少break 54
问题26忽视了while和do-while语句在细节上的区别 56
问题27滥用goto语句 57
练习5 59
第6章 函数 61
问题28使用库函数前没有包含头文件 61
问题29使用函数之前未声明 62
问题30函数实参格式不对 63
问题31错误的返回值 65
问题32递归时设置了错误的边界条件 65
练习6 67
第7章C语言预处理程序 69
问题33宏定义格式错误 71
问题34带参数的宏替换错误 72
问题35把宏调用混同于函数调用 73
问题36宏定义中多余的空格 74
练习7 75
第8章 指针和数组 76
问题37数组越界 79
问题38定义数组时误用变量 80
问题39动态分配内存空间不够 82
问题40内存泄漏 83
问题41访问悬空指针 85
练习8 86
第9章 结构和联合 88
问题42结构的嵌套 89
问题43结构与联合混淆 91
练习9 92
第10章 输入和输出 94
问题44 printf和scanf的参数设置 96
问题45错误的文件打开和关闭方式 98
练习10 100
第二部分C++常见编程问题 103
第11章 命名空间 103
问题46 C++标准程序库的命名空间 104
问题47名字冲突 104
练习11 107
第12章C++语言的输入输出 108
问题48“<<”、“>>”混淆 108
问题49 cout运算符优先级错误 109
练习12 110
第13章 动态内存的分配与释放 111
问题50 new/delete与malloc/free混用 111
问题51没有释放动态分配的内存空间 113
问题52一个指针被delete时,没有指向最初的地址 114
问题53重复释放已释放的空间 116
问题54重复delete同一指向的多个指针 117
问题55 delete指向某一普通变量的指针 118
练习13 119
第14章 引用 122
问题56引用的声明和初始化错误 123
问题57引用作为参数的错误用法 124
问题58引用作为返回值的错误用法 126
练习14 127
第15章const修饰符 129
问题59用const定义常量的错误 130
问题60 const参数错误 131
问题61 const成员函数错误 132
练习15 133
第16章 字符串 135
问题62使用string类型未引用名字空间 135
练习16 136
第17章C++语言中函数的新特性 137
问题63内联函数定义错误 138
问题64函数的缺省参数定义错误 139
问题65函数重载错误 140
问题66函数的缺省参数造成的二义性 142
练习17 143
第三部分 面向对象程序设计常见编程问题 147
第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
练习18 174
第19章 友元 180
问题81把友元函数当作类的成员 181
问题82在类外定义友元函数时多余的friend关键字 183
问题83友元关系不具有交换性 184
问题84友元关系不具有传递性 186
练习19 188
第20章 继承机制 191
问题85基类成员在派生类中的访问权限 192
问题86派生类中由基类说明的数据成员应由基类的构造函数初始化 196
问题87多继承的二义性问题 198
问题88截切问题 201
练习20 203
第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
练习21 237
附录 练习答案 242
参考文献 250