C++基础系列【2】C++基本语法

本文作为入门文档,简要介绍C++的非常基本的语法,后面章节会详细介绍C++的各个语法。

C++ 程序结构

C++程序的基本结构包括头文件、命名空间、类和函数等。

下面我们通过Hello,World来展示这些元素。

#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间,避免每次调用标准库时都要加std::前缀int main() {cout << "Hello, World!" << endl; // 输出Hello, World!到控制台return 0; // 返回0表示程序正常结束
}

详解

  1. 头文件#include <iostream> 指令包含了标准输入输出流库,通过它,程序可以使用 coutcin 等对象。
  2. 命名空间using namespace std; 使得在程序中可以直接使用 std 命名空间中的名字函数,而不需要每次都加上 std:: 前缀。这是为了方便,但在大型项目中,为了避免命名冲突,通常会显式地使用命名空间前缀。
  3. 主函数int main() 是程序的入口点,程序从这里开始执行。main 函数可以返回一个整数,通常返回 0 表示程序正常结束,返回非零值表示出现错误或异常情况。
  4. 输出语句cout << "Hello, World!" << endl; 使用 cout 对象向控制台输出字符串,endl 用于插入换行符并刷新输出缓冲区

类与对象

我们都知道,C++是一种支持面向对象的编程语言,类(class)是C++中最重要的概念之一,通过类可以定义对象的属性和行为。

示例代码

#include <iostream>
using namespace std;class Dog {
private:string name;int age;public:// 构造函数Dog(string dogName, int dogAge) : name(dogName), age(dogAge) {}// 成员函数,用于输出狗的信息void printInfo() {cout << "Dog name: " << name << ", Age: " << age << endl;}
};int main() {Dog myDog("Buddy", 5); // 创建一个Dog对象myDog.printInfo(); // 调用成员函数输出信息return 0;
}

详解

  1. 类定义class Dog 定义了一个名为 Dog 的类。
  2. 私有成员private: 部分定义了类的私有成员变量 nameage。这些变量只能在类内部访问和修改。
  3. 公有成员public: 部分定义了类的公有成员函数 printInfo() 和构造函数 Dog(string dogName, int dogAge)。构造函数用于初始化对象的状态,创建类对象时,会自动调用对应的构造函数。
  4. 对象创建Dog myDog("Buddy", 5); 创建了一个 Dog 类的对象 myDog,并使用构造函数初始化了它的 nameage 属性。
  5. 成员函数调用myDog.printInfo(); 调用了 myDog 对象的 printInfo() 成员函数,输出对象的信息。

函数与变量

函数封装代码块,它可以接收参数并返回结果。变量用于存储数据,可以是基本数据类型(如 intfloatchar 等),也可以是我们自定义的类型(如类)。

示例代码

#include <iostream>
using namespace std;// 函数声明
int add(int a, int b);int main() {int x = 10, y = 20;int sum = add(x, y); // 调用函数并存储结果cout << "Sum: " << sum << endl; // 输出结果return 0;
}// 函数定义
int add(int a, int b) {return a + b; // 返回两个整数的和
}

详解

  1. 函数声明:在 main 函数之前声明了 add 函数,这告诉编译器 add 函数的存在,以便在 main 函数中调用它。
  2. 变量声明与初始化:在 main 函数中声明并初始化了两个整数变量 xy
  3. 函数调用int sum = add(x, y); 调用了 add 函数,并将返回值赋给变量 sum
  4. 函数定义:在 main 函数之后定义了 add 函数,它接收两个整数参数并返回它们的和。

高级特性

C++ 提供了许多高级特性,如模板、异常处理、STL(标准库)等,这些特性极大地增强了 C++ 的灵活性。

通过模板,程序员可以编写与类型无关的代码。通过模板,可以创建泛型函数和类,这些函数和类可以处理任意类型的数据。

示例代码

#include <iostream>
using namespace std;// 泛型函数模板
template <typename T>
T max(T a, T b) {return (a > b) ? a : b;
}int main() {int intMax = max(10, 20); // 调用泛型函数模板处理整数double doubleMax = max(10.5, 20.3); // 调用泛型函数模板处理浮点数cout << "Int max: " << intMax << endl;cout << "Double max: " << doubleMax << endl;return 0;
}

