《C++高级进阶教程》 第二章 数据类型与程序结构

目录

2.1 C++的数据类型

2.2 C++中的布尔类型

2.3 void的用法

2.4 枚举类型的定义和使用

2.5 结构和联合体

2.6 数据类型转换

2.7 声明与定义的区别

2.8 初始化

2.9 作用域和生命期

2.10 头文件

2.11 分离编译模式


 

2.1 C++的数据类型

 

这个地方贴一个图,见P63

 

2.2 C++中的布尔类型

C++中将不二类型视为只能在0和1当中取值的整数类型。也就是要么是0要么是1;

#include <iostream>
using namespace std;

int main()
{
    bool bvar;
    int i =5, j = 5;
    bvar =  i==j;
    cout << bvar <<endl;
    cout << bvar+i << endl;
}

程序执行结果:
1
6

2.3 void的用法

  1. 修饰函数返回值,意味着没有返回值
  2. 修饰函数形参,意味着没有形参
  3. 修饰指针,也就是void *p; 一般用作两个指针类型的中间转换站,用于指针类型转换。

2.4 枚举类型的定义和使用

用处:主要是提高程序的可读性,本质上就是把一些int类型,起了一个有意思的名字。

语法:

enum weekDay{Sun = -1, Mon, Tue};

weekDay day;

day = Tue;

2.5 结构和联合体

结构和类最大的不同是,结构成员变量默认权限是public,而类默认是private

其他注意事项:添加图片P73

联合体:最大的特点就是几个数据内存共享;用处比较少pass

2.6 数据类型转换

用法:

(T)expression  // C-style cast

T(expression)  //function-style cast - c++ style

本质:实质上都是背后类型转换函数的调用,有点像python的魔法函数

转换方式:

  1. C方式强制类型转换,最不推荐;基本类型中高精度到低精度有精度丢失;复杂类型强制转换可能会有问题
  2. const_cast:将const类型,临时转换为可以编辑的同样的去掉const的类型。允许临时更改
  3. staic_cast: 会对类型转换做一些检查;常用语基本数据类型之间的转换; 基类对象指针和派生类对象指针之间的转换;一般的指针和void *之间的转换
  4. reinterpret_cast: 类似强制类型转换
  5. 自定义转换函数:
  •    比如在两个用户定义类之间转换,或者涉及到的用户自定义类型转换。 比如在类A和基本类型B之间的转换,一般都是通过构造形参为类型B的构造函数来实现;具体见p79
  • 类对象转换为基本类型:需要用到自定义的转换函数。类似格式operator int() {return 1;}; 作为类成员函数,权限为Public, 没有形参,也没有返回值,必须要有目标类型的返回语句。详情见P83
  1. 2 - 4 统一用法: type_cast_operator<type>(expression)

2.7 声明与定义的区别

声明:就是告诉编译器,我这个标识在哪个地方可以用,有可能使用;但是如果后续代码里面没有调用,那对应的这个声明可以没有定义。

定义:也就是声明所对应的代码原型实现的具体内容。

  1. 基本类型 变量的声明和定义是一致的; 此处添加图片p84
  2. 函数的声明就是函数原型;而函数定义是函数实现
  3. 构造数据类型,比如类,结构体,联合体。声明 可以是  class A; A对应的定义是列出A所有全部成员的地方,注意在类的定义 中 所有数据成员的说明语句都是声明,而不是定义。所以不能在类体直接为数据成员赋初值,而是要通过构造函数赋值。

2.8 初始化

初始化就是创建一个变量,并使其具有意义的过程。包含两个方面,一个是分配空间,另一个是给对应空间写入特定的初始值。

变量定义一定要跟随赋初值,因为不同编译器给于的初值不一样,有可能引发错误。

指针变量在使用前,一定要给予有意义的值,不允许野指针。

类的初始化和赋值不一样,一个调用的是构造函数,另一个调用的是赋值函数,也就是operator = () 魔法函数。

malloc使用的时候,只会申请空间,不会初始化

new调用的时候,除了申请空间,还会初始化

2.9 作用域和生命期

两个概念一个是空间上的,一个是时间上的。

作用域:就是告诉编译器,这个变量在什么范围可以使用。一般都是在变量声明之后可以使用

    声明域:就是声明标识符的区域,比如全局变量的声明,声明域是整个文件。函数内声明的局部变量,是整个函数体或者复合语句。

    潜在作用域:从声明点开始,到声明域的结束。

    作用域:也就是标识符对程序可见的范围,之所以和潜在作用域不同,主要是考虑到在嵌套作用域中存在同名变量的时候,会形成隐藏的现象。

