C++ primer plus__例程

目录

  • 一.安装软件vs
  • 二.运行第一个程序
  • 三.c++ primer plus 记录
  • 第一章 预备知识
  • 第二章 开始学习c++
  • 第三章 处理数据
    • 3.1 简单变量
      • 3.1.1 变量名
      • 3.1.2 整形
      • 3.1.3 整形short int long 和 long long
      • 3.1.4 无符号类型
      • 3.1.5 选择整形类型
      • 3.1.6 整形字面量
      • 3.1.7 c++如何确定常量的类型
      • 3.1.8 char类型:字符和小整数
      • 3.1.9 bool类型:true flase
    • 3.2 const限定符
    • 3.3 浮点数
      • 3.3.1 书写浮点数
      • 3.3.2 浮点类型
      • 3.3.3 浮点常量
      • 3.3.4 浮点数的优缺点
    • 3.4 c++ 算术运算符
      • 3.4.1 运算符优先级和结合性
      • 3.4.2 除法分支
      • 3.4.3 求模运算符
      • 3.4.4 类型转换
      • 3.4.5 c++11中的auto声明
    • 3.5 总结
    • 3.6 复习题
    • 3.7 编程练习
  • 第四章 复合类型
    • 4.1 数组(array)
      • 4.1.1 程序说明
      • 4.1.2 数组初始化规则
      • 4.1.3 c++11 数组初始化方法
    • 4.2 字符串
      • 4.2.1 拼接字符串常量
      • 4.2.2 在数组中使用字符串
      • 4.2.3 字符串输入
      • 4.2.4 每次读取一行字符串输入
      • 4.2.5 混合输入字符串和数字
    • 4.3 string 类简介
      • 4.3.1 c++11字符串初始化
      • 4.3.2 赋值、拼接和附加
      • 4.3.3 string类的其他操作
      • 4.3.4 string 类I/O
      • 4.3.5 其他形式的字符串字面值
    • 4.4 结构简介
      • 4.4.1 在程序中使用结构
      • 4.4.2 c++11结构初始化
      • 4.4.3 结构可以将string类作为成员吗
      • 4.4.4 其他结构属性
      • 4.4.5 结构数组
      • 4.4.6 结构中的位字段
    • 4.5 共同体
    • 4.6 枚举
      • 4.6.1 设置枚举量的值
      • 4.6.2 枚举的取值范围
    • 4.7 指针和自由存储空间
      • 4.7.1 声明和初始化指针
      • 4.7.2 指针的危险
      • 4.7.3 指针和数字
      • 4.7.4 使用new来分配内存
      • 4.7.5 使用delete释放内存
      • 4.7.6 使用new来创建动态数组
    • 4.8 指针、数组和指针算术
      • 4.8.1 程序说明
      • 4.8.2 指针小结
      • 4.8.3 指针和字符串
      • 4.8.4 使用new创建动态结构
      • 4.8.5 自动存储、静态 存储和动态存储
    • 4.9 类型组合
    • 4.10 数组的替代品
      • 4.10.1 模板类 vector
      • 4.10.2 模板类array
      • 4.10.3 比较数组、vector对象 和 array对象
    • 4.11 总结
    • 4.12 复习题
  • 第五章 循环和关系表达式
    • 5.1 for循环
      • 5.1.1 for循环的组成部分
      • 5.1.2 回到for循环
      • 5.1.3 修改步长
      • 5.1.4 使用 for 循环访问字符串
      • 5.1.5 递增运算符(++)和 递减运算符 (- -)
      • 5.1.6 副作用和顺序点
      • 5.1.7 前缀格式和后缀格式
      • 5.1.8 递增/递减运算符和指针
      • 5.1.9 组合赋值运算符
      • 5.1.10 复合语句(语句块)
      • 5.1.11 其他语法技巧---逗号运算符
      • 5.1.12 关系表达式
      • 5.1.13 赋值、比较和可能犯的错误
      • 5.1.14 c-风格字符串的比较
      • 5.1.15 比较string类字符串
    • 5.2 while循环
      • 5.2.1 for 与 while
      • 5.2.2 等待一段时间:编写延时循环
    • 5.3 do while循环
    • 5.4 基于范围的for循环(c++11)
    • 5.5 循环和文本输入
      • 5.5.1 使用原始的 cin 进行输入
      • 5.5.2 使用 cin.get(char) 进行补救
      • 5.5.3 使用哪一个 cin.get()
      • 5.5.4 文件尾条件
      • 5.5.5 另一个 cin.get() 版本
    • 5.6 嵌套循环和二位数组
      • 5.6.1 初始化二维数组
      • 5.6.2 使用二维数组
    • 5.7 总结
  • 第六章 分支语句和逻辑运算符
    • 6.1 if 语句
      • 6.1.1 if else 语句
      • 6.1.2 格式化 if else 语句
      • 6.1.3 if else if else结构
    • 6.2 逻辑表达式
      • 6.2.1 逻辑 OR 运算符: ||
      • 6.2.2 逻辑 AND 运算符: &&
      • 6.2.3 用 && 来设置取值范围
      • 6.2.4 逻辑 NOT 运算符: !
      • 6.2.5 逻辑运算符细节
      • 6.2.6 其他表达式
    • 6.3 字符函数库 cctype
    • 6.4 ?:运算符
    • 6.5 switch 语句
      • 6.5.1 将枚举量用作标签
      • 6.5.2 switch 和 if else
    • 6.6 break 和 continue 语句
    • 6.7 读取数字的循环
    • 6.8 简单文件输入、输出
    • 6.9 总结
  • 第七章 函数---c++的编程模块
    • 7.1 复习函数的基本知识
      • 7.1.1 定义函数
      • 7.1.2 函数原型和函数调用
    • 7.2 函数参数和按值传递
      • 7.2.1 多个参数
      • 7.2.2 另外一个接受两个参数得函数
    • 7.3 函数和数组
      • 7.3.1 函数如何使用指针来处理数组
      • 7.3.2 将数组作为参数意味着什么
      • 7.3.3 更多数组函数示例
      • 7.3.4 使用数组区间的函数
      • 7.3.5 指针和const
    • 7.4 函数和二维数组
    • 7.5 函数和c-风格字符串
      • 7.5.1 将c-风格字符串作为参数的函数
      • 7.5.2 返回c-风格字符串的函数
    • 7.6 函数和结构
      • 7.6.1 传递和返回结构
      • 7.6.2 另一个处理结构的函数示例
      • 7.6.3 传递结构的地址
    • 7.7 函数和string对象
    • 7.8 函数与array对象
    • 7.9 递归
      • 7.9.1 包含一个递归调用的递归
      • 7.9.2 包含多个递归调用的递归
    • 7.10 函数指针
      • 7.10.1 函数指针的基础知识
      • 7.10.2 函数指针示例
      • 7.10.3 深入探讨函数指针
      • 7.10.4 使用 typedef 进行简化
    • 7.11 总结
  • 第八章 函数探幽
    • 8.1 c++内联函数
    • 8.2 引用变量
      • 8.2.1 创建引用变量
      • 8.2.2 将引用用作函数参数
      • 8.2.3 引用的属性和特别之处
      • 8.2.4 将引用用于结构
      • 8.2.5 将引用用于类对象
      • 8.2.6 对象、继承和引用
      • 8.2.7 何时使用引用参数
    • 8.3 默认参数
    • 8.4 函数重载
      • 8.4.1 重载示例
      • 8.4.2 何时使用函数重载
    • 8.5 函数模板
      • 8.5.1 重载的函数模板
      • 8.5.2 模板的局限性
      • 8.5.3 显示具体化
      • 8.5.4 实例化和具体化
      • 8.5.5 编译器选择使用哪个函数版本
      • 8.5.6 模板函数的发展
    • 8.6 总结
  • 第九章 内存模型和名称空间
    • 9.1 单独编译
    • 9.2 存储持续性、作用域和链接性
      • 9.2.1 作用域和链接
      • 9.2.2 自动存储持续性
      • 9.2.3 静态持续变量
      • 9.2.4 静态持续性、外部链接性
      • 9.2.5 静态持续性、内部链接性
      • 9.2.6 静态存储持续性、无链接性
      • 9.2.7 说明符和限定符
      • 9.2.8 函数和链接性
      • 9.2.9 语言链接性
      • 9.2.10 存储方案和动态分配
    • 9.3 名称空间
      • 9.3.1 传统的c++名称空间
      • 9.3.2 新的名称空间特性
      • 9.3.3 名称空间示例
      • 9.3.4 名称空间及其前途
    • 9.4 总结

