C++ Primer Plus读书笔记01
2012-02-13
new分配到堆上,栈上分自动变量(就是局部变量)
new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数
2012-02-19
1 sizeof 返回类型或者变量的长度,依赖于不同环境、编译器
对类型用sizeof,应该加括号,如sizeof(int)
对变量名,可以省略,如sizeof nMyAge;
2#include<limits>包含INT_MAX,CHAR_BIT等定义
3默认cout以十进制输出
int waist=0x42;//16进制
int inseam=042; //8进制
cout<<waist<<inseam; 则输出66,34
但可通过cout<<dec;
cout<<hex;
cout<<oct;将输出改为10、16、8进制
如int waist=42;
cout<<hex;//更改为16进制
cout<<waist;则输出2a
4 const int a=12;取代#define a 12;
5float只表示数字前6、7位精度,所以修改其他位数不影响精度
float a=2.34E+22f;
float b=a+1.0f;
cout<<a-b; //输出0
6 cout.setf(ios_base::fixed,ios_base::floatfield);//加于程序头部
作用:防止将太大数切换为科学计数,保证显示到小数点后6位
7 int thorn;
long test=(long)thorn;//强制转换不修改thorn本身,而是创建一个新的指定类型的值
也可以用static_cast<long>(thorn);
int auks=19.99+11.99;
cout<<auks; //输出31不是30
2012-02-21
1、 任何两个由空白分割的字符串常量都将自动拼接成1个
例:cout<<”hello””world”<<endl==cout<<”helloworld”<<endl;
2、 sizeof计算整个数组长度,strlen计算数组中字符串的长度,且不包括’\0’;
string.size()也只计算字符串长度,不包括’\0’,且未被初始化的string.size()==0
可通过人为在char数组中添加’\0’来更改终止位。比如name[3]=’\0’
3、char arr[20]; cin.getline(arr,20); getline()每次读取一行,通过换行符来确定行尾,但不保存换行符,用空字符替代换行符。 get()也是每次读取一行,但会将换行符保存在队列中,上条语句等价于cin.get(arr,20); cin.get()//读取回车
两种方法均返回string类型,所以可以用cin,get(arr,20).get()来取代上两句
同理,可用cin.getline(arr1,20).getline(arr2,20) 一次读取两个数组。
另外,如果之前进行过输入操作(如输入年龄),则换行符会停留在缓冲区,用cin.get()消除,否则直接进行cin.getline()会出错
4 strcpy(charr1,charr2) //copy charr2 to charr1
strcat(charr1,charr2) //append contents of charr2 to charr1