C++ Primer Plus》学习笔记1
第二章、开始学习C++
1、控制符endl
如果显示字符串时,在字符串中包含换行符,而不是在末尾加上endl,这样可以大大减少输入量;如果是要生成一个空行,我们认为endl比较方便。
2、在C和C++中,不能把空格、制表符、回车放在元素中间,也不能把回车符放入字符串中间;但是可以把空格放入字符串中间。
3、为什么int main()主函数中需要一个返回值0呢?因为可以将计算机的炒作系统看作调用程序,main()返回值并不是返回程序的其他部分,而是返回给操作系统。
4、C++语句包含声明语句、赋值语句、消息语句、函数调用、函数原型、返回语句。
================================================================================
第三章、处理数据
1、变量名命名规则
在名称中只能使用字母字符、数字、下划线(_);名称的第一个字符不能是数字;区分大小写字符;不能将C++关键字作为名称;变量命名方案和函数命名方案是一样的,有时候通常在名字的前面加上一个简单的字母前缀来描述变量的类型,例如str或sz表示以空字符结束的字符串、b表示布尔值、p表示指针、和c表示单个字符。
2、有时候可以使用无符号类型来增大变量能够储存的最大值。unsigned,如果是整型也可以直接写成unsigned int 等价于 unsigned
3、C++如何确定常量的类型呢?
如果没有特别的说明,我们都默认为整型常量储存为int类型,有时候会带后缀区分开来整数后面的l和L后缀表示该整数为long常量,u和U后缀表示为unsigned int 常量,ul表示unsigned long,小写大写都可以。
4、C++中对字符用单引号,对字符串用双引号
5、强制类型转换
(typeName)value 来自于C语言
typeName (value) 这个是来自于C++,新格式的想法是要让强制类型转换就像是函数调用
===============================================================================
第四章、复合类型
1、数组
typeName arrayName[arraySize]注意arraySize可以是整型常数或者const的值,也可以是常量表达式,但是不能是变量哦。
2、数组初始化原则
1)只有定义数组时才能使用初始化,hand[4] = {5, 6, 7, 9}; fals
2)不能将一个数组赋给另外一个数组 hand = cards; false
3)如果只对数组一部分初始化,则编译器将把其他元素设置为0
4)将数组所有元素初始化为0很简单,只需要将第一个元素初始化为0;例如long totals[500] = {0};注意:如果要将所有元素初始化为1呢?我们不能初始化为{1},否则就只有第一个元素为1,其他为0了。
3、区分下字符串的双引号和字符的单引号
char shirt_size = ‘S‘;
char shirt_size = "S";
4、几种输入的方法:(重点)
1)字符串的输入:cin cin使用空白(空格、制表符、换行符)来定字符串的界。
2)每次读取一行的字符串的输入:
面向行输入:getline()通过回车键输入的换行符来确定输入结尾,要调用这种方法。
要调用这种方法,使用cin.getline(name, N),注意这个函数最多能读取N-1个字符。
面向行输入: get() cin.getline(name,N)
注意:连续两次调用get()
cin.get(name,ArSize);
cin.get(dessert, Arsize);
这个是不对的,因为第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符时换行符,如果不借助帮助,get()不能跨过该换行符。
正常处理方法:
cin.get(name, N);
cin.get();
cin.get(name1, N);
总之,getline()使用起来简单些,但是get()使用检查错误更简单些。
5、C++程序常使用指针而不是数组来处理字符串
strcpy(charr1, charr2)复制
strcpy(charr1, charr2)附加在字符串的末尾
6、两种确定字符串字符数的方法
int len1 = str1.size(); int len2 = strlen(charr1);
7、结构
struct inflatable
{
char name[20];
float volume;
double price;
}; inflatble标签成为了新类型的名称
8、共用体是一种数据格式,它能够储存不同的数据类型,但是只能同时存储其中的一种类型。也就说,结构可以同时存储int、long和double,共用体只能存储int、long或double
9、枚举
enum spectrum{red, orange, yellow, green, blue, violet, indigo, ultraviolet}
首先让spectrum变成新类型的名称,枚举
将括号里面的变成了符号常量,对应整数值0~n,这些常量叫做枚举量
10、声明初始化指针
int *ptr 传统上这么写
int* ptr 现在这么写
新的写法要注意,对于每个指针变量名,都需要使用一个*
int* p1,p2;创建一个指针p1和一个常规int变量p2
11、new的用法
1)在C++创建指针时,计算机将分配用来存储地址的内存,但不会分配来存储指针所指向的数据的内存。C语言中,可以使用库函数malloc()分配内存;在C++中仍然可以这样做,但还有更好的方法——new操作符。
int* ps = new int;
……
delete ps;//释放内存,但不会删除指针ps本身,所以我们要配对使用这个,否则会出现内存泄露。2)使用new创建动态数组
int* psome = new int [10];// new返回第一个元素的地址
delete [] psome; //注意要加上方括号,释放一个数组
3)使用new和delete需要注意的规则
①不要使用delete来释放不是new分配的内存;
②不要使用delete来释放通一个内存块两次;
③如果使用new[]为数组分配内存,则使用delete[]来释放;
12、指针变量增加1后,其增加的值等于指向的类型占用的字节数,也就是说如果pw指向double类型,因此对pw增加1时,其值增加8个字节,如果是short,其值增加2个字节.
13、在cout和多数的C++表达式中,char数组名指向char的指针以及用引号括起来的字符串常量都被解释为字符串第一个字符的地址。
14、要获得字符串的副本,例如我们现在需要将animal赋给ps
1)分配空间 ps = new char[strlen(animal) + 1];
2)复制 strcpy(ps, animal);
strncpy与strcpy区别在于接收第三个参数,要复制的最大字符数。
15、使用new创建动态结构
inflatable *ps = new inflatable;
什么时候使用句点操作符,什么时候使用箭头操作符?
规则非常简单,如果结构标识符是结构名,则使用句点操作符,如果是指向结构的指针,那么应该是用箭头操作符。ps为指向结构的指针,所以ps->name;
ps就是被指向的值,结构本身,
(ps).volume
==============================================================================
完结于 2014.7.15 0:40