一.安装软件vs

vs安装教程地址

二.运行第一个程序

vs测试

三.c++ primer plus 记录

第一章 预备知识

第二章 开始学习c++

第三章 处理数据

3.1 简单变量

3.1.1 变量名

--主要讲述变量的命名规则

3.1.2 整形

c++基本整形:char short int long,char类型有一些特殊属性(常用来表示字符,而不是数字)
short 是short int的缩写,long 是 long int 的缩写。

3.1.3 整形short int long 和 long long

计算机内存由位(bit)单元组成。可以将位(bit)看成电子开关,0,1。8位的内存块可以设置出256种不同的组合:2的8次方。因此8位单元可以表示0-255或者-128-127
Q1.为什么对变量进行初始化?
如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。

3.1.4 无符号类型

关键字:unsigned  
注意,unsigned 本身是 unsigned int 的缩写。

short 和 unsigned short 的范围,注意越界概念,上溢或者下溢。

3.1.5 选择整形类型

int被设置为对目标计算机而言最“自然”的长度,自然长度就是计算机处理起来效率最高的长度。
变量表示的值不可能为负数,选择unsigned类型,可以表示更大的范围。
如果不知道选择什么类型,选int 。

3.1.6 整形字面量

控制输出的方式,是十六进制、八进制格式。
hex、oct 分别控制输出十六进制和八进制。

