王卫明C++primer学习笔记

上传人:dao****ing 文档编号:74363608 上传时间:2022-04-13 格式:DOC 页数:6 大小:145KB
收藏 版权申诉 举报 下载
王卫明C++primer学习笔记_第1页
第1页 / 共6页
王卫明C++primer学习笔记_第2页
第2页 / 共6页
王卫明C++primer学习笔记_第3页
第3页 / 共6页
资源描述:

《王卫明C++primer学习笔记》由会员分享,可在线阅读,更多相关《王卫明C++primer学习笔记(6页珍藏版)》请在装配图网上搜索。

1、C+源代码风格1每行一条语句2每个函数的两个花括号各占一行3函数中的语句都对于花括号进行缩进4与函数名称相关的圆括号周围没有空白(空行将声明语句与程序的其他部分分开,或在变量前声明,C+的做法是尽可能在首次使用变量前声明)。第二章 开始学习C+变量名的约定:类型_名称 或者是 类型(int)名称(Akjl)C语言输入输出是printf,scanf,他们都包含在头文件stdio.h中操作符重载:通过重载,同意个操作符将有不同的含义。&操作符表示地址操作符又表示AND按位操作符,又如指针*Long|coutMain()/可以将两个关键字分开在两行写| /分开写a=b=c=0;/ C/C+中可以连续

2、赋值C+程序应当为程序中使用的每个函数提供原型,而库函数在头文件中有声明,而在库文件中有他的定义。标准C库中提供了140多个预定义函数,而main()函数不是关键字,由于它不是语法的组成头文件Stdlib.h中rand()函数不接受任何参数,并返回一个随机整数,其函数声明如下:int rand(void);第三章 数据处理3.1简单变量 内置C+类型有基本类型和复合类型Sizeof操作符能够打印类型或变量长度的单位字节数,如:sizeof(int);sizeof a;/a 为变量头文件climits包含了整型限制信息SCHAR_MAXSigned char最大值CHAR_BITChar的位数I

3、NG_MINInt最小值UCHAR_MAXUnsigned char最大值SCHAR_MINSigned char最小值SHRT_MAXShort最大值LONG_MAXLong最大值UNIT_MAXUnsigned int最大值CHAR_MAXChar的最大值SHRT_MINShort最小值LONG_MINLong最小值ULONG_MAXUnsigned long最大值CHAR_MINChar的最小值INT_MAXInt最大值USHRT_MAXUnsigned short最大值C+的变量的初始化有两种,第一种c语言的:int a=15;第二种是C+的:int a(15);如果不初始化那么变量的

4、值是以前留下的C99添加了两种类型:long long和unsigned long long 两种类型都至少是64位的Couthex;/告诉编译器以16进制的方式输出Coutbianliangoct;/输出完以后切换到8进制的方式输出Coutbianliangdec/输出完以后切换回10进制Cout1982uL;C+打印常量时候,常量后面加L或l表示1982被存为long型,若是uL或ul表示存为unsigned long型,若是u或U表示存为unsigned int,若无后缀表示存为int。char ch=a;Cout.put(ch);/成员变量put()可以打印char型变量,我们也可以写

5、成cout.put(n);c+转义序列符 (括号里的为ASCII符号)换行符(NL或LF)n退格(BS)b回车(CR)r反斜杠()单引号()水平制表符(HT)t垂直制表符(VT)v振铃(BEL)a问号(?)?双引号(“)”Coutendln”n”;/三种方式等效且都表示换行统统字符名:通用字符名以u或U开头,u后面在跟8个十六进制位,而U后面跟16个十六进制位,这些位表示的是ISO10646编码(ISO10646是一种正在制定中的国际标准,位大量的字符提供字符编码,他与Unicode合作,确保标准同步,Unicode可以表示96000多种符号和49个手写符号,而ASCII码就是Unicode的

6、一个子集)Cout”ni gu00E2teau.n”;打印如下ni gteau/的ISO10646编码是00E2特殊类型:wcha_t 宽字符类型 Bool类型,任何数字值或指针指都可以被隐式的转换为bool值。任何非零值都被转换为TRUE,零被转换为FALSE;反之 int aa=true;long bb=false;也成立!3.2 Const限定符:const long MONTHS=TRUE;/const限定符用于定义常量Const限定符定义常量时常量名一般全用大写,便于与变量区分;要直接初始化,否则将无法初始化3.3浮点数浮点数的书写有两种方式:常用的标注-942635;-1.54E-

