C++学习笔记(1)
本学习笔记是C++ primer plus(第六版)学习笔记。复习C++基础知识的可以瞄瞄。
转载请注明出处http://www.cnblogs.com/zrtqsk/p/3874148.html,谢谢!如下。
第一章
1、预处理器——#include<iostream>将iostream文件内容添加到程序中。老式C头文件保留了扩展名.h,而C++头文件没有扩展名。
(有些C头文件被转换为C++头文件,去掉扩展名,并在前面加c,如cmath)
2、名称空间——相当于Java中的package,using编译指令相当于Java中的import。头文件没有.h前缀时,类、函数和变量是C++编译器的标准组件,被放置在名称空间std中。
3、类的本质——类是用户定义的一种数据类型。类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。
4、main()——main()的返回值(退出值)是返回给操作系统。通常退出值为0意味着程序运行成功。
第二章
5、OOP——面向对象编程的本质是设计并扩展自己的数据类型,让类型和数据匹配。
6、标识符——以一个下划线开头的名称被保留给实现,作全局标识符;以两个下划线或下划线加大写字母的名称被保留给实现(编译器及其使用的资源)使用。
(C++对名称长度没有限制)
7、整型——short至少16位;int至少和short一样;long至少32位,且至少和int一样长;long long至少64位,且至少和long一样长。
8、字节——字节通常指8位的内存单元,而C++中的字节依赖于实现。
9、运算符——运算符是内置的语言元素。sizeof运算符返回类型或变量的长度(字节)。所以,不同系统中sizeof( int )的返回值可能不同。
10、头文件climits——定义了各种表示类型限制的符号常量。如:#define INT_MAX 32767。(被设计为C可用的头文件,符号常量必须用#define编译指令定义)
11、变量初始化——
函数内部定义的变量,应该在定义的时候进行初始化,否则它的值是不确定的,为被创建前相应的内存单元保存的值。
(1)、int a = 1; // 传统的C初始化
(2)、int b(2); // C++的新方式
(3)、int c = {3} 或 int c{3} // C++的大括号初始化器用于任何类型(大括号内不包含任何东西时,变量的初始化为0)
12、int——计算机处理起来效率最高的长度。除非使用后缀或值太大,C++通常将整形常量存储为int类型。
13、wcha_t——是整形类型,有足够的空间表示系统使用的最大扩展字符集。使用 iostream 中的 wcin 和 wcout 处理wcha_t流。
可以通过前缀L来指示宽字符常量和宽字符串,如 wcha_t a = L'p'; wcout << L"tall" << endl;
(C++11新增类型 char16_t 和 char32_t ,都是无符号的,分别长16位和32位,使用前缀 u 表示前者,前缀 U 表示后者)
14、bool——C++将0解释为 false ,将非零解释为 true 。
15、const——创建常量时最好马上赋值,如cont int a = 5;常量通常将首字母大写。
16、浮点——float至少32位;double至少48位,且不少于float;long double 至少和double一样多。这三种类型的指数范围至少是-37-37。
(1)、cout.setf()可以控制输出格式,迫使cout使用定点表示法。因为cout通常会删除浮点后面的0,如3.3300000显示为3.33。
(2)、浮点常量通常为double类型,通常用后缀f或F指定float类型,用后缀l或L指定long double类型。
17、强制类型转换——
如:(long) thorn 或 long(thorn)
强制类型转换不会修改thorn本身,而是创建一个新的、指定类型的值。
也可以这样: static_cast<long> (thorn) ,它比传统的强制类型转换更为严格。
18、auto——自动推断类型,关键字auto可以不指定变量的类型,编译器自动把变量的类型设置成与初始值相同,如 auto a = 100;
不过,auto一般是用于处理复杂类型
第四章
19、数组——
(1)、声明数组的通用格式: typeName arrayName[arraySize] ,如 int a[5];
(编译器不会检查使用的下标是否有效。)
(2)、如果没有初始化函数中定义的数组,其元素的值为以前驻留在该内存中的值。(与函数中的变量一样)
(3)、sizeof 作用与数组名时,得到的是整个数组中的字节数。作用于元素时,得到的是该元素的字节数。
(4)、只有定义数组时才能初始化,之后就不行了。可以部分初始化,如:int a[5] = {1,2},部分初始化时,编译器把其他元素设置为0。
可以这样: int b[] = {1,2,3,4,5}; 让编译器计算元素个数。
(5)、使用列表初始化数组时,可以省略等号(=);大括号内不包含任何内容时,默认所有元素为0;列表初始化禁止缩窄转换。
20、字符串——
字符串是存储在内存的连续字节中的一系列字符。
(1)、C-风格的字符串以空字符结尾,其ASCII码为0,如: char dog[7] = {'a','b','c','d','e','f','\0'}; 注意,数组长度必须计算‘\0’
(2)、字符串常量,如: char cat[] = "cat";
(注意!'S'代表字符常量,而"S"表示‘S’和‘\0’两个字符组成的字符串,“S”实际表示的是字符串所在的内存地址)
(3)、拼接字符串时,第一个字符串最后的‘\0’会被第二个字符串的第一个字符取代。
(4)、strlen()函数返回存储在数组中的字符串的长度,只包括可见的字符,不包括空字符。
(5)、cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,所以它读取数组输入时,只读取第一个单词,并自动添加空字符。
(6)、面向行的输入有getline()和get(),它们都通过换行符来确定输入结尾,不同的是,get()并不再读取并丢弃换行符。
cin.getline(name,ArSize),将读取ArSize-1个字符到name数组中。对于get(),可以这样使用: cin.get(name,ArSize).get();
(7)、读取空行时,get()将设置失效位;如果输入行包含的字符数比指定的多,getline()会设置失效位。后面的输入将被阻断。
(8)、允许:char c[] = {"hello world!"};
(9)、string类具有自动调整大小的功能,因此更为安全。
(10)、strcpy(str1,str2)将str2复制给str1, strcat(str1,str2)将str2附加到str1的结尾。
(11)、str1.size()和strlen(str1)的功能相同。前者是string类的一个方法,后者是一个常规函数。
21、原始(raw)字符串——原始字符串中,\n不表示换行符,如: 默认定界符 ( 和 ) cout << R"(don't use "\n" ,OK?)" << '\n'; 输出:don't use "\n" ,OK?
自定义定界符 +*( 和 )+* cout << R"+*("(don't use "\n" ,OK?)")+*" << '\n'; 输出:"(don't use "\n" ,OK)"
22、结构——
(1)、定义: struct man { char name[20]; double weight; int age; };
(2)、声明,允许省略关键字struct,如: man mike;
(3)、初始化: man mike {"mike", 56.2, 22};
(4)、使用成员运算符(.)来访问各个成员。
(5)、同时定义结构和创建变量: struct man { char name[20]; double weight; int age; } mike = {"mike", 56.2, 22}, jim ;
(6)、还可以声明匿名结构: struct { int x, int y } point ;
23、结构中的位字段——指定占用特定位数的结构成员,如: struct my_bit { unsigned int x : 4; bool y : 1; };
24、外部声明——函数外部的声明。C++不提倡使用外部变量,提倡使用外部声明。
25、共用体——
一种数据格式,能够存储不同的数据类型,但只能同时存储其中的一种类型,常用于节省内存。如: union id { long long_id ; char char_id; };
(1)、由于共用体每次只能存储一个值,其长度为最大成员的长度。
(2)、匿名共用体没有名称,其成员将成为位于相同地址处的变量,每次只有一个成员是当前成员。
26、枚举——
另一种创建符号常量的方式,可以代替const。如: enum spectrum { a , b , c , d , f };
(1)、默认情况下,a、b、c、d 、f 作为符号常量,对应0到4。
(2)、对于枚举,只定义了赋值运算符,并没有定义算术运算。
(3)、只能将定义枚举时使用的枚举量赋给枚举变量。
(4)、可以使用赋值运算符显式设置枚举量的值。如: enum bits { first , zero = 0 , two = 200 ,three , four }; //这里three的值为201, first 的值为0
(5)、枚举的取值范围。bits的最大值是202,大于它的最小的2的幂为256,所以bits的取值范围为0—255
(6)、通过强制类型转换,增加了可赋值给枚举变量的合法值,只要在取值范围内。如: bits b = bits(240);
27、指针——
指针是一个变量,存储的是值的地址,而不是值本身。
(1)、地址运算符(&)可以获得变量的位置(存储地址)。
(2)、指针,将地址看作指定的量,将值看作派生量。指针名表示地址。
(3)、*运算符被称为间接值(解除引用)运算符。用于指针可以得到指针地址存储的值。
(4)、声明: int * a; // *运算符两边的空格是可选的 int * b , c; // 创建指针b和int变量c,每一个指针都需要一个*
(5)、初始化: int * a = &b; // 将指针a的值设为&b
(6)、一定要在对指针使用解除引用运算符(*)之前,将指针初始化为一个确定的、适当的地址。
(7)、将数字赋值给地址: int * pt = (int * ) 0x8000000;
(8)、分配内存: int *pn = new int; //从堆(heap)或只有存储区(free store)的内存区域分配内存。
28、数组——
(1)、编译时给数组分配内存被称为静态联编,程序运行时选择数组长度被称为动态联编。
(2)、创建动态数组: int * p = new int [10]; // p为该元素第一个元素的地址
(3)、释放数组: delete [] p; // 只能释放new分配的内存; 不能delete两次; 对空指针delete安全; 数组用delete [] 释放。
(4)、不能使用sizeof运算符来确定动态分配的数组包含的字节数。
(5)、使用数组: p[0]为第一个元素,p[1]是第二个。 // C++内部使用指针来处理数组,p[1]被看作 *(p+1)
(6)、p = p + 1; // 指针变量加1后,增加的量为它指向的类型的字节数。
(7)、多数情况下C++将数组名解释为数组第一个元素的地址。
(8)、指针和数组名的区别: 可以修改指针的值,而数组名是常量; 对数组名使用sizeof得到数组的字节数,而对指针使用sizeof得到指针的长度。
(9)、short tell[10]; cout << tell; // 数组名本身为其第一个元素的地址,如:&tell[0] ,即一个2字节内存块的地址。
cout << &tell; // 输出的是一个20字节内存块的地址。
(10)、给cout提供一个字符的地址,它将从该字符开始打印,直到遇到空字符为止。
(11)、要打印一个指针的地址,必须把这个指针强转成另一种指针类型,如 (int *) p;
29、使用new创建动态结构——struct1 * s = new struct1; // 此时,结构标识符是指针,所以不能使用成员运算符句点(.),
// 只能使用箭头成员运算符(->)访问成员或者使用(*s).price 来访问成员。
30、自动存储、静态存储和动态存储——
(1)、函数内部定义的常规变量为自动变量,存储在栈中,后进先出(LIFO),程序执行中,不断增大缩小。为自动存储。
(2)、在函数外面定义,或声明变量使用static关键字的变量为静态变量。静态存储是整个程序执行期都存在的变量。
(3)、使用new创建的变量为动态存储。new和delete管理类一个内存池,被称为free store 或 heap。
(注意!栈中自动添加和删除机制使得占用的内存总是连续的,而new和delete可能导致只有存储区不连续)
31、模板类vector——类似string,也是一种动态数组,是使用new创建动态数组的替代品,自动使用new和delete管理内存。
#include<vector> using namespace std; // 包含头文件,vector位于std名称空间中
vector<int> ele(10); // 创建一个名为ele的vector对象,可存储10个类型为int的元素。
(注意,C++11中可用列表初始化。类型可以是变量)
32、模板类array——与数组一样,长度固定,使用栈存储,效率与数组相同,而更方便、安全。
#include <array> using namespace std; array<int,5> arr; // 名为 arr 的array对象,包含5个int元素。
(注意,类型不能是变量!可用列表初始化)
C++学习笔记(1)的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- LZW压缩算法——简明原理与实现
LZW和哈夫曼编码一样,是无损压缩中的一种.该算法通过建立字典,实现字符重用与编码,适用于source中重复率很高的文本压缩.本文首先讲下LZW的编解码原理,然后给出LZW的实现code. ***** ...
- 今天写项目时,突然发现canvas的一些公式不记得了,所以整理了一番,分享给大家。
Canvas 标签<canvas></canvas> 默认宽300,高150,不用用Css设置宽高 获取方法var ctx = cas.getcontext("2d& ...
- 使用HBaseShellPro操作Hadoop 2系列发行版CDH4.4
前言 对于hadoop,hbase由于项目紧张原因好几个月没有时间认真的来总结下了,最近有一些空,就来继续的把项目中用到的一些技术实际的写出来,动动手,好久没有写东西了,都生疏了,说起hadoop,公 ...
- 【单页应用】view与model相关梳理
前情回顾 根据之前的学习,我们形成了一个view与一个messageCenterview这块来说又内建了一套mvc的东西,我们这里来理一下首先View一层由三部分组成:① view② dataAdpt ...
- C语言中把数字转换为字符串 【转】
在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出 ...
- 显示快照监控:/SDF/MON
透过SE38运行程序/SDF/MON,可以显示屏幕的监控快照:
- LINUX下C-C++类软件的诊断
一般C/C++写程序由于内存.指针等问题在后期的过程都一般会遇到内存等资源泄露.崩溃等问题,对于这些问题,一般从哪个角度解决呢? 下面从几个角度进行总结: 内存泄露 首先需要注意一个问题是top或者h ...
- app:clean classes Exception
Error:Execution failed for task ':app:clean'.> Unable to delete directory: C:\Users\LiuZhen\Deskt ...
- Objective-C 快速入门--基础(五)
1.什么是属性?属性会帮我们做哪些事情?请详细说明. (1)①属性是Objective-C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现:②能在一定程度上简化程序代码,并 ...
- Intent属性详解三 data、type和extra
1 Data 执行时要操作的数据 在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则: android:scheme 匹配url中的前缀,除了“http”.“ht ...