3.1.7 c++如何确定常量的类型

cout<<"year="<<1678<<"\n"

程序的生命将特定的整型变量的类型告诉编译器,在没有特殊的限定,程序把1678存储为int类型

3.1.8 char类型:字符和小整数

char 类型是转为存储字符而设计的。char类型是另一种整形,能够表示目标计算机系统中的所有基本符号--所有的字母、数字、标点符号。
第一个成员函数:cout.put(),通过类对象cout来使用函数put(),句点被称为成员运算符。
c++转义序列的编码:换行符“\n”,回车“\r”,水平制表符“\t"
换行符可替代endl,用于在输出中重启一行。下面三行代码都将光标移动到下一行开头:

cout<\n";
cout<<'\n';

3.1.9 bool类型:true flase

3.2 const限定符

const int Months=12;
#define类似,c++更好的对符号常量的处理是关键字const。
常量被初始化之后,其值就被固定下来,编译器将不允许修改常量的值了。
创建常量的通用格式:

const type name = value;

3.3 浮点数

3.3.1 书写浮点数

c++有两种书写浮点数的方式。常规小数点,E。
3.45E6,表示3.45x10的六次方。
8.33E~4表示8.33/10的四次方。

3.3.2 浮点类型


c++有三种浮点类型:float、double、long double。

float的精度比double的精度低。

3.3.3 浮点常量

8.24和2.4E8这种属于double类型。
1.234f       属于float类型。

3.3.4 浮点数的优缺点

将类型分类:

整数和浮点数统称为算术类型。
类型char、short、int、long统称为符号整形。
类型float、double、long double统称为浮点型。

3.4 c++ 算术运算符

基本算术 运算符:加法,减法,乘法,除法,求模。

对于float,c++只保证6位有效位。

将61.419998四舍五入成6位,将得到61.4200.

3.4.1 运算符优先级和结合性

遵从先乘除,后加减。
如果优先级相同:
float logs=120/4*5; //从左到右

3.4.2 除法分支

如果两个操作数都为整数,结果的小数部分将被丢弃,最后的结果是一个整数。
如果其中有一个(或两个)操作数都是浮点数,则小数部分将被保留,结果为浮点数
---
记住:两个操作数都为double类型,则结果为double类型。如果两个操作数都是float类型,结果为float类型。
浮点常量在默认情况下为double类型。
---
9/5=1
9.0/5.0=1.800000
9.0/5=1.800000

3.4.3 求模运算符

3.4.4 类型转换

为处理11种整形和3种浮点类型,类型进行运算时,c++会自动执行很多类型转换 :
1.将一种算术类型的值赋给另一种算术类型的变量时,c++将对值进行转换;
2.表达式中包含不同的类型时,c++将对值进行转换;
3.将参数传递给函数时,c++将对值进行转换;
---
潜在数值转换后的问题
如double转化为float:精度降低;浮点类型转换为整形:小数部分丢失;
---
将0赋给bool变量时,将被转换成为false,而非零的值将被转换成为true。
---
1.初始化和赋值进行的转换
2.以{
   }方式初始化时进行的转换
