《C++ Primer Plus》学习笔记1

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

《C++ Primer Plus》学习笔记1,布布扣,bubuko.com

时间: 2024-11-05 10:04:34

《C++ Primer Plus》学习笔记1的相关文章

C专家编程学习 1

1.C语言的基本数据类型直接与底层硬件相对应. 2#define 是可能出现问题 1 2 3 4 5 #define a(y) a_ex(y) a(x)被扩展为 a_ex(x) #define a (y) a_ex(y) a(x)被扩展为 (y) a_ex(y)(x) #define宏的用法 1.简单宏定义 1 #define a y 将文件中的 a 全部换成 y 为了避免出现问题,要将宏展开,根据运算符的优先级判断是否是需要的运算顺序. 2.带参数的宏定义 1 2 #define a(y) a

Java并发编程学习笔记

Java编程思想,并发编程学习笔记. 一.基本的线程机制 1.定义任务:Runnable接口 线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供.要想定义任务,只需实现Runnable接口并编写run方法,使得该任务可以执行你的命令.   class MyTask implements Runnable {    private String mName;     public MyTask(String name) {    mName = name;   }  

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

linux网络编程学习笔记之二 -----错误异常处理和各种碎碎(更新中)

errno 在unix系统中对大部分系统调用非正常返回时,通常返回值为-1,并设置全局变量errno(errno.h),如socket(), bind(), accept(), listen().erron存放一个正整数来保存上次出错的错误值. 对线程而言,每个线程都有专用的errno变量,不必考虑同步问题. strerror converts to English (Note: use strerror_r for thread safety) perror is simplified str

JAVA GUI编程学习笔记目录

1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之GUI编程窗体事件 6.JAVA之GUI编程Action事件 7.JAVA之GUI编程鼠标事件 8.JAVA之GUI编程键盘码查询器 9.JAVA之GUI编程列出指定目录内容 10.JAVA之GUI编程弹出对话框Dialog 11.JAVA之GUI编程菜单 12.JAVA之GUI编程打开与保存文件 13.JAVA之GUI编程将程序打包jar JA

黑马程序员_JAVA UDP网络编程学习笔记

一.UDP网络编程概述 采用TCP协议通信时,客户端的Socket必须先与服务器建立连接,连接建立成功后,服务器端也会持有客户端连接的Socket,客户端的Socket与服务器端的Socket是对应的,它们构成了两个端点之间的虚拟通信链路.与TCP通信不同,UDP是面向无连接的.不可靠的基于数据包的传输协议.即应用进程(或程序)在使用UDP协议之前,不必先建立连接.自然,发送数据结束时也没有连接需要释放.因此,减少了开销和发送数据之前的延时.UDP也采用端口来区分进程. 在java中,java.

Java并发编程学习笔记(一)线程安全性 1

什么是线程安全性: 要编写线程安全的代码,其核心在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问."共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值在其生命周期内可以发生变化. 一个对象是否需要线程安全的,取决于他是否被多个线程访问.这指的是在程序中访问对象的方式,而不是对象要实现的功能.要使得对象时线程安全的,需要采用同步机制来协同对对象可变状态的访问.如果无法实现协同,那么可能导致数据破坏以及其他不该出现的结果. 如果当多个线程访

FFmpeg编程学习笔记一

FFmpeg编程学习笔记一 1.为了学习ffmpeg编程需要单步调试,参照网上的教程用VS2013编译一次成功,之后随便写了个重采样音轨小程序,也就是把一个5.1声道的AC3文件分解成6个WAV文件的简单功能. 2.编译成功执行也正常,但速度奇慢,比同类软件eac3to慢了约5倍. 3.OK上网搜搜咋回事,一天,二天过去了无果. 4.无奈用VS2013的性能与诊断,分析出最占用时间的函数调用具然是:swr_convert参数里的lrintf() lrint() llrint() llrintf(

Android Socket编程学习笔记

通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 在java中,Socke

linux网络编程学习笔记之六 -----I/O多路复用服务端

多进程和多线程的目的是在于最大限度地利用CPU资源,当某个进程不需要占用太多CPU资源,而是需要I/O资源时,可以采用I/O多路复用,基本思路是让内核把进程挂起,直到有I/O事件发生时,再把控制返回给程序.这种事件驱动模型的高效之处在于,省去了进程和线程上下文切换的开销.整个程序运行在单一的进程上下文中,所有的逻辑流共享整个进程的地址空间.缺点是,编码复杂,而且随着每个逻辑流并发粒度的减小,编码复杂度会继续上升. I/O多路复用典型应用场合(摘自UNP6.1) select的模型就是这样一个实现