「C++系列」C++ 基本语法

文章目录

  • 一、C++ 基本语法
    • 1. **预处理指令**
    • 2. **数据类型**
    • 3. **变量和常量**
    • 4. **运算符**
    • 5. **控制流语句**
    • 6. **函数**
    • 7. **数组**
    • 8. **指针和引用**
    • 9. **结构体和类**
    • 10. **输入/输出**
    • 11. **异常处理**
    • 12. **命名空间**
  • 二、C++ 程序结构
    • 1. 程序流程结构
    • 2. 文件结构
    • 3. 编译预处理命令
    • 4. 命名空间
    • 5. 标准库
  • 三、C++ 标识符
    • 1. 标识符的命名规则
    • 2. 标识符的命名约定
  • 四、C++ 关键字
    • 1. 基本关键字
    • 2. 数据类型关键字
    • 3. 存储类型关键字
    • 4. 其他关键字
  • 五、相关链接

在这里插入图片描述

一、C++ 基本语法

C++ 是一种强大的编程语言,它支持多种编程范式,包括面向过程、面向对象和泛型编程。以下是 C++ 的一些基本语法元素:

1. 预处理指令

预处理指令以 # 开头,并在编译之前处理。例如:

#include <iostream>
#define PI 3.14159

2. 数据类型

C++ 支持多种数据类型,包括基本数据类型(如 int, float, double, char, bool)和复合数据类型(如数组、结构体、类、联合体等)。

3. 变量和常量

变量用于存储数据,其值可以在程序执行过程中改变。常量在程序执行期间其值不能被改变。

int x = 10; // 变量
const int y = 20; // 常量

4. 运算符

C++ 支持多种运算符,如算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符等。

int a = 5, b = 10;
int sum = a + b; // 使用算术运算符

5. 控制流语句

  • 条件语句if, else if, else
  • 循环语句for, while, do-while
  • 跳转语句break, continue, goto(虽然 goto 在现代编程中很少使用)
for (int i = 0; i < 10; i++) {// 循环体
}

6. 函数

函数是执行特定任务的代码块。在 C++ 中,你可以定义自己的函数,并在需要时调用它们。

int add(int a, int b) {return a + b;
}int main() {int sum = add(5, 3);std::cout << sum << std::endl;return 0;
}

7. 数组

数组是用于存储相同类型元素的固定大小的集合。

int arr[5] = {1, 2, 3, 4, 5};

8. 指针和引用

指针是一个变量,其值是一个内存地址。引用是变量的别名。

int x = 10;
int* ptr = &x; // ptr 是一个指向 x 的指针
int& ref = x; // ref 是 x 的引用

9. 结构体和类

结构体和类是 C++ 中用于创建用户定义数据类型的工具。结构体主要用于封装一组相关的变量(数据成员),而类则包含数据成员和成员函数(方法)。

