×
超值优惠券
¥50
100可用 有效期2天

全场图书通用(淘书团除外)

关闭
C++从入门到精通

C++从入门到精通

1星价 ¥42.2 (4.8折)
2星价¥42.2 定价¥88.0

温馨提示:5折以下图书主要为出版社尾货,大部分为全新(有塑封/无塑封),个别图书品相8-9成新、切口有划线标记、光盘等附件不全详细品相说明>>

暂无评论
图文详情
  • ISBN:9787520823777
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:24cm
  • 页数:278页
  • 出版时间:2023-01-01
  • 条形码:9787520823777 ; 978-7-5208-2377-7

本书特色

培养编程思维,轻松玩转C++! 内容全面:内容全面,讲解细致,循序渐进,便于理解 视频讲解:扫码观看,通俗易懂,知识拓展,随时随地 轻松上手:大量示例,边学边练,轻松学习,快速提升

内容简介

本书系统讲述了从入门到精通所必需的相关知识。全书共11章,主要分为三大部分。**部分(第1章)主要介绍C语言与C++语言的基本概念。第二部分(第2章到第4章)为C语言部分,主要介绍C语言的基本数据类型、运算符和表达式(第2章);面向过程思想的程序设计方法,包括程序结构设计与控制方法、预处理命令和C语言操作(第3章);函数的定义和函数模板使用方法(第4章)。第三部分(第5章到第11章)为C++语言部分。主要介绍类和对象的基本概念、定义方法(第5章);对象的初始化和析构方法、对象数组和指针、静态成员和友元等(第6章);第7章和第8章分别介绍了类的继承和多态性;第9章可以看作类的多态性的一种表现(静态多态性),主要介绍运算符重载的规则和方法;第10章重点介绍C++的输入和输出;第11章重点讲解C++命名空间和异常处理机制。

目录

第1 章 C 语言与C++ 语言概述

1.1 C 语言概述

1.2 从C 语言到C++ 语言

1.3 入门的C 程序和C++ 程序

1.3.1 入门的C 程序

1.3.2 入门的C++ 程序

1.4 程序开发过程

1.4.1 分析问题

1.4.2 编辑程序

1.4.3 编译程序

1.4.4 连接程序

1.4.5 运行并调试程序

本章习题


第2 章 数据类型、运算符和表达式

2.1 常量与变量

2.1.1 常量

2.1.2 变量

2.2 基本数据类型

2.2.1 整型数据

2.2.2 字符型数据

2.2.3 实型数据

2.3 数据的组合类型

2.3.1 数组类型

2.3.2 结构体类型

2.3.3 共用体类型

2.3.4 枚举类型

2.3.5 类类型

2.3.6 定义类型别名

2.4 指针

2.4.1 内存和地址

2.4.2 指针变量

2.4.3 动态内存的分配和管理

2.5 基本运算符和表达式

2.5.1 赋值运算符和表达式

2.5.2 算术运算符和表达式

2.5.3 关系运算符和表达式

2.5.4 逻辑运算符和表达式

2.5.5 位运算符和表达式

2.5.6 条件运算符和表达式

2.5.7 逗号运算符和表达式

2.5.8 指针运算符和表达式

2.5.9 地址运算符和表达式

2.5.10 求字节运算符和表达式

2.5.11 强制运算符和表达式

2.5.12 下标运算符和表达式

2.5.13 自增与自减运算符

和表达式

2.6 运算符的优先级和结合性

本章习题


第3 章 基于面向过程思想的程序

设计方法

3.1 C 语言数据的输入与输出

3.1.1 字符数据的输入与输出

3.1.2 格式的输出与输入

3.2 顺序结构程序设计

3.2.1 表达式和语句

3.2.2 顺序结构程序举例

3.3 选择结构程序设计

3.3.1 if 语句

3.3.2 if-else 语句

3.3.3 多个if-else 语句

3.3.4 switch-case 语句

3.3.5 选择结构程序举例

3.4 循环结构程序设计

3.4.1 goto 语句

3.4.2 while 语句

3.4.3 do-while 语句

3.4.4 for 语句

3.4.5 嵌套循环语句

3.4.6 break 语句

3.4.7 continue 语句

3.5 预处理功能

3.5.1 宏定义

3.5.2 文件包含

