OOP02-C++ 语言基础
C++和C语言比较
1.增加许多新的语言特性
2.支持面向对象程序设计
3.支持泛型程序设计
4.具有功能强大的标准库
5.C++语言是C语言的超集,是一个更好的C
main()函数
int main(int argc,char* argv[])
{
// ...
return 0;
}
C++ 多文件结构
- 源文件(定义文件或实现文件)
存放程序的实现,通常文件扩展名为.cpp - 头文件
存放程序的声明,通常文件扩展名为.h - 多文件结构的好处
1.支持并发协同编程
2.便于管理和维护
C++生成可执行文件的过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bETmSU1v-1595940693951)(C:\Users\15052\Desktop\photo\图片1.png)]
预处理命令
- 编译预处理是通过在程序中编写预处理命令来实现的,** 预处理命令不是C++语言的一部分**
- C++ 程序中包含的各种编译预处理命令在程序被正常编译之前执行.
常用的预处理命令
1.宏定义命令
2.文件包含命令
3.条件编译命令
4.停止编译命令
OOP03 - 类型和变量
C++中的数据类型
1.自定义类型
1.类
2.结构体
1.C++结构体增加了面向对象相关的特性,如支持成员函数
2.结构体成员的内存对齐。内置类型数据在内存中存储时,其起始地址必须能够 被它们的大小整除。结构体也要遵循这个规则
3.结构体支持对其中的基本成员变量按位拆分
4.结构体按位拆分时要考虑成员的内存对齐
3.联合体
- 它将不同类型的数据组织成一个整体,它们在内存中占用同一段存储单元.
- 结构体中的所有成员变量是同时存在的,而联合体中的成员在同一时刻只能存在一个.
4.枚举
C++11 枚举类更新
1.enum class 枚举类名{枚举成员列表}
2.枚举成员可以指定类型,指定数值
enum class AAA:int {A='a',N=123};
3.使用时必须指明枚举类名
AAA first=AAA::A;//避免名字冲突
cout<<(int)(AAA::A)<<endl;//需要显示转换
5.typedef
用来定义已有类型的同义词,可以出现在程序中类型名可以出现的任何位置
typedef<已有类型><新类型名>
2.内置类型
1.基本类型
1.char
2.int
3.float
4.double
5.void
2.扩展类型
类型修饰符
signed,unsigned,short,long
3.bool类型
3.导出类型
1.数组
2.指针
3.引用
变量
- 变量名,可以由字母,下划线,数字组成.变量名必须以字母或下划线开头,并且区分大小写字母.
- C++ 要使用一个变量必须先声明
变量的声明和定义
1.变量声明用于表明变量的类型和名字,不必分配存储空间.
2.变量的定义用于为变量分配存储空间,还可以为变量指定初始值.
3.定义是声明
4.声明未必是定义,可以通过extern关键字声明变量名而不定义它.
5.只要声明存在初始值就认为为定义.
变量的使用规则
1.先声明后使用
2.就近原则
3.单一定义
变量的存储
C++中,一个程序占用的内存区一般分为以下几部分
- 全局,静态数据区:存储全局变量及静态变量(包括全局静态变量和局部静态变量),分配该区时内存全部清零.
- 常量数据区:存储程序中的常量字符串.
- 代码区: 存储程序的代码,即程序中各个函数的代码块.
- 栈区: 存储局部变量,如函数中的变量等;由系统自动分配;
- 堆区: 存储动态产生的数据,由程序员动态分配和回收.
- 变量可能在全局,静态数据区,也可能存储在栈区或堆区.
存储类限定符
- auto 局部变量,栈区,通常省略;
- register 局部变量,寄存器,以便快速访问;
- static 全局或局部变量,全局,静态数据区;
- extern 表示变量已经在别处定义,此处只是引入声明;
- mutable 只能用于类的数据成员,可以突破const的限制
** 如果局部变量的作用域与全局变量的作用域与全局变量的作用域重叠,那么,在重叠的范围内,那个全局变量无效**
** 可以使用作用域解析运算符(:😃 访问该被覆盖的全局变量 **
- 静态变量的生存期,从声明它的语句起,直到程序结束时消失.
- 全局变量和全局静态变量的区别
- 全局静态变量作用域局限于所在源文件,不允许用extern将其作用域扩展至其它源文件.