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

news/2025/2/5 17:24:17/

本文作为入门文档,简要介绍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.ppmy.cn/news/1569564.html

相关文章

aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API

aws(学习笔记第二十七课) 使用aws API Gatewaylambda体验REST API 学习内容&#xff1a; 使用aws API Gatewaylambda 1. 使用aws API Gatewaylambda 作成概要 使用api gateway定义REST API&#xff0c;之后再接收到了http request之后&#xff0c;redirect到lambda进行执行。…

安全漏洞扫描与修复系统的高质量技术详解

安全漏洞扫描与修复系统的高质量技术详解 在当今的数字化时代&#xff0c;网络安全已成为企业和个人不可忽视的重要议题。安全漏洞扫描与修复系统作为保障网络安全的关键环节&#xff0c;其重要性日益凸显。本文将深入探讨安全漏洞扫描与修复系统的原理、流程、工具选择以及实…

经典游戏红色警戒2之英语

1. New construction options 部署新的建筑物&#xff08;一般是部署基地车时说的&#xff09;。 2. Loading 等待。&#xff08;正在进行&#xff09; 3. Construction complete 建筑完成。 4. On hold 等待。&#xff08;暂停进行&#xff09; 5. Canceled 取消。 6. Ca…

Guided Decoding (借助FSM,有限状态自动机)

VLLM对结构化输出的支持&#xff1a; vllm/docs/source/features/structured_outputs.md at main vllm-project/vllm GitHub VLLM对tool call的支持&#xff1a; vllm/docs/source/features/tool_calling.md at main vllm-project/vllm GitHub 以上指定输出格式&#xf…

TCP 丢包恢复策略:代价权衡与优化迷局

网络物理层丢包是一种需要偿还的债务&#xff0c;可以容忍低劣的传输质量&#xff0c;这为 UDP 类服务提供了空间&#xff0c;而对于 TCP 类服务&#xff0c;可以用另外两类代价来支付&#xff1a; 主机端采用轻率的 GBN 策略恢复丢包&#xff0c;节省 CPU 资源&#xff0c;但…

MySQL知识点总结(十七)

在从属服务器上执行RESET SLAVE命令时&#xff0c;会发生哪些操作&#xff1f; RESET SLAVE命令会断开从属服务器与主服务器的连接&#xff0c;以重置从属服务器&#xff0c;具体效果如下&#xff1a;清除 master.info和relay.log资料档案库删除所有中继日志启动新的中继日志文…

【C++】STL——vector的使用

目录 &#x1f495;1.vector介绍 &#x1f495;2.vector的基本用法 &#x1f495;3.vector功能的具体用法 &#xff08;讲解&#xff09; &#x1f495;4.vector——size&#xff0c;capacity函数的使用 &#xff08;简单略讲&#xff09; &#x1f495;5.resize&#xff…

【JavaEE】Spring(6):Mybatis(下)

一、Mybatis XML配置文件 Mybatis开发有两种方式&#xff1a; 注解XML 之前讲解了注解的方式&#xff0c;接下来学习XML的方式 1.1 配置数据库连接和Mybatis 直接在配置文件中配置即可&#xff1a; spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybatis_test?cha…