数据类型,常量与变量部分:(发现有些点竟然这么多年第一次发现)
C++基本数据类型有哪些:
答:整型,浮点型,void型。
注:其他各种数据类型均是这三种类型的扩充,另外void类型在实际程序中经常用来表示指针无类型,指向整块内存,程序可以自行根据需要进行解析。
2. 整型的分类及区别:
答:表示整数,字符,布尔值的数据类型统称整形。根据长短修饰词和符号修饰词不同可分为13类。长短修饰符:short 半个机器字长,int 一个机器字长,long 两个机器字长。符号修饰符: signed 带符号的,unsigned 无符号的,区别在表示范围上。char, unsigned char, signed char, int, unsigned int, signed int, short int, unsigned short int, signed short int, long int, unsigned long int, signed long int, bool.
注:具体记每种数据类型占几个字节意义不大,因为这是由平台决定的,记机器字长是个明智选择。
3. 简单介绍一下C++中的常量:
答:constant常量是用来标示,测量和比较的在程序运行前确定,运行过程中不会改变的值。可分为:
整形常量:注意整形常量可以指定进制,常量前如有0x,则为十六进制,如有0则为八进制。同时可以有后缀符号,不区分大小写,L代表长整形,U代表无符号。
浮点型常量:注意浮点型只有十进制,默认为double,绝对值小于1时小数点前的0可以省略,float表示范围在+-e38,double在+-e308,后缀同样不区分大小写,F代表有符号,L代表长双精度。
字符型常量:可用ASCII表示一个字符,也可用单引号加反斜杠表示转义字符,如'\x2f'表示十六进制的2f。
字符串常量:用双引号括起来的字符。
转义字符常量:\n换行 \r回车 \0空格
地址常量
注:比如QREP的版本信息,不同版本的版本号就是写死的。
4. 常量与变量的区别:
答:常量在定义时必须初始化,且值不可改变,常量不可寻址,它的地址不允许赋给非常量指针,变量可以寻址。常量编译执行效率较高。
5. 操作符有哪些:
答: 操作符又称运算符,按操作数分为一元运算符,二元运算符和三元操作符。 按功能不同,分为算术操作符,关系操作符,逻辑操作符,位操作符,赋值操作符,自增减操作符,箭头操作符,条件操作符,sizeof操作符,逗号操作符。
注:逗号表达式的值为最后一个表达式的值和类型。但在求值时,按从左到右的顺序分别计算个表达式的值。
6. 操作符的优先级:
答: 共16个等级,总体而言,单目高于多目,算术高于逻辑。三个从右至左结合的,单目运算符,条件运算符和赋值运算符。
7. 指针的自增减操作有何不同:
答: 指针的自增减,指的是指向的地址的增减。比如char *p=&str[0]; ++p 是将指针指向str[1], ++*p是将str[0]中的数据加1,比如说原来为c,加完变成d。
8. 变量有哪几种初始化方式?
答: 两种,赋值初始化和直接初始化。直接初始化效率更高。
9. 声明和定义的区别?
答: 声明主要表明名称和类型,定义具体分配了空间。函数的声明和实现比较常见,变量的声明多见于重复定义或者全局变量。
10. C++中的作用域?
答: 作用域分为全局作用域,局部作用域和语句作用域。作用域是可以嵌套的,
11. 变量的存储类型有哪些?
答: 变量的存储类型决定了其生命周期,存储类型的说明符有4个, auto,register,static和extern。
auto和register称为自动存储类型,auto是默认的,生命周期始于块的执行,结束于块的结束。在栈中,执行结束自动释放,生命期和作用域一致。寄存器变量不建议使用,因为编译器大多会进行优化。
static静态存储类型,存储于全局数据区,如未显示初始化,系统会自动赋值0,且初始化只进行一次,具有全局生命周期,根据定义位置不同,分为局部静态变量和全局静态变量,也称内部静态变量和外部静态变量。
extern外部存储变量,程序中的全局变量和函数默认是外部的,其他程序可以通过extern声明来使用它们。
12. 程序的存储区域有哪些,各自特点如何?
答: 程序的存储区域包括代码区,静态数据区,栈区和堆区,相应的生命周期分为静态生命期,局部生命期和动态生命期。
静态数据区的数据具有静态生命期,全局变量,静态全局变量和静态局部变量都存在于静态数据区。系统会自动为其初始化,函数驻留在代码区,同样具有静态生命期。
栈区的数据具有局部生命期,如果未初始化,数值是随机的,有一点要注意,静态局部变量,具有局部作用域,但具有静态生命周期。
堆具有动态生命期,主要通过new和delete来处理内存,同时也说法认为单提出来有一个*存储区,由malloc和free操作。
注:这部分涉及内存,贴个地址:http://wenku.baidu.com/view/1ecb5321482fb4daa58d4b91.html
13. 什么是引用?
答: 引用是对象的另一个名字,通过&符号来定义,如int i=0; int &ref=i; 用引用有两个目的:第一是为了提高性能,使用引用不会造成对象的拷贝,这里的"自定义类 &"就是这个目的,但是如果不想函数修改这个参数,最好在前面加上const。第二是为了能够修改对象。这里的"istream &"就是这个目的,作为参数,如果不传入引用,那么这个stream就是形参,函数里修改这个参数不会造成函数外变量的改变,显然是不行的。但是要注意const引用的原对象也要是const的。
语法部分:
14. while,do while:容易忘记,do while后面要有个分号。
15. 在switch语句中,只能在最后一个case或者default后定义变量。
16. 递归分为边界条件,递归前进段和递归返回段三部分。当边界条件不满足时递归前进,满足时递归返回。
17. 汉诺塔问题:可以用递归和非递归的方式解决,注意三根柱子并没有使用顺序的限制,非递归可以用栈来模拟解决过程,关键就是把大于1的盘子数量分解为1的解决步骤。
输入输出部分:
18. 注意C++本身并不提供输入输出操作,是由标准库提供的。
19. 几种IO的分类:
标准I/O:对标准输入输出设备的操作
文件I/O:对外存磁盘上文件的输入输出
串I/O:对内存中字符串存储空间的输入输出
20. 各种I/O类:基类 ios
直接派生出的四个大类:输入流istream,输出流ostream,文件流fstreambase和字符串流strstreambase。
输入文件流类ifstream,输出文件流类ofstream
输入字符串流类istrstream,输出字符串流类ostrstream
功能更集中的:输入输出流类iostream,输入输出文件流类fstream,输入输出字符串流类strstream。
iostream标准类库,用这个就足够了。
21. 重载输入输出的目的和方法:
答:重载在相同的范围内为同一个函数名提供多个定义,委托编译器调用时进行选择,提供更为简洁的代码。
ostream& operator<< (ostream &out, const classname &object){ out<<...;return out;}
输入流将ostream换为istream即可。
22. 如何读取一个文件:
答:#include <fstream> fstream openfile(filepath); openfile.eof(); openfile.fail(); openfile.close(); 使用cin,get或者getline读取字符。写入的时候可以用ofstream,.open, .close. .clear. <<操作符可以用来写。