3.5.3 条件编译

3.6 C 语言的文件操作

本章习题


第4 章 函数

4.1 函数的声明和定义

4.1.1 函数的声明

4.1.2 函数的定义

4.2 函数的形参和实参

4.2.1 函数的形参和实参的概念

4.2.2 函数的形参和实参的类型

4.2.3 函数的缺省参数

4.2.4 函数参数的传递方式

4.3 函数的返回值

4.4 函数的调用

4.4.1 函数调用的一般格式

4.4.2 函数调用的方式

4.4.3 函数的嵌套和递归调用

4.5 函数指针

4.5.1 函数的地址和指向函数的指针

4.5.2 函数指针的使用

4.6 函数重载

4.7 函数模板

4.7.1 函数模板的概念

4.7.2 函数模板的使用

本章习题


第5 章 类和对象

5.1 从结构体到类

5.2 类的定义以及类的成员

5.2.1 类的数据成员

5.2.2 类的成员函数

5.2.3 类成员的访问属性

5.3 类对象的定义和使用

5.3.1 对象的概念

5.3.2 定义对象的方法

5.3.3 类对象的使用方法

5.4 类的封装性

5.4.1 公用接口与私有实现的分离

5.4.2 类的封装性举例

本章习题


第6 章 深入类和对象

6.1 对象的初始化

6.2 构造函数

6.2.1 构造函数的作用

6.2.2 带参数的构造函数

6.2.3 带默认参数的构造函数

6.2.4 参数初始化表的构造函数

6.2.5 构造函数的重载

6.3 析构函数

6.3.1 析构函数的作用

6.3.2 析构函数的实现

6.4 调用构造函数和析构函数的时机与顺序

6.4.1 调用构造函数

6.4.2 调用析构函数

6.5 对象数组和指针

6.5.1 对象数组的定义和初始化

6.5.2 指向对象的指针

6.5.3 this 指针

6.6 对象的动态建立和释放

6.7 对象的赋值和复制

6.7.1 对象的赋值

6.7.2 对象的复制

6.8 静态成员

6.8.1 静态数据成员变量

6.8.2 静态成员函数

6.9 友元

6.9.1 友元函数

6.9.2 友元类

6.10 类模板

本章习题


第7 章 类的继承和派生

7.1 继承和派生的概念

7.2 派生类的声明方式

7.3 派生类的构成

7.4 派生类成员的访问属性

7.4.1 公用继承

7.4.2 私有继承

7.4.3 受保护继承

7.5 派生类的构造函数和析构函数

7.5.1 简单派生类的构造函数

7.5.2 有子对象的派生类构造函数

7.5.3 多级派生类的构造函数

7.5.4 派生类的析构函数

7.6 多重继承

7.6.1 多重继承的声明方式

7.6.2 多重继承的构造函数

7.6.3 多重继承产生的二义性

7.7 虚基类

7.7.1 虚基类的定义方法

7.7.2 虚基类的初始化

7.7.3 虚基类举例

7.8 基类和派生类的转换关系

本章习题


第8 章 类的多态性

8.1 多态性的概念和表现形式

8.1.1 多态性的概念

8.1.2 多态性的表现形式

8.2 虚函数

8.2.1 虚函数的作用

8.2.2 虚函数的应用

8.3 纯虚函数与抽象基类

8.3.1 纯虚函数

8.3.2 抽象基类

8.4 虚析构函数

本章习题


第9 章 运算符重载

9.1 运算符重载的含义

9.2 运算符重载的规则

9.3 运算符重载的方法

9.3.1 运算符重载函数作为类的

成员函数

9.3.2 运算符重载函数作为类的友元函数

9.4 重载单目运算符

9.5 重载流插入运算符和重载流提取运算符

9.5.1 重载流插入运算符

9.5.2 重载流提取运算符

9.6 不同类型间数据的转换

9.6.1 标准类型间的数据转换

9.6.2 转换构造函数

9.6.3 类型转换函数

本章习题


第10 章 C++ 的输入/ 输出

10.1 标准输入流

10.1.1 cin 流

10.1.2 istream 成员函数

10.2 标准输出流

10.2.1 标准输出流对象cout

10.2.2 cerr 和clog 流对象

10.2.3 ostream 成员函数

