概述:
C++ 是一种广泛使用的、通用的、面向对象的编程语言,它支持过程化编程、数据抽象、面向对象编程和泛型编程等多种编程范式。C++ 是在 C 语言的基础上发展起来的,它增加了许多新的特性,如类、继承、多态、模板、异常处理、命名空间等。
以下是 C++ 的一些基本特点:
| 特点 |
描述 |
| 面向对象 |
C++ 支持面向对象编程(OOP),通过类(class)和对象(object)的概念。 |
| 继承 |
一个类可以从另一个类继承,从而重用代码并扩展功能。 |
| 多态 |
通过虚函数(virtual functions)和继承,C++ 支持运行时多态,允许不同的对象对同一消息做出不同的响应。 |
| 模板 |
C++ 提供了模板(templates),允许程序员编写适用于多种数据类型的通用代码。 |
| 异常处理 |
C++ 引入了异常处理机制,用于处理程序运行时的错误情况。 |
| 命名空间 |
C++ 支持命名空间(namespaces),用于避免名称冲突和组织代码。 |
| 标准库 |
C++ 标准库提供了大量的函数和类,用于处理常见的编程任务,如字符串处理、文件操作、内存管理等。 |
| 与C语言兼容 |
C++ 是 C 语言的超集,这意味着任何有效的 C 程序也是有效的 C++ 程序(但可能不是最优的 C++ 程序)。 |
以下是一个简单的 C++ 程序示例,用于输出 “Hello, World!”:
1 2 3 4 5 6
| #include <iostream>
int main() { std::cout << "Hello, World!" << std::endl; return 0; }
|
在该示例中,#include <iostream> 指令告诉编译器包含标准输入输出流库。int main() 是程序的入口点。std::cout 是一个输出流对象,用于将文本发送到标准输出(通常是屏幕)。<< 是一个插入运算符,用于将数据插入到输出流中。std::endl 是一个操纵符,用于在输出中插入一个新行。最后,return 0; 表示程序正常退出。
对C的扩充:
下面是一个简化的表格,展示了C++在非面向对象方面对C语言的主要扩充点:
| 扩充点 |
C++特性 |
C语言对应/比较 |
| 类型安全性 |
强类型检查 |
弱类型检查,依赖程序员注意 |
| 输入输出流 |
iostream库 |
标准I/O库(如stdio.h) |
| 内存管理 |
new和delete |
malloc和free |
| 引用(Reference) |
变量别名 |
指针操作 |
| 函数重载 |
允许同名不同参数函数 |
不支持 |
| 缺省参数 |
允许函数参数有默认值 |
不支持 |
| 内联函数 |
提高函数调用效率 |
无直接对应 |
| 命名空间 |
组织代码,避免命名冲突 |
全局作用域,可能导致冲突 |
| 运算符重载 |
允许重载运算符 |
不支持 |
| 条件编译 |
#ifdef, #ifndef等 |
#if, #else, #endif |
| 宏定义 |
#define |
#define |
| 预处理撤销 |
#undef |
无直接对应 |
| 模板(Templates) |
泛型编程 |
无直接对应 |
| 异常处理 |
try, catch, throw |
无直接对应,使用错误码 |
C++的关键字是编程语言中预先保留的标识符,用于定义语言的结构和语法。在C++中,这些关键字不能被用作变量名、函数名或其他标识符的名称。以下是C++(不包括C++11新增的关键字)中的一部分主要关键字,按照不同的功能分类进行简述:
数据类型关键字:
| 基本数据类型 |
描述 |
| bool |
布尔类型,用于表示逻辑值(true或false) |
| char |
字符类型,用于存储字符值 |
| int |
整型,用于存储整数 |
| float、double、long double |
浮点型,用于存储小数 |
| signed、unsigned |
用于指定整数类型是有符号还是无符号的 |
| short、long |
用于指定整数类型的长度 |
| void |
|
| 复合数据类型 |
描述 |
| class |
用于定义类 |
| struct |
用于定义结构体 |
| union |
用于定义联合体 |
| enum |
用于定义枚举类型 |
控制语句关键字:
| 循环语句 |
描述 |
| for |
用于执行固定次数的循环 |
| while |
用于在条件为真时重复执行代码块 |
| do…while |
与while类似,但循环体至少会执行一次 |
| 条件语句 |
描述 |
| if |
用于根据条件执行不同的代码块 |
| else |
与if一起使用,用于指定条件为假时执行的代码块 |
| switch |
用于根据表达式的值选择不同的代码块执行 |
| case |
与switch一起使用,用于指定表达式可能的值 |
| default |
与switch一起使用,用于指定表达式不匹配任何case时执行的代码块 |
| 跳转语句 |
描述 |
| break |
用于跳出当前循环或switch语句 |
| continue |
用于跳过当前循环的剩余部分,直接进入下一次循环 |
| goto |
无条件跳转到指定的标签位置(在现代编程中很少使用) |
| return |
用于从函数中返回值并结束函数执行 |
存储类型关键字:
| 存储关键字 |
描述 |
| auto |
尽管在C++11中有更多用途,但在C++98/03中主要用于自动存储期变量的声明 |
| extern |
用于声明在其他文件中定义的变量或函数 |
| register |
建议编译器将变量存储在寄存器中(但现代编译器通常忽略此建议) |
| static |
用于声明静态变量或静态成员函数 |
其他关键字:
| 另外的常用关键字 |
描述 |
| sizeof |
用于计算数据类型或变量的大小(以字节为单位) |
| typedef |
用于为数据类型定义别名 |
| volatile |
用于修饰变量,表示该变量可能在程序外部被意外地改变(如多线程或硬件操作) |
| namespace |
用于定义命名空间,以避免命名冲突 |
| using |
用于在当前作用域中引入命名空间中的名称 |
| friend |
用于声明友元函数或友元类,它们可以访问类的私有和保护成员 |
| explicit |
用于防止类构造函数被用于隐式类型转换 |
| mutable |
用于修饰类的非静态成员变量,即使在const成员函数中也可以修改它 |
c++11新引入:
| 关键字 |
描述 |
alignas |
用于指定变量或类型的对齐要求 |
alignof |
用于获取变量或类型的对齐要求 |
char16_t |
16位字符类型 |
char32_t |
32位字符类型 |
constexpr |
声明编译时常量表达式 |
decltype |
用于类型推导,返回表达式的类型 |
final |
禁止类被继承,或禁止虚函数被重写 |
noexcept |
指定函数不会抛出异常 |
nullptr |
表示空指针常量 |
override |
检查子类虚函数是否重写了某个基类虚函数 |
static_assert |
在编译时进行断言 |
thread_local |
声明变量的线程局部存储期 |