注意的知识点:
1、C++中,*(a+3)和a[3]一个东西
2、case的执行:先执行匹配的case,没有break时,按顺序执行了后面的case,直到碰到break或者末尾
3、C语言中,局部变量存在于栈中,常量存储于程序的只读存储区
4、除public外,其余在class外均不可访问,子类不能访问父类的私有变量,若想访问,可以调用父类中的公共成员函数
5、
- 构造函数不可以是虚函数;
- 析构函数不可以是纯虚函数;
- 构造函数中不应该调用纯虚函数
6、指针和引用的区别:
- 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;
- 而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作
7、多态性:同名函数对应多种不同的实现
(编译时)静态:函数重载,运算符重载,模板实现
(运行时)动态:虚函数实现
8、函数重载只跟参数类型和参数个数有关
运算符?不能重载,因为这个运算符对于类对象来说没有实际意义
运算符‘.’也不能重载,因为在类中对任何成员都有意义
9、若已定义的函数有返回值,则返回值存在寄存器中,没有地址,不能作为形参,但可以作为实参。
10、关于派生类,
- 从基类接受成员;
- 调整从基类接受的成员;
- 在声明派生类时增加成员,它体现了派生类对基类功能的扩充;
- 在声明派生类时,还要自己定义派生类的构造函数
11、“A”是字符串常量,'A’是字符常量
12、关系运算符的优先级大于逻辑运算符,例如:b=a>3&&0(a=5),得b=0
13、通常情况下,变量的值是存取与内存之中,若使用CPU的寄存器,将局部变量值直接放于寄存器中,其存取速度远远高于对内存的存取速度,所以使用CPU寄存器可以提高执行速率,比如使用register类型的变量
14、动态创建对象
- 对于class类型,必须用new/delete来创建,销毁。
malloc/free是无法胜任的。
new:动态创建一个对象: 申请一块内存 内部调用了构造函数
delete:释放这个对象: 调用了析构函数 释放内存
15、友元函数运算符
16、内联函数,一般用于加快程序执行速度,可能减小可执行文件大小,可能增加可执行文件大小
17、高级语言程序结构丰富,可读性好,可维护性强,可靠性高……,但是执行效率低
18、重写伴随着继承,但是私有成员函数在继承后不可见,所以不能被重写
19、
#include <stdio.h>
void fun ( int n ,int *s ) {
int f;
if(n==1)
*s = n+1
else {
fun( n-1, &f) ;
*s = f ;
}
}
main() {
int x =0;
fun( 4,&x );
printf("%d\n",x);
}
输出为2
共4次调用fun
fun(4,&x)-> fun(3,&f) ->fun(2, &f) ->fun(1, &f)
fun(1, &f)返回后,使得fun(2,&f)中的 f 变为2
依次向上递推,
fun(4, &x)中的 f 也为2
然后,*s = f = 2
x的值为2
20、
C语言的关系表达式:0<x<10完全等价于: (0<x) && (x<10)这句话是错的
(x>0)&&(x<10) 的值是 1 或 0 ,条件是 x>0 并且 x <10 。但是 0<x<10 这种写法的结果任何时候都是 1
由&&构成的逻辑表达式与由||构成的逻辑表达式都有"短路"现象
短路效应是指,二元逻辑运算符&& ||,左边真值一旦确定,不会执行右边表达式,如if(true || printf("不执行))