异常处理:C++ 提供了异常处理机制,程序可以在运行时检测和处理错误情况。通过使用 trycatchthrow 关键字,可以操作异常相关能力。

STL(标准模板库):STL 是一组高效的、通用的模板类和函数,用于执行常见的编程任务,如sortmapfindset等。STL 提供了容器(如 vectormapset 等)、迭代器、算法和函数对象等组件。

代码规范

这里简单介绍几个C++的编码规范:

  1. 使用 const 关键字:在函数参数和返回值前使用 const 关键字可以表明这些参数或返回值不会被修改,有助于提高代码的可读性和安全性。
  2. 避免使用全局变量:全局变量会导致代码难以维护和调试。尽量使用局部变量或类的成员变量来封装数据。
  3. 使用 RAII(资源获取即初始化):RAII 是一种管理资源(如内存、文件句柄、套接字等)的技术。通过将对象的生命周期与资源的生命周期绑定在一起,可以确保资源在不再需要时自动释放(非常有用)。
  4. 编写清晰的代码:使用有意义的变量名、函数名和注释来提高代码的可读性。避免使用过于复杂的代码结构,尽量保持代码简洁直观。

作者介绍

  • 程序喵大人
  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者

C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,一条龙服务,已帮助多名学员获得offer!训练营介绍

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

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

相关文章

【C语言】球球大作战游戏

