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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

【大数据技术】教程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镜像和…

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

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

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

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

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

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

九. Redis 持久化-AOF(详细讲解说明,一个配置一个说明分析,步步讲解到位 2)

九. Redis 持久化-AOF(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位 2) 文章目录 九. Redis 持久化-AOF(详细讲解说明&#xff0c;一个配置一个说明分析&#xff0c;步步讲解到位 2)1. Redis 持久化 AOF 概述2. AOF 持久化流程3. AOF 的配置4. AOF 启…

基于Springboot框架的学术期刊遴选服务-项目演示

项目介绍 本课程演示的是一款 基于Javaweb的水果超市管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附…

新版231普通阿里滑块 自动化和逆向实现 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 补环境逆向 部分补环境 …

java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数

卸载好注册表,然后安装11g 每次在执行orderby的时候相当于是做了全排序,思考全排序的效率 会比较耗费系统的资源,因此选择在业务不太繁忙的时候进行 --给表添加注释 comment on table emp is 雇员表 --给列添加注释; comment on column emp.empno is 雇员工号;select empno,en…

泰山派Linux环境下自动烧录脚本(EMMC 2+16G)

脚本名字&#xff1a; download.sh 输入./download -h获取帮助信息 &#xff0c;其中各个IMG/TXT烧录的地址和路径都在前几行修改即可 #!/bin/bash# # DownLoad.sh 多镜像烧录脚本 # 版本&#xff1a;1.1 # 作者&#xff1a;zhangqi # 功能&#xff1a;通过参数选择烧录指定镜…

正大杯攻略|分层抽样+不等概率三阶段抽样

首先&#xff0c;先进行分层抽样&#xff0c;确定主城区和郊区的比例 然后对主城区分别进行不等概率三阶段抽样 第一阶段&#xff0c;使用PPS抽样&#xff0c;确定行政区&#xff08;根据分层抽样比例合理确定主城区和郊区行政区数量&#xff09; 第二阶段&#xff0c;使用分…

开源智慧园区管理系统对比其他十种管理软件的优势与应用前景分析

内容概要 在当今数字化快速发展的时代&#xff0c;园区管理软件的选择显得尤为重要。而开源智慧园区管理系统凭借其独特的优势&#xff0c;逐渐成为用户的新宠。与传统管理软件相比&#xff0c;它不仅灵活性高&#xff0c;而且具有更强的可定制性&#xff0c;让各类园区&#…