struct Person {std::string name;int age;
};class MyClass {
public:void myFunction() {// ...}
};

10. 输入/输出

C++ 使用流对象(如 std::cinstd::cout)进行输入/输出操作。

int num;
std::cout << "Enter a number: ";
std::cin >> num;
std::cout << "You entered: " << num << std::endl;

11. 异常处理

C++ 支持异常处理机制,允许程序在发生错误时优雅地处理这些情况。

try {// 可能会抛出异常的代码
} catch (const std::exception& e) {// 处理异常的代码std::cerr << "Exception caught: " << e.what() << std::endl;
}

12. 命名空间

命名空间用于避免命名冲突,特别是在使用大型库时。例如,std 是 C++ 标准库的命名空间。

using namespace std; // 使用 std 命名空间中的所有名称

二、C++ 程序结构

C++程序结构通常涉及多个方面,包括基本的程序流程结构、文件结构以及编译预处理命令等。以下是对C++程序结构的详细解释:

1. 程序流程结构

C++支持三种基本的程序流程结构:

  1. 顺序结构:程序按照代码的书写顺序依次执行,不发生跳转。
  2. 选择结构:根据条件是否满足,有选择地执行相应的功能。常见的选择结构包括if语句、switch语句等。
    • if语句:用于执行满足条件的语句,可以是单行或多行结构,也可以进行嵌套使用。
    • switch语句:根据表达式的值,选择执行相应的case语句块。
  3. 循环结构:根据条件是否满足,循环多次执行某段代码。C++提供了三种主要的循环结构:
    • while循环:只要循环条件的结果为真,就执行循环语句。
    • do...while循环:先执行一次循环语句,再判断循环条件。
    • for循环:通过指定起始表达式、条件表达式和末尾循环体,控制循环的执行。

2. 文件结构

在C++中,一个项目通常至少划分为三个文件:

  1. 类定义文件(*.h文件):包含类的声明和可能的内联成员函数定义。这些文件通常使用头文件保护来防止多次包含同一个头文件导致的重复定义。
  2. 类实现文件(*.cpp文件):包含类成员函数的实现。这些文件实现类定义文件中声明的函数。
  3. 类的使用文件(*.cpp,主函数文件):程序的入口点(main函数)通常位于此文件中,以及其他使用类定义文件的代码。

3. 编译预处理命令

编译预处理命令在编译源程序之前对程序文本进行预处理,主要包括以下几个方面:

  • 文件包含指令:使用#include指令将另一个源文件嵌入到当前源文件中。这通常用于包含头文件。
  • 宏定义:使用#define定义常量或宏,使用#undef取消定义。在C++中,还可以使用内联函数来替代带参数的宏定义。
  • 条件编译:根据条件选择性地编译某段代码,常用的指令包括#if#else#elif#endif#ifdef#ifndef

4. 命名空间

C++使用命名空间来避免命名冲突,特别是在使用大型库时。例如,std是C++标准库的命名空间。使用using namespace std;语句可以在当前文件中使用std命名空间中的所有名称,而不需要每次都加上std::前缀。

5. 标准库

C++标准库提供了大量的类和函数,用于执行各种常见的任务,如输入/输出、字符串处理、容器和算法等。这些类和函数通常定义在不同的头文件中,如<iostream><string><vector>等。

综上所述,C++程序结构涵盖了程序流程结构、文件结构、编译预处理命令、命名空间和标准库等多个方面。掌握这些基础知识是编写高质量C++程序的关键。

三、C++ 标识符

在 C++ 中,标识符是用于标识变量、函数、类、对象、类型别名等实体的名称。标识符的命名有一些规则和最佳实践,以确保代码的可读性和可维护性。

1. 标识符的命名规则

  1. 必须以字母、下划线_或美元符号$开头:标识符的第一个字符不能是数字。
  2. 后续字符可以是字母、数字、下划线或美元符号:这意味着你可以使用字母、数字、下划线和美元符号来组合标识符的名称。
  3. 区分大小写:C++ 是大小写敏感的,因此 variableVariable 是两个不同的标识符。
  4. 不能是 C++ 关键字:你不能使用 C++ 的关键字(如 int, double, if, else 等)作为标识符。

2. 标识符的命名约定

除了上述规则外,还有一些常见的命名约定可以帮助你编写更易于理解的代码:

  1. 驼峰命名法(CamelCase):对于类名、结构体名、枚举名等类型名,通常使用大驼峰命名法(也称为 PascalCase),即每个单词的首字母都大写,如 MyClass, MyStruct, MyEnum。对于变量名和函数名,通常使用小驼峰命名法,即第一个单词的首字母小写,后续单词的首字母大写,如 myVariable, myFunction
  2. 下划线命名法(snake_case):有时也使用下划线分隔单词的方式命名变量和函数,如 my_variable, my_function。这种命名方式在 C++ 中不如驼峰命名法常见,但在某些项目或上下文中可能会使用。
  3. 前缀或后缀:在某些情况下,你可能希望使用特定的前缀或后缀来标识标识符的类型或用途。例如,可以使用 m_ 前缀来标识类的成员变量(如 m_myVariable),或使用 _t 后缀来标识类型别名(如 size_t)。然而,这种命名方式并不是强制性的,并且在使用时应谨慎,以避免过度使用或混淆。
  4. 避免使用特殊字符:尽管 C++ 允许在标识符中使用美元符号 $,但在实际编程中应尽量避免使用它,因为它可能导致与其他编程环境或工具的兼容性问题。
  5. 保持简洁和描述性:尽量使用简洁且描述性的名称来命名标识符。过长的名称会增加代码的复杂性,而过于简短的名称则可能导致难以理解。
  6. 遵循项目或团队的命名约定:在某些项目或团队中,可能有特定的命名约定需要遵循。确保你了解并遵循这些约定,以保持代码的一致性。

四、C++ 关键字

C++关键字是在C++编程语言中用于特定语法功能的预定义标识符。这些关键字具有特定的含义,并且不能用作变量名、函数名或其他标识符。以下是C++中一些关键字的分类和示例:

1. 基本关键字

这些是最常用的关键字,涵盖了变量类型、流程控制等方面。

  • 变量类型:
  • int
  • char
  • double
  • float
  • void
  • 流程控制:
  • if
  • else
  • while
  • for
  • do
  • break
  • continue
  • switch
  • case
  • default
  • return

2. 数据类型关键字

用于声明特定数据类型的关键字。

  • 数据类型关键字:
  • signed
  • unsigned
  • long
  • short
  • enum
  • struct
  • union
  • bool
  • true
  • false

3. 存储类型关键字

用于指定变量存储方式的关键字。

  • 存储类型关键字:
  • auto(自动类型推断)
  • extern(声明外部变量)
  • register(声明寄存器变量)
  • static(声明静态变量)

4. 其他关键字

这些关键字用于特定的语言特性或功能。

  • 其他关键字:
  • const(声明常量)
  • sizeof(计算数据类型长度)
  • volatile(提醒编译器变量可能随时改变)
  • new(分配动态内存)
  • delete(释放动态内存)
  • explicit(阻止隐式转换)
  • namespace(声明命名空间)
  • friend(声明类的友元)
  • mutable(类中的非静态和非常量数据成员可修改)
  • typeid(运行时类型信息)
  • trycatchthrow(异常处理)
  • inline(声明内联函数)
  • template(模板声明)
  • typename(模板编程中指定类型名)
  • static_assert(编译时断言)
  • noexcept(声明异常处理规则)
  • constexpr(声明编译时常量)
  • alignas(设置内存对齐方式)
  • decltype(类型推导)
  • reinterpret_cast(重新解释类型转换)
  • dynamic_cast(动态类型转换)
  • static_cast(静态类型转换)
  • const_cast(去除常量性)
  • goto(无条件跳转)
  • asm(内嵌汇编代码)

五、相关链接

  1. Visual Studio Code下载地址
  2. Sublime Text下载地址
  3. 「C++系列」C++简介、应用领域

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL之聚簇索引和非聚簇索引

1、什么是聚簇索引和非聚簇索引&#xff1f; 聚簇索引&#xff0c;通常也叫聚集索引。 非聚簇索引&#xff0c;指的是二级索引。 下面看一下它们的含义&#xff1a; 1.1、聚集索引选取规则 如果存在主键&#xff0c;主键索引就是聚集索引。如果不存在主键&#xff0c;将使…

【Lua】第二篇:打印函数和注释

文章目录 一. 打印函数二. 注释方式1. 单行注释2. 多行注释 一. 打印函数 Lua 程序是以 .lua 结尾的文件&#xff0c;创建一个的 Test.lua 的文件&#xff0c;使用 print 函数输出字符串"Hello World"&#xff1a; print(Hello World) 保存之后使用命令lua 文件名编…

Java | Leetcode Java题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead reverseList(head.next);head.next.next head;head.next null;return newHead;} }