目录 1. 前期准备 2. 玩家操作 3. 生成地图 4. 敌人移动 5. 吃掉小球 6. 完整代码 1. 前期准备 游戏设定:小球的位置、小球的半径、以及小球的颜色 这里我们可以用一个结构体数组来存放这些要素,以方便初始化小球的信息。 struct Ball {int x;int y;float r;DWORD c…

图的基本术语——非八股文

我之前只看到了数据结构与算法的冰山一角&#xff0c;感觉这些术语只会让知识越来越难理解&#xff0c;现在来看&#xff0c;他们完美抽象一些概念和知识&#xff0c;非常重要。 本篇概念肯定总结不全&#xff0c;只有遇到的会写上&#xff0c;持续更新&#xff0c;之前文章已经…

oracle: 表分区>>范围分区,列表分区,散列分区/哈希分区,间隔分区,参考分区,组合分区,子分区/复合分区/组合分区

分区表 是将一个逻辑上的大表按照特定的规则划分为多个物理上的子表&#xff0c;这些子表称为分区。 分区可以基于不同的维度&#xff0c;如时间、数值范围、字符串值等&#xff0c;将数据分散存储在不同的分区 中&#xff0c;以提高数据管理的效率和查询性能&#xff0c;同时…

【单层神经网络】基于MXNet的线性回归实现(底层实现)

写在前面 刚开始先从普通的寻优算法开始&#xff0c;熟悉一下学习训练过程下面将使用梯度下降法寻优&#xff0c;但这大概只能是局部最优&#xff0c;它并不是一个十分优秀的寻优算法 整体流程 生成训练数据集&#xff08;实际工程中&#xff0c;需要从实际对象身上采集数据…

本地快速部署DeepSeek-R1模型——2025新年贺岁

一晃年初六了&#xff0c;春节长假余额马上归零了。今天下午在我的电脑上成功部署了DeepSeek-R1模型&#xff0c;抽个时间和大家简单分享一下过程&#xff1a; 概述 DeepSeek模型 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司&#xff0c;致力于开发高效、高性能…

C++11详解(一) -- 列表初始化,右值引用和移动语义

文章目录 1.列表初始化1.1 C98传统的{}1.2 C11中的{}1.3 C11中的std::initializer_list 2.右值引用和移动语义2.1左值和右值2.2左值引用和右值引用2.3 引用延长生命周期2.4左值和右值的参数匹配问题2.5右值引用和移动语义的使用场景2.5.1左值引用主要使用场景2.5.2移动构造和移…

在K8S中,pending状态一般由什么原因导致的?

在Kubernetes中&#xff0c;资源或Pod处于Pending状态可能有多种原因引起。以下是一些常见的原因和详细解释&#xff1a; 资源不足 概述&#xff1a;当集群中的资源不足以满足Pod或服务的需求时&#xff0c;它们可能会被至于Pending状态。这通常涉及到CPU、内存、存储或其他资…

手写MVVM框架-构建虚拟dom树

MVVM的核心之一就是虚拟dom树&#xff0c;我们这一章节就先构建一个虚拟dom树 首先我们需要创建一个VNode的类 // 当前类的位置是src/vnode/index.js export default class VNode{constructor(tag, // 标签名称&#xff08;英文大写&#xff09;ele, // 对应真实节点children,…

linux内核源代码中__init的作用?

在 Linux 内核源代码中&#xff0c;__init是一个特殊的宏&#xff0c;用于标记在内核初始化阶段使用的变量或函数。这个宏的作用是告诉内核编译器和链接器&#xff0c;被标记的变量或函数只在内核的初始化阶段使用&#xff0c;在系统启动完成后就不再需要了。因此&#xff0c;这…

【大数据技术】教程03:本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …

pytorch实现门控循环单元 (GRU)

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快&#xff0c;参数更少相对较慢&#xff0c;参数更多结构复杂度只有两个门&#xff08;更新门和重置门&#xff09;三个门&#xff08;输入门、遗忘门、输出门&#xff09;处理长时依赖一般适…

PAT甲级1032、sharing

题目 To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix. For example, loading and being are stored as showed in Figure …

最小生成树kruskal算法

文章目录 kruskal算法的思想模板 kruskal算法的思想 模板 #include <bits/stdc.h> #define lowbit(x) ((x)&(-x)) #define int long long #define endl \n #define PII pair<int,int> #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); using na…

为何在Kubernetes容器中以root身份运行存在风险?

作者&#xff1a;马辛瓦西奥内克&#xff08;Marcin Wasiucionek&#xff09; 引言 在Kubernetes安全领域&#xff0c;一个常见的建议是让容器以非root用户身份运行。但是&#xff0c;在容器中以root身份运行&#xff0c;实际会带来哪些安全隐患呢&#xff1f;在Docker镜像和…

js --- 获取时间戳

介绍 使用js获取当前时间戳 语法 Date.now()

ConcurrentHashMap线程安全:分段锁 到 synchronized + CAS

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解ConcurrentHashMap为什么线程安全&#xff1b;ConcurrentHashMap的具体细节还需要进一步研究 目录 ConcurrentHashMap介绍JDK7的分段锁实现JDK8的synchr…

Vue和Java使用AES加密传输

背景&#xff1a;Vue对参数进行加密&#xff0c;对响应进行解密。Java对参数进行解密&#xff0c;对响应进行解密。不拦截文件上传类请求、GET请求。 【1】前端配置 安装crypto npm install crypto-js编写加解密工具类encrypt.js import CryptoJS from crypto-jsconst KEY …

开发板目录 /usr/lib/fonts/ 中的字体文件 msyh.ttc 的介绍【微软雅黑(Microsoft YaHei)】

本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 问&#xff1a;运行 ls /usr/lib/fonts/ 发现有一个名叫 msyh.ttc 的字体文件&#xff0c;能介绍…

[ESP32:Vscode+PlatformIO]新建工程 常用配置与设置

2025-1-29 一、新建工程 选择一个要创建工程文件夹的地方&#xff0c;在空白处鼠标右键选择通过Code打开 打开Vscode&#xff0c;点击platformIO图标&#xff0c;选择PIO Home下的open&#xff0c;最后点击new project 按照下图进行设置 第一个是工程文件夹的名称 第二个是…

述评:如果抗拒特朗普的“普征关税”

题 记 美国总统特朗普宣布对美国三大贸易夥伴——中国、墨西哥和加拿大&#xff0c;分别征收10%、25%的关税。 他威胁说&#xff0c;如果这三个国家不解决他对非法移民和毒品走私的担忧&#xff0c;他就要征收进口税。 去年&#xff0c;中国、墨西哥和加拿大这三个国家&#…