3.表达式中的转换
4.传递参数时的转换
5.强制类型转换
	//强制类型转换不会修改thorn变量本身,而是创建一个新的、指定类型的变量。
	//强制类型转换的格式:
	    (typename) value;
	     typenname  (value);//纯粹的c++风格
	//强制类型转换有两种表示方式,将存储在thorn中的int值转换为long类型时,可以表示为:
	(long) thorn;
	long   (thorn);

3.4.5 c++11中的auto声明

auto能够根据初始值的类型推断变量的类型
	auto n=100;
自动推断类型不是为这种简单情况设计的。处理复杂类型,如标准模块库(STL)中的类型时,自动类型推断才用上。
	std::vector<double> scores;
	auto pv=scores.begin();

3.5 总结

3.6 复习题

1.为什么c++有多种整形?
	c++整形变量一共11种,基本整型有四种:char,short,int,long 。可以根据特定的需求选择最合适的类型。
	例如可以用short来存储空格,用long来保证存储容量。提高计算的速度。
2.声明下面描述相符合的变量。
	short n=80;
	unsigned int n=42110;
	unsigned long int n=3E10;  //值为300000000的整数
3.c++提供了什么措施来防止超出整形的范围?
	c++没有提供自动防止超出整型限制的功能,可以使用头文件climits来确定限制的情况。//书第40页
4.33L与33之间有什么区别?
	33L为长整型,33为int类型。//标准答案:33L的类型为long,33的类型为int。
5.下面两条语句是否等价?
	char grade=65;
	char grade=’A‘;
	//答案:不等价 第一个 65是int常量,第二个A是char常量,字符串。
6.如何使用c++来找出编码是88表示的字符?
	方法1:
	char c = 88;
	cout<<c<<endl;
	方法2:
	cout.put(char(88));
	方法3:
	cout<<char(88);
	方法4:
	cout<<(char)88;
7.将long值赋给float变量会导致舍入误差,将long值赋给double变量呢?将long long值赋给double呢?
	这个问题的答案取决于这两个类型的长度。如果long为4字节,则没有损失。因为long的最大值将是20亿,即10位	
	数。由于double提供了至少13位有效数字,因而不需要进行任何舍入。long long类型可提供19位有效数字,超
	过了double保证的13位。
8.下列c++表达式的结果分别是多少?
	a.8*9+2;//74
	b.6*3/4; //4
	c.3/4*6;  //0
	d.6.0*3/4;  //  18.0/4is4.5
	e.15%4;  //3
9.
	double x1;
	double x2;
	int(x1);
	int(x2);
	int x3=x1+x2;
	---
	double x1;
	double x2;
	int x3=int(x1+x2);

10.下面每条语句声明的变量都是什么类型?

	a.auto cars=15;   //int
	b.auto iou=150.37f;  //float
	c.auto level='B'  //char
	d.auto crat=U'/u00002155'    //  这个是char32_t
	e.auto fract=8.25f/2.5   //double   整形提升,看第64页
	===
	1. 后面的2.5如果后面不加f的话,就是个double类型的值
	2. /的两个操作数一个是float一个是double,float向double方向做类型提升(Type promotion)
	3. 两个double的结果还是double,所以auto 的类型推断就认为fract是个double了

3.7 编程练习

答案链接

1.

第四章 复合类型

需要一些比基本类型复杂的数据类型---复合类型,这种类型是基于基本类型和浮点类型创建的。影响最为深远的复合类型就是---类是学习面向对象OOP的关键。

4.1 数组(array)

声明数组的通用格式:
typeName arrayName[arraySize]
---
short months[12]

4.1.1 程序说明

sizeof运算符返回类型或数据对象的长度(单位是字节)。如果将sizeof运算符用于数组名,得到的将是整个数组中字节数,如果sizeof用于数组元素,就是元素的长度(单位是字节)。

4.1.2 数组初始化规则

将数组中所有元素都初始化为0:
	long totals[500]={
   0};
	如果初始化{
   1}而不是{
   0},则第一个元素被设置为1,其他元素都被设置成0.

4.1.3 c++11 数组初始化方法

1.可以省略=
	double earning[4

你可能感兴趣的:(c++,c++)