SpringBoot学习04-[定制SpringMVC]

定制SpringMVC 定制SpringMvc的自动配置定制springmvc-configurePathMatch配置定制SpringMVC-拦截器Interceptor定制SpringMVC-CORS配置全局cors配置针对某个方法加跨域解决 WebMvcConfigurer原理定制SpringMVC-JSONJSON开发jackson的使用定制化json序列化和反序列化 JSON国际化…

CriticGPT: 用 GPT-4 找出 GPT-4 的错误

CriticGPT 是 OpenAI 发布的一个基于 GPT-4 的模型&#xff0c;它可以帮助我们人类 Review 并纠正 ChatGPT 在生成代码时的错误。使用 CriticGPT 审查代码时&#xff0c;有 60% 的概率生成的代码更好更正确。

最近写javaweb出现的一个小bug---前端利用 form 表单传多项数据,后端 Servlet 取出的各项数据均为空

目录&#xff1a; 一. 问题引入二 解决问题 一. 问题引入 近在写一个 java web 项目时&#xff0c;遇到一个让我头疼了晚上的问题&#xff1a;前端通过 post 提交的 form 表单数据可以传到后端&#xff0c;但当我从 Servlet 中通过 request.getParameter(“name”) 拿取各项数…

【小沐学AI】Python实现语音识别(faster-whisper-webui)

文章目录 1、简介1.1 whisper1.2 faster-whisper 2、安装3、测试结语 1、简介 1.1 whisper https://github.com/openai/whisper Whisper 是一种通用语音识别模型。它是在各种音频的大型数据集上训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音…

【JVM基础篇】垃圾回收

文章目录 垃圾回收常见内存管理方式手动回收&#xff1a;C内存管理自动回收(GC)&#xff1a;Java内存管理自动、手动回收优缺点 应用场景垃圾回收器需要对哪些部分内存进行回收&#xff1f;不需要垃圾回收器回收需要垃圾回收器回收 方法区的回收代码测试手动调用垃圾回收方法Sy…