详情可以见P92

生命期:就是程序从运行到结束这一段过程中,某变量存在的时间段。

2.10 头文件

用途:头文件主要用于抽出程序中一些common的东西出来,可以减少冗余代码。主要是相同的数据结构。

在编译的时候,可以认为就是把头文件的内容直接铺在cpp文件中。

2.11 分离编译模式

实际上就是:声明和定义的分离。也就是说想用的时候,只要在某个文件中做声明,这时候假设定义已经在其他地方实现了。在编译的时候每个文件单独编译一个目标文件。然后链接起来。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本资源是压缩包形式的, 里面包含 本书,里面是pdf格式的, 带书签目录,本书是完整版的。 资源都是我自己用过的,不骗大家。 本书作者: 肖俊宇 吴为胜; 出版社: 电子工业出版社 内容简介: 《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》是C++语言的入门教程,较为系统地介绍了C++语言的基础内容。本书共分为3篇22章,详细介绍了C++语言的基础知识、面向对象、标准模块、底层开发和综合案例。本书循序渐进地讲述了C++的基础知识、C++程序的组成及其开发过程、C++程序中的数据、表达式和语句、控制程序流程、数组与字符串、指针与引用、使用函数、函数模板、错误和异常处理、宏和预编译、面向对象的开发、封装、继承、多态、类模板、文件流、标准模板库STL和编程实践等内容。 《由浅入深学C++:基础、进阶与必做300题(含DVD光盘1张)》涉及面广,从基本知识到高级内容和核心概念,再到综合案例,几乎涉及C++开发的所有重要知识。本书适合所有想全面学习C++开发技术的人员阅读,尤其适合没有编程基础的C++语言初学者作为入门教程,也可作为大、中院校师生和培训班的教材,对于C++语言开发爱好者,本书也有较大的参考价值。 章节目录: 第1篇 C++基础篇 第1章 C++概述 1 1.1 引言 1 1.1.1 C++的历史沿革 1 1.1.2 入门C++ 2 1.1.3 编程思想的转变 3 1.2 C++概述 4 1.2.1 C++的特征 5 1.2.2 C与C++的比较 5 1.2.3 C++的应用领域 6 1.3 C++源程序的组成 6 1.3.1 基本组成元素 7 1.3.2 标识符 8 1.3.3 保留字 8 1.3.4 符号 8 1.4 C++集成开发环境——DEV-C++ 9 1.4.1 选择C++编译器 9 1.4.2 安装DEV-C++ 10 1.4.3 DEV-C++ IDE简介 11 1.5 第一个C++程序——Hello World 11 1.5.1 创建源程序 11 1.5.2 编译运行 13 1.6 小结 14 1.7 习题 14 第2章 变量与数据类型 18 2.1 常量和变量 18 2.1.1 常量 18 2.1.2 变量 21 2.1.3 变量的定义及赋值 22 2.1.4 变量的应用示例 24 2.2 基本数据类型 25 2.2.1 基本数据类型概述 25 2.2.2 整型数据类型 26 2.2.3 浮点型数据类型 27 2.2.4 字符型数据类型 29 2.2.5 布尔型数据类型 30 2.3 变量的作用域 31 2.4 类型转换 32 2.4.1 隐式转换 32 2.4.2 显式转换 33 2.5 小结 34 2.6 习题 34 第3章 表达式与语句 39 3.1 运算符 39 3.1.1 运算符概述 39 3.1.2 算术运算符 40 3.1.3 自增和自减运算符 42 3.1.4 赋值运算符 43 3.1.5 关系运算符 44 3.1.6 逻辑运算符 45 3.1.7 条件运算符 46 3.1.8 逗号运算符 47 3.1.9 位运算符 48 3.1.10 sizeof运算符 49 3.2 运算符的优先级和结合性 50 3.3 表达式 51 3.4 语句 53 3.4.1 空格的作用 53 3.4.2 语句块 54 3.4.3 赋值语句 55 3.4.4 空语句 56 3.5 小结 57 3.6 习题 57 第4章 流程控制结构之顺序结构 63 4.1 程序流程图 63 4.2 表达式语句 64 4.3 格式化输入/输出 65 4.3.1 标准输入流cin 65 4.3.2 标准输出流cout 66 4.3.3 输出流cerr和clog 68 4.4 格式控制函数 69 4.5 格式控制符 71 4.5.1 控制不同进制的输出 72 4.5.2 控制输出宽度 72 4.5.3 控制输出精度 73 4.6 顺序结构综合应用 74 4.7 小结 75 4.8 习题 75
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值