7、4 5.6545e8 。浮点类型要添加头文件float.h,浮点型的类型有float(32位,其精度低,系统至少有6位有效数位或更低),double(64位,精度至少在13位有效位),long double(80,96,128位)。 浮点常量默认为double类型若希望常量位float,要用f或F后缀,对于long double类型。使用l或L(尽量用L,l像1) cout2.2L3.12f8.123;/8.123为double默认型C+标准在默认输出时会删除小数点后末尾的零,如将23.450000显示成23.45。cout.setf(ios_base:fixed,ios_base:flatf

8、ield);/可以覆盖默认设置,让打印末尾的0显示出来3.4 C+算术操作符求模操作符要求两个数必须为整数潜在的数值转换问题大浮点型小浮点型:精度降低可能超出目标类型的取值范围,结果是不确定的。浮点型整型:小数丢失,原先的值可能超出目标类型的取值范围,结果不确定。大整型小整形:容易超出范围,通常只复制右边字节强制类型转换:不会修改变量本身,而是创建一个新的指定类型的值。其格式有两种:(long) bianliang;/c语言强制类型转换的方式Long (bianliang);/c+风格,其想法是让强制转换类型就想是函数调用C+primer 第四章 复合类型复合类型:在C语言中叫派生类型,而C+

9、中类使用了“派生”这个词,所以叫复合类型主要内容:1如何创建和使用数组 2如何创建和使用C-风格字符串 3如何创建和使用string类字符串 4如何使用getline()和get()方法来读取字符串 5如何混合输入字符串和数字 6如何创建和使用结构 7如何创建和使用共享体 8如何创建和使用枚举 9如何创建和使用指针 10如何通过new和delete来管理动态内存 11如何创建动态数组 12如何创建动态结构 13自动存储、静态存储和动态存储影响最为深远的复合类型是类,它是我们正要学习的OOP堡垒。4.1数组(array)数组的三要素是:每个元素的类型,数组名,元素数数组的下标总是从0开始到(元素

10、数减1结束);如果下标超界,编译器不会报错,但可能破坏数据或代码也可能异常终止。所以必须确保有效下标!Long kk10=10,12,6856,12;/数组初始化,有逗号隔开,大括号里元素可以少于元素总数Long jj10; /数组的这种初始化只能用与定义数组的时候。Coutsizeof kk;/输出kk这个数组 的字节数他有40个字节Coutsizeof kk1;/输出kk这个数组的第二个元素的位元组数他有4个字节Jj=kk;/不能将以个数组的值赋给另一个数组Long kk15=0;/将没个元素都初始化为0的方法,为被定义的元素自动初始化为0!Long kk=0,523,54,3,4;/编译

11、器计算出 内的元素个数,这里为5个Long long_kk=sizeof kk/sizeof(short);/我们不知道数组的个数是多少 这样就知道了4.2 字符串 C+处理字符串的方式有两种1:来自C语言,常被称为C-风格字符串;另一种基于string类库定义两个char型数组:Char dog5=a,b,c,d,c;/定义 了一个char型数组,储存的不是一个字符串Char cat5=a,b,c,d,0;/储存的是一个字符串,到空字符结束!/在确定存储的字符串所需的最短数组时,别玩了将结尾的空字符计算在内另一种初始化字符串的方法:Char kk=”nihao!”;编译器会在字符串最后加上”

12、0”字符;字符串用双引号,字符单引号拼接字符串常量:下面的语句是等效的!Cout”我们可以将字符串分开”写,但双引号紧靠着,中间无符号”;/不建议采用这种方法Cout”我们也可以将字符串直接写在一对双引号内”;Cout”我们也可以将字符串分开写,”/这中方法是解决一行内字符串太多,分行写”并像这样放在两行里,第一行末尾没有分号”;Strlen()函数是标准函数库cString的函数 用来确定字符串的长度!Char kk15=”nihao!”;/strlen只计算可见字符,不把空字符计操作数在内Coutstrlen(kk)” ” sizeof(kk);/sizeof是确定数组的长度Kk3=0;

13、/当cout读到0时变停止Coutkk” ”kk5;/后面的字符忽略(未被清空),/0有截取字符的功能打印如下:6 15 nih !读取一行字符串的输入:istream中的类(如cin)提供面向行的类成员函数:getline()和get().Getline()将丢去换行符,而get()将换行符保留在输入序列中!Getline()有两个参数,第一个是数组名第二个是读取字符数-1(如若是20,最多度19个)在读取指定数目的字符或遇到换行符书停止读取。不保存换行符,最后用空字符代替Get()有几个变体!其中一个与getline相似他们接受参数相同,解释参数也相同。该函数并不是用空字符代替换行符,而是