Matlab|分时电价环境下用户负荷需求响应分析方法

主要内容 本程序复现《分时电价环境下用户负荷需求响应分析方法》文献中的方法&#xff0c;通过用户对不同时间下用电需求的自弹性和交叉弹性系数分析获得用户需求响应矩阵&#xff0c;进而利用该矩阵对用户在实行基于电价的需求侧管理后的负荷变化情况进行快速分析。 1.1…

ONLYOFFICE8.1版本桌面编辑器简单测评

ONLYOFFICE官网链接&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE介绍&#xff1a;https://www.onlyoffice.com/zh/office-suite.aspx OnlyOffice 是一款免费且开源的 Office 协作办公套件&#xff0c;支持桌面端和移动端等多平台&#xff0c;由一家领先的 IT 公…

【python】OpenCV—Aruco

文章目录 Detect ArucoGuess Aruco Type Detect Aruco 学习参考来自&#xff1a;OpenCV基础&#xff08;19&#xff09;使用 OpenCV 和 Python 检测 ArUco 标记 更多使用细节可以参考&#xff1a;【python】OpenCV—Color Correction 源码&#xff1a; 链接&#xff1a;http…

为什么IP地址会被列入黑名单?

您是否曾经历过网站访客数量骤减或电子邮件投递失败的困扰&#xff1f;这背后或许隐藏着一个常被忽略的原因&#xff1a;您的IP地址可能已经被列入了黑名单内。尽管您并没有进行任何违法的网络操作&#xff0c;但这个问题依然可能出现。那么&#xff0c;究竟黑名单是什么&#…

【VMware】VMware 开启的虚拟机无法联网的解决方案

目录 &#x1f30a;1. 问题说明 &#x1f30a;2. 解决方案 &#x1f30d;2.1 查看虚拟网络编辑器 &#x1f30d;2.2 设置 vmnet &#x1f30d;2.3 设置虚拟机网络 &#x1f30d;2.4 Xshell连接虚拟机 &#x1f30a;1. 问题说明 虚拟机 ping 其他网页显示失败,比如&#…

数据质量管理-时效性管理

前情提要 根据GB/T 36344-2018《信息技术 数据质量评价指标》的标准文档&#xff0c;当前数据质量评价指标框架中包含6评价指标&#xff0c;在实际的数据治理过程中&#xff0c;存在一个关联性指标。7个指标中存在4个定性指标&#xff0c;3个定量指标&#xff1b; 定性指标&am…

【旭日x3派】部署官方yolov5全流程

地平线旭日x3派部署yolov5--全流程 前言一、深度学习环境安装二、安装docker三、部署3.1、安装工具链镜像3.2、配置天工开物OpenExplorer工具包3.3、创建深度学习虚拟空间&#xff0c;安装依赖&#xff1a;3.4、下载yolov5项目源码并运行3.5、pytorch的pt模型文件转onnx3.6、最…

前端git约定式规范化提交-commitizen

当使用commitizen进行代码提交时&#xff0c;commitizen会提示你在提交代码时填写所必填的提交字段信息内容。 1、全局安装commitizen npm install -g commitizen4.2.4 2、安装并配置 cz-customizeable 插件 2.1 使用 npm 下载 cz-customizeable npm i cz-customizeable6.…

【论文复现】——基于LM优化的NDT点云配准算法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 1、论文概述 传统的正态分布变换配准算法处理初始位姿变换相…

办公软件WPS与Office的区别

临近计算机考试很多同学在纠结我是报wps好&#xff1f;还是ms office好&#xff1f;下面就来详细说说。 1、wps属于国内金山公司的办公软件&#xff0c;里面包含word、Excel和PPT。考试是2021年开始的&#xff01; 2、MS&#xff08;Microsoft 微软&#xff09; office属于美…

AI产品经理面试

把优秀当习惯把优秀当习惯肯定不是口头说说&#xff0c;那有什么判断标准吗&#xff1f; 当我做完一件事儿的时候&#xff0c;我会看它有没有突破我的舒适圈、能不能惊艳到我自己。这就是我的判断标准。 在自我介绍和经历介绍时&#xff0c;面试者应该注重以下几个方面&#xf…

核方法总结(四)——高斯过程回归学习笔记

一、定义 基于核方法的线性回归模型和传统线性回归一样&#xff0c;可以用未知数据进行预测&#xff0c;但不能确定 预测的可信度。在参考书第二章中可知&#xff0c;基于贝叶斯方法可以实现对未知数据依概率预测&#xff0c;进而可得到预测的可信度。这一方法中&#xff0c;通…