10.3 文件流与文件操作

10.3.1 文件流与文件流类

10.3.2 文件的打开和关闭

10.3.3 文件操作

本章习题


第11 章 命名空间和异常处理

11.1 命名空间

11.1.1 命名空间的含义

11.1.2 命名空间的作用

11.1.3 标准命名空间

11.1.4 自定义命名空间

11.2 异常处理

11.2.1 常见错误分析

11.2.2 程序调试

11.2.3 异常处理的方法

本章习题

习题答案


展开全部

节选

2.4 指针 2.4.1 内存和地址 可以将计算机中的内存比作一栋楼房,每间房屋能够存储数据,并由房间号确定标识。而计算机中的内存由数亿个位组成,一位能存储值0 和1,但是一位表示的范围有限,所以单独谈一位没有实际意义。一般来讲,使用多个位为一组构成一个单位,就可以存储较大范围的值。每一个单位为一个字节,它包含存储一个字符需要的位数。在目前的许多计算机中,一个字节由8 个位构成,能存储无符号值0~255。为了存储更大的值,我们把两个或多个字节合在一起,作为一个更大的内存单位。例如:许多计算机以字节为单位存储整数,每个字一般由2 个或4 个字节组成,即常用的int 等类型。假如记住一个值的存储地址,就可以按照此地址取得一个值。 2.4.2 指针变量 指针是一个数据在内存中的地址,指针变量就是存放地址的变量。在C 语言中,指针变量是保存变量的地址,我们可以访问指针变量保存的地址值。指针变量的值为数据的地址,包括数组、字符串、函数、普通变量等。例如:在一个char 类型的变量a 中,存储一个字符a,其ASCII 码为65,占用地址为0X11A 的内存。除此之外,还存在另一个指针变量p,其值也是0X11A。这种情况就称p 指向a,也可以说p 为指针变量a 的指针。 1. 定义指针变量 定义指针变量和定义普通变量大致相同,都是变量名前面加星号(*),格式如下: datatype *name; 或者 datatype *name=value; // 这里的“*”表示指针变量,“datatype”表示该指 针所指向的数据类型,value 为变量的地址值,通常情况下用取地址符获取变量地址 int a=10; int *p_a=&a; “p_a”是一个指向int 类型的指针变量,在定义指针变量“p_a”的同时对它进行 初始化,并将变量“a”的地址赋予它,此时“p_a”就指向了“a”。值得注意的是,“a” 前面必须要加取地址符(&),否则是错误的。 指针变量也可以连续定义,例如: int *a,*b,*c; //a、b、c 的类型都是int* 第2 章 数据类型、运算符和表达式 2. 通过指针变量取得数据 指针变量存储了数据的地址,通过指针变量能够获得该地址的数据,格式为: *pointer; 此处的“*”为指针运算符,用来取得某个地址上的数据,如例2.13 所示。 【例2.13】利用指针输出a 的值。 相应代码如下: #include int main() { int a=5; int *p=&a; printf ("%d,%d\n",a,*p); // 两种方法都输出a 的数值 return 0; } 程序运行结果为: 5, 5 知识点拨:假设“a”的地址是“0X1111”,“p”指向“a”后,“p”本身的值变为“0X1111”。“*p”表示获取地址“0X1111”的数据,即变量“a”的值。从运行结果看,“*p”和“&a”是等价的。 【例2.14】通过指针交换两个变量a、b 的值。 相应代码如下: #include int main() { int a=1,b=10,temp; int *pa=&a,*pb=&b; printf ("a=%d,b=%d\n",a,b); temp=*pa; // 将a 的值先保存起来 *pa=*pb; // 将b 的值交给a,将保存起来的a 值交换给b *pb=temp; // 将保存起来的a 值交换给b,结束交换 printf ("a=%d,b=%d\n",a,b); return 0; } 程序运行结果为: a=1, b=10 a=10, b=1 知识点拨:通过运行结果可以看出,a、b 的值已经发生了交换。需要注意的是临时变量“temp”的使用,执行“*pa=*pb;”语句后,“a”的值会被“b”的值覆盖。因此,如果不预先将“a”的值保存起来,之后“a”的值就会被覆盖。 3. 一维数组和指针 从本质上来说,一维数组元素也是一个变量,也有自己的地址,因此完全可以定义指向一维数组元素的指针。 例如: int a[10],*p,*q; p=&a[0]; q=&a[3]; 以下语句定义了一个指向一维数组的指针变量: int a[10],*p; p=a; 注意:在C 语言中,数组名即为数组的首地址。此外,在一个一维数组中,无论一个元素占用多少内存,如果一个指针“p”指向一维数组中的一个元素,那“p+1”总会指向数组中的下一个元素。 【例2.15】指针加减整数。 相应代码如下: #include int main() { int a[10],*p=&a[5]; // 定义数组,命名指针变量 printf ("p=%p\n",p); printf ("p+1=%p\n",p+1); // 对p 进行加操作 printf ("p-1=%p\n",p-1); // 对p 进行减操作 return 0; } 程序运行结果为: p=0019FF1C p+1=0019FF20 p-1=0019FF18 知识点拨:例2.15 中的程序定义了长度为10 的数组,然后命名了指针变量“*p”。对“p”进行加减操作,实际上改变了地址值。如果“a”是一个一维数组,那么“a+i”就是数组元素“a[i]”的地址(等价于“&a[i]”),而“a+i”就代表数组元素“a[i]”。如果“a”是一个一维数组,而指针变量“p”指向“a[0]”,那么“p+i”就是数组元素“a[i]”的地址,而“*(p+i)”就代表数组元素“a[i]”。 【例2.16】键盘输入10 个数并逆序输出。 相应代码如下: #include int main() { int a[10],*p=a,i; // 初始化数组 printf (" 输入10 个数: "); for(i=0;i=0;i--) printf("%2ld ",*(p+i)); // 等价于printf ("%d",a[i]) return 0; } 程序运行结果为: 输入10 个数: 1 2 3 4 5 6 7 8 9 0 逆序后: 0 9 8 7 6 5 4 3 2 1 知识点拨:在例2.16 的程序中,为了访问不同的数组元素,改变的不是指针变量“p”的值,而是整型变量“i”的值。虽然“p”是一个指针变量而不是一个数组,但是C 语言允许将指针形式的“*(p+i)”表示为数组元素形式的“p[i]”,从而允许数组指针“p+i”表示为“&p[i]”。 4. 指针变量作为函数参数 在C 语言中,函数的参数不限于整型、实型或字符型等数据类型,也可以是指针类型。指针类型的函数参数意义为:将主调函数中的变量地址传递到被调函数中,从而实现变量的函数间接引用。 【例2.17】利用函数交换a、b 的值。 相应代码如下: #include void swap(int *m,int *n) // 定义交换函数 { int temp; temp=*m; // 等价于temp=m; *m=*n; // 等价于m=n; *n=temp; // 等价于n=temp; } int main() { int a,b; printf (" 输入两个整数: "); scanf("%d%d",&a,&b); printf (" 交换前: a=%d,b=%d\n",a,b); swap(&a,&b); printf (" 交换后: a=%d,b=%d\n",a,b); // 输出交换后的值 return 0; } 程序运行结果为: 输入两个整数: 3 5 交换前: a=3, b=5 交换后: a=5, b=3 知识点拨:在例2.17 的程序中,首先将主调函数中的局部变量的地址传递到被调函数中,之后在被调函数中对主调函数中的局部变量进行间接引用,这在实质上是一种跨函数的间接引用。关于函数的具体介绍参见第4 章。 2.4.3 动态内存的分配和管理 1. malloc 函数 函数声明:void *malloc(size_t Size) 所在文件:stdlib.h 参数:size_t Size(Size 表示要申请的字节数) 返回值:void *( 成功则返回“指向申请空间的指针”,失败则返回NULL) 函数功能:申请Size 个字节的堆内存并返回内存空间首地址malloc 函数根据参数指定的尺寸来分配内存块,并且返回一个void 型指针,指向新分配的内存块的初始位置。如果内存分配失败(内存不足),则函数返回NULL。如分配100 个int 类型的空间: int* p=(int *) malloc ( sizeof (int) * 100 ); 2. free 函数 函数声明:void f ree(void *p) 所在文件:stdlib.h 参数:void *p( 指向堆内申请的合法空间) 返回值:void 功能:释放手动申请的堆内合法内存空间 例如: int* p=(int *) malloc(4); *p=100; f ree(p); // 释放 p 所指的内存空间 以下是关于malloc 和free 的使用例子: #include "stdio.h" #include "stdlib.h" #def ine SIZE 3 int main() { int *pt=NULL; // 使用malloc() 申请空间 pt=(int*)malloc(SIZE * sizeof (int)); // 判断是否申请成功,若申请失败,则提示退出 if (pt==NULL) { printf (" 内存未申请成功"); return 0; } for (int i=0; i “+”(单目)>“-”(单目)>“*”>“/”>“+”>“-”(关于运算符优先级详细介绍请见第2.6 节的内容)。只有单目运算符“+”“-”的结合性是从右到左的,其余运算符的结合性都是从左到右的,例如“(a+b)*c/a”的结果为6,而“d2=a+b*c/a”的结果为7。“a/c”结果为1.5,但是d3 类型为int 型,因此,结果为1。a 对c 取余的结果为1,因此,“a%c=1”。 2.5.3 关系运算符和表达式 关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在6 个关系运算符中,“”“>=”的优先级相同,高于“==”和“!=”,“==”和“!=”的优先级相同。由关系运算符组成的式子为关系表达式,如“a>b”即为关系表达式。在C 语言中,同逻辑表达式一样,关系表达式的值也为逻辑值,即布(bool),取值为真或假。 注意:在C 语言中,“==”表示等于,而“=”表示赋值。如果要做判断,需要 使用“==”。 如语句: if (a==1) {…} 表示判断是否满足条件“a==1”,如果满足则进行{} 中的处理,是典型的判断语 句。但是,如果写成: if (a=1) {…} 则表示给“a”赋值为1。程序将不做判断,直接进行“{}”中的处理。初学C++ 时, 很容易混淆“==”和“=”,大家需要格外注意。 2.5.4 逻辑运算符和表达式 逻辑运算符主要有3 种:并且、或者和相反。 (1)并且:逻辑为与,操作符为“&&”,表示两者都成立。 (2)或者:逻辑为或,操作符为“||”,表示只要两个其中的一个条件成立即可。 (3)相反:逻辑为非,操作符为“!”,表示(如果)之前成立,现在就不成立;(如果)在之前不成立,那么现在就成立。 逻辑表达式的值与关系表达式的值一样,结果成立为1,不成立为0。在C 程序 里面,用0 表示不成立,用除0 之外的任何数表示成立。 逻辑运算符的优先级为“!”>“ &&”>“ ||”。 2.5.5 位运算符和表达式 位运算符主要有6 种:按位与(&)、按位或(|)、异或(^)、取反(~)、右移(>>)、左移(<<)。 1. 按位与运算符 按位与运算符(&)进行的是这样的算法:0&0=0,0&1=0,1&0=0,1&1=1。 【例2.19】利用按位与运算符输出结果。 相应代码如下: #include int main() { int a=4; int b=5; printf("%d",a&b); } 程序运行结果为: 4 知识点拨:a=4 的二进制表示a=(0100)2,b=5 的二进制表示b=(0101)2,a&b=(0100)2,换算成十进制数为4。 2. 按位或运算符 按位或运算符(|)进行的是这样的算法:0|0=0,0|1=1,1|0=1,1|1=1。 【例2.20】利用按位或运算符输出结果。 相应代码如下: #include int main() { int a=060; int b=017; printf ("%d",a|b); } 程序运行结果为: 63 知识点拨:在C 语言中,如果一个整型是以0 开头的,那么它就是一个八进制数。如果是以0x 开头的,那么它就是一个十六进制数。此处的a 和b 都是八进制数。如果换算成二级制数a=(0110000)2, b=(0001111)2。a|b=(0111111)2,换算成十进制数为63。 3. 异或运算符 异或运算符(^)进行的是这样的算法:0^0=0,0^1=1,1^0=1,1^1=0(相同为0,不同为1)。

作者简介

  高明亮,山东临朐人,2013年毕业于四川大学通信与信息系统专业,获工学博士学位。现任山东理工大学电气与电子工程学院副教授,硕士生导师。主要从事计算机视觉、深度学习方面的研究工作。主讲高级程序设计语言、数字图像处理技术、信息论与编码等课程。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航