C++ 程序是对象的集合,他们之间通过方法调用进行交互。
- 对象 - 对象具有状态(属性)和行为(方法)。例如:一名学生的状态—姓名,年龄,性别 ,行为—吃饭、睡觉、运动。对象是类的实例。
- 类 - 类可以定义为描述对象行为/状态的模板/蓝图,是对象的抽象。
- 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
- 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
分号 & 语句块 & 标识符
和 C 是完全一样的:
- 在 C++ 中,分号是语句结束符,它表明一个逻辑实体的结束。
- 语句块是一组使用大括号括起来的按逻辑连接的语句。
- C++ 不以行末作为结束符的标识,因此,您可以在一行上放置多个语句。
- C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。标识符由字母,下划线和数字组成,且只以字母 A-Z 或 a-z 或下划线 _ 开始,。C++ 标识符内不允许出现标点字符,比如 @、& 和 %。C++ 是区分大小写的编程语言。
三字符组 & 关键字 & 空格
三字符组就是用于表示另一个字符的三个字符序列,又称为三字符序列。三字符序列总是以两个问号开头,有:
三字符组 | 替换的字符 |
---|---|
??= | # |
??/ | \ |
??' | ^ |
??( | [ |
??) | ] |
??! | | |
??< | { |
??> | } |
??- | ~ |
如果希望在源程序中有两个连续的问号,且不希望被预处理器替换为对应字符,方法是用字符串的自动连接:"...?""?..." 或者转义序列: "...?\?..." 来实现。
保留字(关键字)不能作为常量名、变量名或其他标识符名称。 C++ 中的保留字有:
asm | else | new | this |
auto | enum | operator | throw |
bool | explicit | private | true |
break | export | protected | try |
case | extern | public | typedef |
catch | false | register | typeid |
char | float | reinterpret_cast | typename |
class | for | return | union |
const | friend | short | unsigned |
const_cast | goto | signed | using |
continue | if | sizeof | virtual |
default | inline | static | void |
delete | int | static_cast | volatile |
do | long | struct | wchar_t |
double | mutable | switch | while |
dynamic_cast | namespace | template |
空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束。为了增强可读性,表达式的标识符、运算符等之间添加空格,只包含空格的行,被称为空白行,会被编译器完全忽略。
注释
C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。
单行注释://
多行注释:/* */,这种格式的注释可以单行或多行。
/* */和 // 可以互相嵌套,// 本身可以嵌套 ,但 /**/ 本身不能嵌套。
基本的内置数据类型
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
其中,wchar_t的定义为:
typedef short int wchar_t;
也就是说,wchar_t 和 short int 的占用的内存空间相同。
C++ 允许在 char、int 和 double 数据类型前放置修饰符,允许使用速记符号来声明无符号短整数或无符号长整数。对于int,可以不写 int,只写单词 unsigned、short 或 unsigned、long。对数据类型的修饰符包括:
- signed
- unsigned
- short
- long
通过以上类型修饰符,各种数据类型如下(包括占用内存大小,同时变量的大小会根据编译器和所使用的电脑而有所不同。):
数据类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
枚举类型
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
} 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始为0,后面的标识符的值依次必前面的大1,即初始化之前的不变,初始化之后的比之前的大1。
类型限定符
类型限定符提供了变量的额外信息。
限定符 | 含义 |
---|---|
const | const 类型的对象在程序执行期间不能被修改改变。 |
volatile | 修饰符 volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于一般的变量编译器会对变量进行优化,将内存中的变量值放在寄存器中以加快读写效率。 |
restrict | 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式,不允许以除该指针的所有其他方式访问该指针指向的对象。只有 C99 增加了新的类型限定符 restrict。 |
变量
由上面所介绍的,基本数据类型,对应的有下列基本变量类型:
变量类型 | 描述 |
---|---|
bool | 存储值 true 或 false。 |
char | 通常是一个字符(八位)。这是一个整数类型。 |
int | 对机器而言,整数的最自然的大小。 |
float | 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。 |
double | 双精度浮点值。双精度是1位符号,11位指数,52位小数。 |
void | 表示类型的缺失。 |
wchar_t | 宽字符类型。 |
变量定义
变量定义是告诉编译器在何处创建变量的存储,以及如何创建变量的存储:
type variable_list;
而对于不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。
变量声明
变量声明向编译器保证变量以给定的类型和名称存在。当使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的)。可以使用 extern关键字在任何地方声明一个变量。虽然可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。
extern int a //声明a变量,不是定义,不给a变量分配内存空间
int a //声明a变量,也是定义a变量,分配a变量内存空间
int a=3 //声明并定义a变量,分配给a变量内存空间,同时给a变量初始化值为3
同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。
左值(Lvalues)和右值(Rvalues)
- 左值(lvalue)表达式:指向内存位置的表达式。左值可以出现在赋值号的左边或右边。
- 右值(rvalue)表达式:是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
比如变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。
变量作用域
作用域是程序的一个区域,一般来说有三个地方可以定义变量:
-
在函数(包括main( )函数)或一个代码块内部声明的变量,称为局部变量。
-
在函数参数的定义中声明的变量,称为形式参数。
-
在所有函数外部声明的变量,称为全局变量。