Contents

C++基础语法(一)

1 C++简介

C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装、抽象、继承、多态

标准的 C++ 由三个重要部分组成:

  • 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
  • C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
  • 标准模板库(STL),提供了大量的方法,用于操作数据结构等。

2 数据类型

基本内置类型

bool,char,int,float,double,void

类型修饰符

signed,unsigned,short,long

C++ 允许使用速记符号来声明无符号短整数无符号长整数。您可以不写 int,只写单词 unsigned、shortlong

typedef 声明

可以使用 typedef 为一个已有的类型取一个新的名字。

1
typedef int feet;

枚举类型

如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

1
2
3
4
enum 枚举名{ 
     标识符[=整型常数], 
... 
} 枚举变量;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。

1
2
3
4
5
enum color { red, green, blue } c;
c = blue;

// red默认为0,blue默认为6
enum color { red, green=5, blue };

变量声明

当使用多个文件且只在其中一个文件中定义变量时,可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。

1
2
3
4
5
#include <iostream>
using namespace std;
 
// 变量声明
extern float f;

3 变量作用域

作用域是程序的一个区域,一般来说有三个地方可以定义变量:

  • 在函数或一个代码块内部声明的变量,称为局部变量。
  • 在函数参数的定义中声明的变量,称为形式参数。
  • 在所有函数外部声明的变量,称为全局变量。

局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化。

4 常量

整数常量

前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long),可以大写也可以小写,U和L的顺序任意。

浮点常量

当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。带符号的指数是用 e 或 E 引入的。

1
2
3
4
314159E-5L    // 合法的 
510E          // 非法的:不完整的指数
210f          // 非法的:没有小数或指数
.e55          // 非法的:缺少整数或分数

字符串常量

可以使用 “\” 做分隔符,把一个很长的字符串常量进行分行。

定义常量

使用 #define 预处理器定义常量:

1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
#define NEWLINE '\n'

int main()
{
   cout << NEWLINE;
   return 0;
}

使用 const 前缀声明指定类型的常量:

1
2
3
4
5
6
int main()
{
   const char NEWLINE = '\n';
   cout << NEWLINE;
   return 0;
}

注意:尽量把常量定义为大写字母形式。

5 存储类

static 存储类

使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。

static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。

extern 存储类

当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。

mutable 存储类

thread_local 存储类