C++入门小结
C++命名空间总结
C++ 中的命名空间(Namespace)是一种组织代码的方式,用于避免全局命名冲突。在同一个命名空间中,可以有相同名称的变量、函数和类,但它们彼此互不影响。下面是对 C++ 命名空间的一些总结:
- 定义命名空间:使用
namespace关键字来定义一个命名空间。命名空间可以嵌套使用,也可以不带名称(匿名命名空间)。namespace myNamespace {int value;void function() {// ...} }namespace anotherNamespace = myNamespace; // 别名 namespace { // 匿名命名空间int hiddenValue; } - 访问命名空间中的成员:要访问命名空间中的成员,需要在成员前面加上命名空间的名称。可以使用
using关键字来简化访问。using namespace myNamespace; value = 10; function();// 或者 myNamespace::value = 10; myNamespace::function();3.命名空间的作用域:命名空间内的成员只在命名空间内部可见,不会影响到全局作用域。这有助于避免全局命名冲突,提高代码的可维护性
namespace myNamespace {int value;void function() {// ...} }int value = 10; // 错误,全局 value 与命名空间内的 value 冲突4.命名空间与头文件:在头文件中使用命名空间可以避免多个头文件包含时的冲突。在包含其他头文件时,可以使用命名空间来限制作用域
// my_function.h namespace myNamespace {int value;void function(); }// my_file.cpp #include "my_function.h"int myNamespace::value = 10; void myNamespace::function() {// ... }5.命名空间的别名:可以使用
using关键字为命名空间创建别名,从而简化访问using myNamespace::value; using myNamespace::function;6.命名空间与命名遮蔽:如果在命名空间内部定义了一个与全局变量或函数同名的成员,那么在命名空间内部,该全局成员会被遮蔽(隐藏)。
int value = 10;namespace myNamespace {int value = 20;void function() {value = 30; // 修改命名空间内的 value} }myNamespace::function(); // 调用命名空间内的 function总之,C++ 命名空间是一种非常有用的特性,可以帮助开发者组织代码、避免命名冲突,并提高代码的可维护性。
C++的输入输出
C++ 的输入和输出(I/O)操作通常涉及到使用输入流(如 cin)和输出流(如 cout)来处理数据的输入和输出。以下是对 C++ 输入和输出的一些总结:
-
标准输入流
cin:cin是 C++ 中的标准输入流,用于从键盘或其他输入源读取数据。- 可以使用
>>运算符进行数据提取,例如:int number; cin >> number;。 - 还可以使用
getline()函数读取一行文本,例如:string line; getline(cin, line);。
-
标准输出流
cout:cout是 C++ 中的标准输出流,用于向屏幕或其他输出目标打印数据。- 可以使用
<<运算符进行数据插入,例如:cout << "The number is: " << number;。 - 可以在
cout流中使用格式化输出,例如:cout << setw(10) << number;设置输出宽度为10。
-
文件输入流
ifstream:ifstream是用于从文件中读取数据的输入流类。- 需要包含
<fstream>头文件。 - 示例:
ifstream file("data.txt"); file >> number;。
-
文件输出流
ofstream:ofstream是用于向文件中写入数据的输出流类。- 需要包含
<fstream>头文件。 - 示例:
ofstream file("data.txt"); file << "The number is: " << number;。
-
异常处理:
- 在进行文件操作时,可能会遇到异常,如文件未找到或权限问题。
- 使用
try和catch块来处理这些异常,例如:try { file.open("data.txt"); } catch (exception& e) { cerr << "Error: " << e.what(); }。
-
格式化输出:
- 使用
iostream头文件中的setw(),setprecision(),setfill()等函数来格式化输出。 - 例如:
cout << setw(10) << setprecision(2) << fixed << number;。
- 使用
-
缓冲区管理:
- C++ 的流对象具有内部缓冲区,用于临时存储数据。
- 可以通过
flush()函数强制刷新缓冲区,将数据立即输出到屏幕或文件。
-
操作符重载:
- 可以为自定义类型重载
<<和>>操作符,以便能够像处理内置类型一样处理这些类型的输出和输入。
- 可以为自定义类型重载
-
序列化:
- 流支持序列化,这意味着可以将对象的状态写入流中,然后从流中读取对象的状态。
-
命名空间
std:- C++ 标准库中的流类和函数位于
std命名空间中。 - 使用时需要指定命名空间,例如:
std::cin,std::cout。
- C++ 标准库中的流类和函数位于
总结来说,C++ 的输入和输出操作是通过流类来实现的,这些流类提供了简单易用的接口来处理数据的不同来源和目标。通过掌握这些基础概念和工具,可以有效地进行程序的输入和输出操作。
C++缺省参数总结
C++ 函数可以定义缺省参数,这意味着如果调用函数时没有提供相应的参数值,将会使用预定义的默认值。以下是对 C++ 缺省参数的一些总结:
- 定义缺省参数:
- 在函数声明中,可以为函数的参数指定默认值。
- 默认参数必须从右向左定义,即先无默认值的参数,然后是有默认值的参数。
void func(int a, int b = 10, int c = 20);
2.调用函数时使用缺省参数:
- 当调用函数时,可以省略提供默认值的参数,只提供必要的非默认参数
func(1); // 调用时只提供了参数 a 的值,b 和 c 将使用它们的默认值 func(1, 2); // 调用时提供了 a 和 b 的值,c 将使用其默认值 func(1, 2, 3); // 所有参数都提供了值,因此没有使用任何缺省参数 -
缺省参数的优点:
- 使函数调用更加灵活,可以简化函数的调用方式。
- 可以减少函数重载的复杂性,通过提供默认参数来创建函数的不同版本。
-
缺省参数的注意事项:
- 如果有多个参数有默认值,调用函数时省略的参数必须是按照声明的顺序依次省略的。
- 如果函数有缺省参数,那么在调用时没有提供值的参数将使用它之前的最后一个非默认参数的值。
void func(int a, int b = 10, int c = 20) {cout << a << ", " << b << ", " << c << endl; }func(1, 2); // 调用时只提供了 a 和 b 的值,c 将使用其默认值,输出 "1, 2, 20" -
缺省参数与函数重载:
- 缺省参数可以用来实现函数重载,即创建具有不同默认参数的函数版本。
- 函数重载时,编译器会根据提供的参数值和函数的参数列表来确定调用哪个函数版本。
-
缺省参数与构造函数:
- C++ 中的构造函数也可以使用缺省参数,这使得创建对象时更加方便。
class MyClass { public:MyClass(int a, int b = 10) : a(a), b(b) {}// ... private:int a, b; };MyClass obj1(1); // 使用缺省参数创建对象 MyClass obj2(1, 20); // 显式提供所有参数值创建对象总结来说,C++ 中的缺省参数提供了一种灵活的方式来为函数定义默认值,使得函数调用更加简洁,同时也支持函数重载和构造函数的灵活使用。
- C++ 中的构造函数也可以使用缺省参数,这使得创建对象时更加方便。
C++引用总结
-
引用的概念:
- 引用是一个别名,或者说是另一个变量的名字。
- 一旦一个变量被引用,它就不能被重新绑定到另一个变量。
- 引用必须在使用之前被初始化,并且一旦初始化,就不能被改变。
-
声明引用:
- 声明引用时,使用
&操作符跟随变量类型和引用名称。 - 例如:
int x = 10; int &ref = x;
- 声明引用时,使用
-
引用作为函数参数:
- 引用可以作为函数的参数传递,这样做可以避免函数调用时的值复制,从而提高效率。
- 在函数内部,引用参数可以被直接修改,这些修改会反映到原始变量上
void increment(int &value) {value++; }int main() {int num = 1;increment(num);cout << num << endl; // 输出 2return 0; }
-
引用的特点:
- 引用相当于一个变量的别名,因此对引用的操作就是对它所指向的变量的操作。
- 引用不能是野值(即未经初始化的值),必须在声明时或者在之后被赋予一个有效的内存地址。
- 引用不能被重新赋值给另一个变量,也不能被解引用。
-
引用的解引用:
- 可以使用
*操作符来解引用一个引用,但这样做通常没有意义,因为引用本身就是指向另一个变量的指针。
- 可以使用
-
引用的用途:
- 引用通常用于函数参数、返回值以及作为函数的局部变量,以提高性能和代码的可读性。
- 引用也可以用于数组和对象的成员,以便直接访问其成员。
-
引用的错误:
- 如果引用一个未初始化的变量,将导致未定义行为。
- 试图将引用赋值给另一个变量将导致编译错误。
总结来说,C++ 引用是一种强大的特性,它允许程序员直接操作内存中的数据,而不需要使用指针。引用在函数调用和数据传递中非常有用,但需要注意它们的初始化和唯一性。
相关文章:
C++入门小结
C命名空间总结 C 中的命名空间(Namespace)是一种组织代码的方式,用于避免全局命名冲突。在同一个命名空间中,可以有相同名称的变量、函数和类,但它们彼此互不影响。下面是对 C 命名空间的一些总结: 定义命…...
Java 开发实例:Spring Boot+AOP+注解+Redis防重复提交(防抖)
文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 🎉欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨…...
使用difflib实现文件差异比较用html显示
1.默认方式,其中加入文本过长,需要换行,因此做 contenthtml_output.replace(</style>,table.diff td {word-wrap: break-word;white-space: pre-wrap;max-width: 100%;}</style>),添加换行操作 ps:当前te…...
【文末附gpt升级秘笈】AI热潮降温与AGI场景普及的局限性
AI热潮降温与AGI场景普及的局限性 摘要: 随着人工智能(AI)技术的迅猛发展,AI热一度席卷全球,引发了广泛的关注和讨论。然而,近期一些学者和行业专家对AI的发展前景提出了质疑,认为AI热潮将逐渐…...
Vue待学习
整个渲染过程了解 Vue实例?Vue模板?渲染函数render()?虚拟DOM VNode?模板编译器?diff算法 CSS相关 CSS高级学习?过渡? 待熟悉掌握 Vue-router?VueX?Vue-Cli、Webpack和…...
TOP150-LC88
/*给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不…...
使用Python和TCN进行时间序列预测:一个完整的实战示例
使用Python和TCN进行时间序列预测:一个完整的实战示例 时间卷积网络(TCN)已被证明在处理序列数据方面表现出色,尤其是在需要捕获长期依赖关系的任务中。在本文中,我们将通过一个简单的例子,展示如何使用Py…...
如何用R语言ggplot2画高水平期刊散点图
文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1)导包2)创建图形对象3)主题设置4)轴设置5)图例设置6)散点颜色7)保存图片 前言 一、数据集 数据下载链接见文章顶部 处理前的数据…...
Python基于 Jupyter Notebook 的图形可视化工具库之ipysigma使用详解
概要 在数据科学和网络分析中,图(Graph)结构是一种常用的数据结构,用于表示实体及其关系。为了方便图数据的可视化和交互操作,ipysigma 提供了一个基于 Jupyter Notebook 的图形可视化工具。通过 ipysigma,用户可以在 Jupyter Notebook 中创建、编辑和展示图结构,方便进…...
四叉树和KD树
1. 简介 四叉树和KD树都是用于空间数据索引和检索的树状数据结构。它们通过将空间递归地划分为更小的区域,并存储每个区域内的点,来实现快速搜索和范围查询。 2. 四叉树 2.1 定义 四叉树是一种树状数据结构,它将二维空间递归地划分为四个…...
C语言中结构体使用.与->访问成员变量的区别
文章目录 前言点运算符(.)箭头运算符(->)总结 前言 在C语言中,. 和 -> 都是用来访问结构体成员的运算符,但它们的使用场景和含义有所不同。 提示:以下是本篇文章正文内容,下面…...
计算机二级Access选择题考点
在Access中,若要使用一个字段保存多个图像、图表、文档等文件,应该设置的数据类型是附件。在“销售表"中有字段:单价、数量、折扣和金额。其中,金额单价x数量x折扣,在建表时应将字段"金额"的数据类型定义为计算。若…...
人工智能历史与现状
1 人工智能历史与现状 1.1 人工智能的概念和起源 1.1.1 人工智能的概念 人工智能 (Artificial Intelligence ,AI)是一门研究如何使计算机 能够模拟人类智能行为的科学和技术,目标在于开发能够感知、理解、 学习、推理、决策和解决问题的智能机器。人工智能的概念主要包含 以…...
【git使用一】windows下git下载、安装和卸载
目录 (1)下载安装包 (2)安装git (3)安装验证 (4)卸载git (1)下载安装包 官网下载地址:Git 国内镜像下载地址:CNPM Binaries Mir…...
JVM 类加载器的工作原理
JVM 类加载器的工作原理 类加载器(ClassLoader)是一个用于加载类文件的子系统,负责将字节码文件(.class 文件)加载到 JVM 中。Java 类加载器允许 Java 应用程序在运行时动态地加载、链接和初始化类。 2. 类加载器的工…...
ARM Cortex-M4 CPU指令大全:作用、原理与实例
引言 在计算机系统中,CPU(中央处理器)是执行各种指令的核心部件。ARM Cortex-M4是广泛应用于嵌入式系统中的一款处理器,其指令集架构(ISA)基于ARMv7-M。本文将介绍ARM Cortex-M4处理器中的常见指令&#x…...
Mysql学习(九)——存储引擎
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 七、存储引擎7.1 MySQL体系结构7.2 存储引擎简介7.3 存储引擎特点7.4 存储引擎选择7.5 总结 七、存储引擎 7.1 MySQL体系结构 连接层:最上层是一些客户…...
TFT屏幕波形显示
REVIEW 关于TFT显示屏,之前已经做过彩条显示: TFT显示屏驱动_tft驱动-CSDN博客 关于ROM IP核,以及coe文件生成: FPGA寄存器 Vivado IP核_fpga寄存器资源-CSDN博客 1. TFT屏幕ROM显示正弦波 ①生成coe文件 %% sin-cos wave dat…...
服务器无法远程桌面连接不上的问题排查与解决方案
一、问题概述 当尝试使用远程桌面协议(RDP)连接至服务器时,如果连接失败,这通常意味着存在一些配置问题、网络问题或服务器本身的问题。此类问题对于管理员而言,需要系统地进行排查和解决。 二、排查步骤 1. 检查网…...
JAVA面试题整理——内存溢出与内存泄露的区别与联系
内存溢出与内存泄露的区别与联系 在前面jvm学习整理的时候其实用过一个简单的例子了解过内存溢出,在jvm内存模型章节下,大家有兴趣的可以去看看:JVM初学 GC_knowwait的博客-CSDN博客 内存溢出 内存溢出(out of memory)…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