14、插入,并将换行符保留在输入列中,这样get()将无法跨行,因为下个get()一开始就读到了换行符,并有把他保存在输入队伍中.Cin.get(kk,20);Cin.get();/Get()另一个变体cin.get()可读取一个字符,即使是换行符,这样就可以保留在Cin.get(mm,20); /输入列中 我们可以将两个类成员函数合并:cin.get(array,200).get();/第一个get()返回一个cin对象,该对象随后被用来调用第二个get()函数!同样:cin.get(array,200). cin.get(array,200);也是可以的等效于调用两次getline()。而cin

15、.get().get()则不行,以为第一个get()不返回对象. 混合输入字符串和数字:Int a; char kk100;Cina;/如果就这样将跳过下一行,有一个回车;取消回车的方法:(cina).get();/加括号Cin.getline(kk,100);/如果就这样,我们将无法输入字符串就跳到下一行,因为上一行有回车C+程序长使用指针(不是数组)来处理字符串4.3 string类简介Stringl类包含在头文件string里,且位于名称空间std中。String对象的方式与使用字符数组想用:可以使用C-风格字符串来初始化string对象;可以使用cin来将键盘输入存储到string对象

16、中;可以使用cout来显示string对象;可以用数组的表示法访问其中的字符理论上,char数组是存储一个字符串的存储单元,string类变量是一个表示字符串实体 String str1=”kjlsamdl”,str2,str3;/string对象我们可以看做是一个变量,可以连续定义str2=str1;/我们可以将以个String对象赋给另一个String对象str2+=str1;/我们可一将string对象相加,+=是将以个字符串附加到另一个String对象的末尾Str2+=“nikan”;/我们也可以将一个String对象的末尾加上一 个字符串 String类是C+新增的String库来处

17、理输入的字符串,c语言中的字符串可以使用头文件cstring提供的函数来完成 Char char120=”jjjj”,char220;/数组也可以连续定义,要注意不要超出数组的大小!Strcpy(char2,char1);/strcpy()能将char1中的字符串赋值到char2中, 不能超出数组的大小,会破坏数据;发生错误! Strcat(char2,”kkkk”) ;/strcat()函数能将字符串”kkkk”附加到char2字符串的末尾处coutchar2tchar2tstrlen(char1);/strlen()也是cstring提供的函数,能读取数组中字符串的大小打印结果:jjjjj

18、jkkkk4 String str=“123”;/如果没有初始化 ,str为0个字节,他能够随着输入字符串的大小自动调节Getline(cin,str),/string对象比istream晚很多时间所以cin.getline(str,200)不能用,这样只换str这个string对象名Int kk=Str.size();size()是string对象的方法,他能够读出str内的字符串个数(不带0空字符),这里为3个字符4.4 结构(struct)简介结构可以存储多种类型的数据。定义结构描述:1它描述并标记了能够存储在结构中的各种数据类型;2按描述创建变量每个列表项都是一条声明语句,每一个声明语

19、句都是一个结构成员Struct inflatable goose;/定义结构变量 这种风格是C语言中的Inflatanle vincent;/C+可以省略struct关键字Goose.price就相当于一个double类型的变量,可以像常规使用double变量那样来使用它们,访问类成员函数就是从访问结构成员这里衍生来的,结构也是C+OOP(类)堡垒的基石Struct inflatable/当然我们可以不加结构名称inflatable而建立以个结构变量kk,用kk来调用其结构的成员,但因为没有char name20;/结构名称,所以不能定义其他的结构变量,这样后续程序将不能使用该结构Float

20、aa;Double bb; kk= /我们可以在定义结构时直接定义结构变量,我们也可以直接对其初始化!“wangweiming”,/初始化结构变量之间必须用逗号!12.3,/要用逗号!C+不提倡使用外部变量,但提倡使用外部结构声明,还提倡外部声明符号常量6.8;/最后一个成员变量值后面不用加逗号,大括号的后面一定要加分号!Inflatable mm=“wangweiming”,12.3,6.8;/我们可以直接对结构变量进行初始化,成员间用逗号,末尾用分号Inflatable ll;ll=mm;/我们可以将结构赋给另一个同类型的结构结构数组:inflatable kk2= /结构数组是一个数组,

