C++基础知识易错点总结(1)
2016-02-29 11:27
405 查看
1. 在C++中,不能被重载的运算符有:
sizeof
. 成员运算符
.* 成员指针运算符
:: 作用域运算符
?: 条件运算符
2. C++语言多态性:编译时多态和运行时多态:
编译时多态可通过函数重载和模板实现;
运行时多态可通过虚函数实现;
实现运行时多态机制称为动态绑定;
3. C++中,头文件引用问题:
#include <> 编译器只搜索系统目录,不会搜索本地目录。比如你自己写一个头文件,你用#include <>会出错。
#inlude " " 首先搜索本地目录,如果本地目录没有才会搜索系统目录;
可以把系统的文件 放到当前目录下 改成 "" 可以优先使用;
4. 设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为?
解析:此题考查运算符优先级和&&使用规则,首先=优先级低于判断< ,有m=0,&&左侧为false,则不执行右侧,因此n的值不变为2;
5. 重载函数是指同一个函数名可以对应多个函数的实现,编译器会根据参数个数、参数类型不同而自动调用相应的函数;注意函数返回值类型不能作为重载的判断条件。
6. 运算符重载规则:
友元函数重载运算符时,因为没有this指针指向对象,因此参数个数保持和原来一样,参数列表为1,说明是1元,为2说明是2元;若无参,说明重载出错;
成员函数重载时,参数列表为空,是一元,参数列表是1,为2元;
7. 循环语句问题:
while(条件)为false时,循环体不执行;
do while(),循环体至少执行一次;
continue只能出现在for/while/do while循环内部,或嵌套在此类循环里的语句和块内部,不能在单独的switch中用continue;
break用于终止离它最近的循环语句;
8. 构造函数问题:
无论是默认构造函数还是拷贝构造函数,均无返回值;
拷贝构造函数的参数可以使一个或多个,但左起第一个必须是类的引用对象;
若类定义中没有声明拷贝构造函数,则编译器会自动生成一个缺省的拷贝构造函数,但是不会是该类的保护成员;
通过拷贝函数可以将另一个对象作为对象的初值;
9. const与define:
const常量有数据类型,而宏常量没有数据类型。编译器可以对const进行类型安全检查,但是对define只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应);
有些集成化的调试工具可以对const进行调试而不能对define进行调试。
在C++程序中只使用const常量而不使用define常量,即const常量完全取代define常量。
10. 在类的const成员函数中,用mutable修饰成员变量后,就可以修改类的成员变量了~
11. 关于类型转换:
dynamic_cast:继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点;
static_cast:同旧式C转型,如int到double,(显式类型转换);
const_cast:去除对象常量性;
reinterpret_cast:本质依赖于机器,为运算对象的位模式提供较低层次上的重新解释,不常用,较危险~
sizeof
. 成员运算符
.* 成员指针运算符
:: 作用域运算符
?: 条件运算符
2. C++语言多态性:编译时多态和运行时多态:
编译时多态可通过函数重载和模板实现;
运行时多态可通过虚函数实现;
实现运行时多态机制称为动态绑定;
3. C++中,头文件引用问题:
#include <> 编译器只搜索系统目录,不会搜索本地目录。比如你自己写一个头文件,你用#include <>会出错。
#inlude " " 首先搜索本地目录,如果本地目录没有才会搜索系统目录;
可以把系统的文件 放到当前目录下 改成 "" 可以优先使用;
4. 设a、b、c、d、m、n均为int型变量,且a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为?
解析:此题考查运算符优先级和&&使用规则,首先=优先级低于判断< ,有m=0,&&左侧为false,则不执行右侧,因此n的值不变为2;
5. 重载函数是指同一个函数名可以对应多个函数的实现,编译器会根据参数个数、参数类型不同而自动调用相应的函数;注意函数返回值类型不能作为重载的判断条件。
6. 运算符重载规则:
友元函数重载运算符时,因为没有this指针指向对象,因此参数个数保持和原来一样,参数列表为1,说明是1元,为2说明是2元;若无参,说明重载出错;
成员函数重载时,参数列表为空,是一元,参数列表是1,为2元;
7. 循环语句问题:
while(条件)为false时,循环体不执行;
do while(),循环体至少执行一次;
continue只能出现在for/while/do while循环内部,或嵌套在此类循环里的语句和块内部,不能在单独的switch中用continue;
break用于终止离它最近的循环语句;
8. 构造函数问题:
无论是默认构造函数还是拷贝构造函数,均无返回值;
拷贝构造函数的参数可以使一个或多个,但左起第一个必须是类的引用对象;
若类定义中没有声明拷贝构造函数,则编译器会自动生成一个缺省的拷贝构造函数,但是不会是该类的保护成员;
通过拷贝函数可以将另一个对象作为对象的初值;
9. const与define:
const常量有数据类型,而宏常量没有数据类型。编译器可以对const进行类型安全检查,但是对define只进行字符替换,没有类型安全检查,并且在字符替换中可能会产生意料不到的错误(边际效应);
有些集成化的调试工具可以对const进行调试而不能对define进行调试。
在C++程序中只使用const常量而不使用define常量,即const常量完全取代define常量。
10. 在类的const成员函数中,用mutable修饰成员变量后,就可以修改类的成员变量了~
11. 关于类型转换:
dynamic_cast:继承体系安全向下转型或跨系转型;找出某对象占用内存的起始点;
static_cast:同旧式C转型,如int到double,(显式类型转换);
const_cast:去除对象常量性;
reinterpret_cast:本质依赖于机器,为运算对象的位模式提供较低层次上的重新解释,不常用,较危险~
相关文章推荐
- C++ 关键字 explicit, export, mutable
- C 语言移位操作陷阱
- C++ template 分离式编译
- C语言中的基本文件操作:fopen , fread , fseek , fclose.
- C++中直接初始化与复制初始化
- C++的socket编程学习
- C语言图形处理
- VC++基于微软语音引擎开发语音识别总结
- c++抽象类和纯虚函数 知识整理
- C/C++ 之 left operand must be l-value 错误提示总结
- C++先序遍历输入树的创建
- 【c/c++】C++代码一次读取文本文件全部内容到string对象
- C++:关联容器(pair、map、set)
- wav文件格式分析(代码 C++ )
- C语言中fflush函数的使用方法
- 《C++ Primer》之重载操作符与转换(中)
- 单链表的逆置-C++实现
- 算法代码实现之Union-Find,C++实现,quick-find、quick-union、加权quick-union(附带路径压缩优化)
- vs2010 C++创建和使用动态链接库(dll)
- C++语言-05-三大特性