目录
一、数据类型
C++ 是一种静态类型的编程语言,其数据类型主要分为基本数据类型和用户自定义数据类型两种。
1、基本数据类型
C++ 的基本数据类型包括整型、浮点型、字符型和布尔型。其中,整型又可细分为有符号整型和无符号整型,浮点型又可细分为单精度浮点型和双精度浮点型。
1.1 整型
C++ 中的整型包括以下类型:
- short:短整型,占2个字节。
- int:整型,占4个字节。
- long:长整型,占4个或8个字节,根据编译器不同而定。
- long long:超长整型,占八个字节。
以上整型类型都有对应的无符号类型,例如 unsigned short 等。
1.2 浮点型
C++ 中的浮点型包括以下类型:
- float:单精度浮点型,占4个字节,可表示大约 6 位有效数字。
- double:双精度浮点型,占8个字节,可表示大约 15 位有效数字。
- long double:扩展精度浮点型,占12个或16个字节,根据编译器不同而定。
1.3 字符型
C++ 中的字符型一种是char,占1个字节。可以用于存储 ASCII 码字符。
还有一种是wchar_t,宽字符型,是一种扩展的存储方式,占2或4个字节,其定义是:
typedef short int wchar_t;
1.4 布尔型
C++ 中的布尔型只有 bool 一种,占1个字节,用于存储逻辑值,true 表示真,false 表示假。
2、用户自定义数据类型
C++ 中的用户自定义数据类型也称为复合数据类型,主要包括以下几种:
- 数组:表示同一类型的多个元素的集合。
- 结构体(struct):表示多个不同数据类型的变量的集合。
- 枚举类型(enum):表示一组命名的整数常量。
- 指针(pointer):表示一个内存地址,可以指向其他变量或数据。
- 类(class):一种更为复杂的数据类型,可以封装数据和方法,实现面向对象编程的特性。
3、typedef 声明
typedef 声明用于为现有类型定义新的别名。其语法如下:
typedef <existing_type> <new_name>;
其中,existing_type
是已经存在的类型,而 new_name
是为该类型定义的新的别名。
例如,下面的语句将 int
类型定义为 my_int
的别名:
typedef int my_int;
这意味着 my_int
和 int
是完全相同的类型,可以互换使用。这个别名可以方便地在程序中使用,特别是当需要多次使用相同类型时。
除了为基本类型定义别名之外,typedef 也可以用于为结构体、联合体或指针类型定义别名。例如,下面的语句将结构体 student
定义为 my_student
的别名:
typedef struct {
char name[50];
int age;
float gpa;
} student;
typedef student my_student;
现在,my_student
和 student
是完全相同的类型,可以互换使用。
4、枚举类型
枚举类型(Enumeration Type)是一种用户自定义的数据类型,用于定义具有离散值的常量集合。枚举类型可以简化程序中使用常量的方式,提高程序的可读性和可维护性。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum <enum_name> {
<enumerator1> = <value1>,
<enumerator2> = <value2>,
...
};
需要注意的是,枚举类型的值可以显式地指定整数值,也可以忽略赋值,没有指定值的情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。
二、变量
2.1、定义
变量是程序中用于存储数据的一种方式,其定义方式为:数据类型 变量名;例如,int num; 定义了一个整型变量 num。
例如,以下是一些C++变量的定义和初始化:
int age = 18;
float pi = 3.14;
double salary = 8000.50;
char grade = 'A';
bool isMale = true;
2.2、变量的命名规则:
- 变量名必须以字母或下划线字符开头。
- 变量名不能包含空格或特殊字符,如@、#、$、%等。
- 变量名只能包含字母、数字和下划线字符。
- 变量名不能是C++关键字和保留字,如if、while、int等。
- 变量名最好能够反映变量所代表的含义,以便于代码阅读和维护。尽量不要用缩写。
2.4、变量的作用域
变量的作用域指的是变量在程序中可见和可访问的范围。C++中变量作用域,包括以下几种:
- 全局作用域:在程序中定义的全局变量具有全局作用域,即它们可以在程序的任何位置访问。全局变量通常定义在函数之外。
- 局部作用域:在函数或代码块中定义的变量具有局部作用域,即它们只能在定义它们的函数或代码块内访问。局部变量的作用域从变量定义的位置开始,到包含变量定义的代码块结束。
- 命名空间作用域:C++ 中的命名空间提供了一种将全局变量和函数封装到命名空间中的方式。在命名空间中定义的变量具有命名空间作用域,即它们只能在命名空间中访问。
- 类作用域:在类中定义的成员变量和成员函数具有类作用域,即它们只能通过类对象访问。类作用域也包括在类中定义的静态成员变量和静态成员函数。
- 以下一个实例,展示了不同作用域的变量的用法:
-
#include <iostream> using namespace std; int global_var = 10; // 全局变量 void func() { int local_var = 20; // 局部变量 cout << "local_var = " << local_var << endl; } namespace ns { int ns_var = 30; // 命名空间变量 } class MyClass { public: static int class_var; // 类变量 void member_func() { int member_var = 40; // 成员变量 cout << "member_var = " << member_var << endl; } }; int MyClass::class_var = 50; int main() { cout << "global_var = " << global_var << endl; func(); cout << "ns_var = " << ns::ns_var << endl; MyClass obj; obj.member_func(); cout << "class_var = " << MyClass::class_var << endl; return 0; }
三、常量
在 C++ 中还可以使用常量来存储固定的值。常量可以分为字面常量和符号常量两种。字面常量是指直接出现在程序中,符号常量则是提前定义好的不能改变值的变量。
定义常量
在 C++ 中,有两种简单的定义常量的方式:
- 使用 #define 预处理器。例如:
const double PI = 3.1415926; // 定义一个双精度浮点型常量 PI,值为 3.1415926
- 使用 const 关键字。例如:
#define MAX_NUM 100 // 定义一个整型常量 MAX_NUM,值为 100
常量的命名规则与变量相同,可以使用字母、数字和下划线,但必须以字母或下划线开头,不能以数字开头。C++ 常量可以用于各种表达式中,包括数学表达式、字符串表达式等。
需要注意的是,字面值常量和 #define 指令定义的常量没有类型,而 const 修饰符定义的常量有类型。另外,const 修饰符定义的常量是在编译时确定的,而 #define 指令定义的常量是在预处理时进行替换的。因此,建议优先使用 const 修饰符定义常量。
实例:
#include <iostream>
using namespace std;
const int num1 = 10; // 定义一个整型常量 num1,值为 10
const double PI = 3.1415926; // 定义一个双精度浮点型常量 PI,值为 3.1415926
#define MAX_NUM 100 // 定义一个整型常量 MAX_NUM,值为 100
int main()
{
int num2 = 20;
const int num3 = 30;
const int num4 = num1 + num3;
const double area = PI * num2 * num2;
cout << "num1 = " << num1 << endl;
cout << "num3 = " << num3 << endl;
cout << "num4 = " << num4 << endl;
cout << "area = " << area << endl;
cout << "MAX_NUM = " << MAX_NUM << endl;
return 0;
}
四、C++中的关键字
C++关键字是指在C++语言中具有特定含义和用途的单词,它们都是C++语言中预定义的标识符,不能用作变量名、函数名等标识符。以下是C++中的关键字:
关键字 | 描述 |
alignas | 指定内存对齐方式 |
alignof | 获取类型的内存对齐方式 |
and | 逻辑与操作 |
and_eq | 位与操作并赋值 |
asm | 嵌入汇编代码 |
auto | 自动变量声明 |
bitand | 位与操作 |
bitor | 位或操作 |
bool | 布尔类型 |
break | 循环中断 |
case | switch语句的一个选择 |
catch | 异常处理 |
char | 字符类型 |
char16_t | 16位字符类型 |
char32_t | 32位字符类型 |
class | 定义类 |
compl | 按位取反操作 |
const | 常量声明 |
constexpr | 常量表达式 |
const_cast | 类型转换 |
continue | 循环继续 |
decltype | 推导表达式的类型 |
default | switch语句的默认选项 |
delete | 删除对象 |
do | do-while循环 |
double | 双精度浮点类型 |
dynamic_cast | 动态类型转换 |
else | 条件语句 |
enum | 枚举类型 |
explicit | 显示类型转换 |
export | 用于导出函数和数据 |
extern | 外部变量和函数声明 |
false | 布尔假 |
float | 单精度浮点类型 |
for | 循环 |
friend | 友元 |
goto | 跳转语句 |
if | 条件语句 |
inline | 内联函数 |
int | 整型 |
long | 长整型 |
mutable | 可变对象 |
namespace | 命名空间 |
new | 动态分配内存 |
noexcept | 指明函数不会抛出异常 |
not | 逻辑非操作 |
not_eq | 位异或操作并赋值 |
nullptr | 空指针 |
operator | 定义运算符重载 |
or | 逻辑或操作 |
or_eq | 位或操作并赋值 |
private | 类的私有成员 |
protected | 类的保护成员 |
public | 类的公有成员 |
register | 寄存器变量声明 |