21、而不是一个变量,这样数组中的每个值都是一个结构变量“shuzu0”,0.5,13.546,/每个结构数组变量初始化在一行内,也可以分开,用扩起来,同时每部变量用逗号“shuzu1”,513.1,56.133;/结构数组变量之间也用逗号进行分隔,也可以放在一行内结构中的位字段4.5 共用体(union):是一种数据格式,它能够存储不同的数据类型,但只能同时存储其中的一种类型。结构能够同时存储各种类型,而共用体只能存储一种类型,因此共用体的长度为其最大成员的长度。公用体的用途之一是党数据项使用两种或更多种格式(但不会同时使用)时,可以节省空间Union mingchenglong long_aa;

22、bouble bouble_aa;bianliang;/语法与结构一样,但每次只调用一个成员,可直接定义变量CoutBianliang.long_aa;/输出成员变量的值匿名共用体:没有名称,其成员将成为位于相同地址处的变量。显然每次只有一个成员是当前的成员Struct inflatablechar name20;double hehe;unionlong long_aa;double double_aa;Inflatable jiegou_bianliang;coutjiegou_bianliang.long_aa;/匿名共用体成员被视为结构的成员,可直接调用4.6枚举类型(enum)提供了

23、另一种创建符号常量的方式,这种方式可以代替const。也可以定义新的类型Enum kka,b,c,d,e;/kk也称为枚举,a.b.c等也称为枚举量,第一个枚举量为0,往后依次类推Kk meijubianliang=k;/枚举变量只能等于枚举量,不能等于其他非kk枚举的枚举量 Meijubianliang=kk(12);/我们可以通过枚举来给枚举变量赋值,通过这种方法给枚举变量赋值的范围:上限:大于枚举量的最大值的最小的2的幂减一,如:上式中最大枚举量是4,那上限是23-1=7;下限:如果不小于零则下限是0;如果小于零,则为小于最小枚举量的最大2的幂加一,如最小为-6,则最小范围为-(23)+

24、1=-7选择用多少空间来存储枚举由编译器决定,对于范围小的枚举使用一个字节或更小的空间;Enum kk=a=0,b=0,c=100,d,f;/枚举量可以相同,当c=100,则d=101,f=1024.7指针和自由存储空间C+基本原理:面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段而不是编译阶段进行决策。指针用于存储值的地址,指针名表示的是地址。*操作符被称为间接值或解除引用操作符,如m表示的是一个地址,*m表示储存在该处的值操作符*两边的值是可选的。Int* p_kare=&kk;/被初始化的是指针本身,而不是他指向的值!c程序员使用这种格式:int *ptr;而C+使用这

25、种格式:int* ptr;在C+中,int*是一种复合类型,是指向int的指针。Int* p1,p2;/这样将创建一个指针p1和一个常规int变量p2。对于每一个指针变量名,都需要使用一个*。Int*a;*a=23;/未初始化的指针的危险!在定义指针时将指针初始化为宜个确定的、适合的地址。这是使用指针的金科玉律Int* pt=0xB8000000;/错误!C+不允许将一个整型付给指针,指针类型与整型是不一样的!Int* pt=(int*)0xB8000000;/我们可以通过强制类型转换将整型转换为适当的地址类型!为一个数据对像(可以是结构,也可以是基本类型)获得并指定分配内存的通用格式如下;T

26、ypeName pointer_name =new typeName;Int* ps=new int;/定义一块新的内存区域Int* pn=ps;/不要创建两个指针指向同意个内存块的指针,因为这将增加错误删除同一内存块两次的可能!等于释放两次!delete pn;/删除指针指向内存块而不是指针的值,释放ps的内存,但不会删除指针pn本身!可将其指向另一个新内存块Delete的使用一定要配对使用,否则将发生内存泄露,被分配的内存将无法再使用了,如果泄露严重,程序将由于不断寻找更多内存而终止不能释放已释放的内存块,否则结果将不确定,这意味着什么情况都可能发生不能释放声明变量所获取的内存,不过,对空

27、指针使用delete是安全的!在编译时给数组分配内存被称为静态联编,意味着数组是在编译时加到程序中的,这种叫做静态数组;可以在程序运行时选择数组的长度被称为动态联编,意味着数组是在程序运行时创建的,这种叫做动态数组。为数组分配内存的通用格式如下:type_name = new type_name num_elements;如:long* p_kk = new long 100;释放一个new数组要用delete zhizhenming;动态数组的使用Int* a = new int 2;a0=0;a1=1;/初始化!可以将他看成int a2数组来处理,a存储的地址为数组第一个值的地址!a+=1

