学习没有捷径,但考试有捷径
临近考试,虽然之前对一些概念搞清楚了,但时日一长,很多又模糊了。因此利用整理成章,将知识重拾。
考试的范围如下:
1. 常量(const、符号、字符串常量、立即数)
2. 引用和指针
3. 类的封装和隐藏(静态成员、友元函数)
4. 类的初始化(初始化方式和顺序)
5. 类的继承(继承方式、构函列表、多继承)
6. 类的多态性(函数重载、运算符重载、虚函数、虚函数表)
7. 类的作用域概念
数据类型
逻辑型(bool型):
true为1,false为0
bool judge;
judge = (0 == 1);
cout <<"judge: "<< judge << endl;
打印结果为0
常量
- 字符常量:
每个字符常量表示一个字符,当单引号内多于一个字符时,按规则解释为一个字符。
| ‘\0’ | 空字符 |
| ‘\12’ |换行符|
|’\x5A’ |‘Z’ | - 枚举常量:
用户定义类型,实际是int类型的一个子集。
enum MyEnum
{
good,better=3,best
};
MyEnum code = MyEnum(best);//可以定义变量,通过自身枚举成员赋值
- 符号常量:
先声明,后使用。不可赋值改变。
int c=3;
//cin >> c;
const int a = 4, b = a*5, d =c;//只要在声明时初始化即可
const int pai = 3.1415926;
知识点
- 全局变量在函数定义、类定义、程序块之外声明的变量,若不专门初始化,自动初始化为0.
- static静态变量生存期与全局变量相同,未赋初值系统也会自动赋初值为0.
- 变量的作用域可能小于生存期。由于可以在程序的不同部分为不同变量取一个名字。
辨析
- 指向常量的指针
const char* p = "what";
char mark[10] = "why";
p = mark;
可以改变指针指向,但不可改变指针指向的内容
- 常量(型的)指针
char name[10] = "cascara";
char* const pname = name;
*pname = 'C';
可改变指针指向的内容,但不可改变指针指向。
运算符
-
不常用位运算:
|&|按位与|
| | |按位或|
| ^ |按位异或|
|<<|按位左移|
|>>|按位右移| 指向箭头所在方向移位
|~|按位取反| -
优先级重点:
int m[2]={2,9};
*m++;//先与增量结合,再取值
程序有误,m为数组地址,不可修改的左值,修改为:
int m[2]={2,9};
int* pm=m;
*pm++;
- 单目、赋值右结合,其余左结合
空指针
int i = 1;
void* pv;
pv = &i;
cout << *(int*)pv << endl;//必须进行类型转换才能显示结果
C++特性
- 初始化可用函数表示法
int i(6);
char name[10]("cascara");
- 用作用域运算符访问被隐藏的全局变量
int i;
int main(void)
{
int i = 0;
::i = 6;
cout << "local i: " << i << endl;
cout << "global i: " << ::i <<endl;
return 0;
}
立即数
第一次接触这个名词,网上搜索相关文章:立即数
概念
通常把在立即寻址方式指令中给出的数称为立即数
立即寻址方式只能用于源操作数字段,不能用于目的操作数字段,经常用于给寄存器赋初值。
例:MOV AX,251 ;将十进制数251送入寄存器AX,“251”是立即数
判定方法
- 把数据转换成二进制,从低到高写成 4 个一组,最高位不够一组的补 0;
- 数 1 的个数,如果大于 8 个,肯定不是立即数,如果小于 8 个看步骤 3;
- 如果数据当中有连续大于等于 24 个 0,循环左移偶数位,使高位全部是 0;
- 找最高位 1,去掉前面的最大的偶数个 0 ;找到最低位的 1,去掉后面最大偶数个 0;
- 数剩下的位数,如果小于等于 8 位,那么这个数就是立即数,否则不是立即数。