28、;/此时a0=1;a-=1;/此时a0=0delete a;/将指针的值切换为数组的第一个值的地址,便于释放!4.8指针、数组和指针算术:指针和数组基本等价的原因在于指针算术和C+内部处理数组的方式规范一下:*p不是指向类型的指针,而是完全等同于一个类型的变量;p才是指针!将指针变量加一,就是增加的值等于指向的类型占用的字节数!如:long* a;a+;/a指针变量保存的地址加四*(pointname+j)=pointnamej或者arraynamej=*(arrayname+j)/数组表示法与指针表示法之间区别区别:可以修改指针值,而数组名是常量;sizeof操作符对数组得到的是数组长度,而

29、对指针得到的是指针的长度,即使指针指向的是一个数组!指针和字符串:数组和指针的特殊关系可以扩展到C-风格字符串!Char flower10=”nihao”;/常规定义一个char型数组来存储字符串Coutflower”haizaima?n”;/打印时并不是打印第一个字符的地址,而是打印从该地址起往后的字符串,知道遇到0/后面字符串打印,cout只知道第一个字符的地址,打印知道遇到0结束在cout和多数C+表达式中,char数组名、指向char的指针以及应用口号的字符串常量都被解释为字符串第一个字符的地址!Const char* pp=”niaho”;/ ”niaho”表示是其第一个字符的地址,

30、所以pp所保存的地址为字符串第一个字符的地址!/形式与char型数组一样,但char型数组的数组名可以重新定义数组的字符串,但是常量字符串不能被定义!Coutflowerendlint*(flower);/第一个打印的是字符数组中的字符串,第二个打印的是第一个字符的地址!Char型数组在初始化后从新定义时,初始化话的字符串将被清空而重新定义警告!在将字符串读入程序时,应使用已分配的内存地址,该地址可以是数组名也可以是new初始化过的指针。如果给cout提供一个指针,他将打印地址。但如果指针类型为char则cout将显示指向的字符串!如果要显示字符串的地址,则要用强制转换符转换成另一种指针类型,

31、对其进行转换cout(int*)pendl;用strcpy()可以将一个字符串数组复制给另一个字符串数组如:atrcpy(shuzu1,”zif”);/也以将字符串复制给数组但当数组的空间不足时,会超出数组内存,超出部分将覆盖数组后面的其他内存;这样讲会影响程序运行,因此我们用strncpy这个函数来复制如:strncpy(shuzu,”nai znlls”,5);/它将字符串的前五个字符付给了数组,但它不能添加空字符0所以要这样 shuzu5=0;/我们要添加一条语句,确保字符数组的最后为空字符,要不然他存储的不是字符串了使用new创建动态结构:在运行时创建数组优于在于编译时创建数组,对于结

32、构也是如此。Struct inflatable char name20;float volume ;double price;;/创建结构模板 ,定义其中的结构成员!Inflatable *ps = new inflotable;/定义一个指针指向在堆中创建的结构;ps表示指向结构的指针,*ps是表示结构变量Cin.get(*ps).name,20);/由于我们创建的结构变量没有名称,而只有指向他的指针,所以可以用*ps表示结构名称!Coutname来访问结构成员!记住:结构变量名来访问成员时用句点符(.),当用指向结构变量名的指针来访问成员时要用-操作符第五章 循环和关系表达式第五章的主要内

33、容:for循环 表达式和语句 递增和递减操作符:+和- 组合赋值操作符 复合语句(语句块) 都好操作富 关系操作符 while循环 typedef工具 get()字符输入方法 文件尾条件 嵌套循环和二维数组For循环:其中的判断表达式都能转换成bool型,如判断表达式为I,若i=1为真,若i=0为假,而所有的表达式也都可以转化成bool类型的true或者false类型;C+表达式都是值与操作符的组合,每个C+表达式都有值!Maid=(cooks=4)+3;/在c+中可以这样做,但是不提倡这样做,这样只是为了让x=y=z=0;这样的语句存在Long a=100;cout1;/a1这个表达式为真成数值1,他将显示一个数字1!要成为表达式就必须能确定其值!cout.setf(ios.base:boolalpha);/将输出结果转化成bool类型,同时用true和false表示,而不是1和0coutaword;int kk=word.size();C+/表示先使用当前的,使用完后就加一。+C/表示先加一后,在使用其值! - 6 -

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!