当前位置: 首页 > news >正文

C++入门小结

C++命名空间总结

C++ 中的命名空间(Namespace)是一种组织代码的方式,用于避免全局命名冲突。在同一个命名空间中,可以有相同名称的变量、函数和类,但它们彼此互不影响。下面是对 C++ 命名空间的一些总结:

  1. 定义命名空间:使用 namespace 关键字来定义一个命名空间。命名空间可以嵌套使用,也可以不带名称(匿名命名空间)。
    namespace myNamespace {int value;void function() {// ...}
    }namespace anotherNamespace = myNamespace; // 别名
    namespace { // 匿名命名空间int hiddenValue;
    }
    

  2. 访问命名空间中的成员:要访问命名空间中的成员,需要在成员前面加上命名空间的名称。可以使用 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++ 输入和输出的一些总结:

  1. 标准输入流 cin

    • cin 是 C++ 中的标准输入流,用于从键盘或其他输入源读取数据。
    • 可以使用 >> 运算符进行数据提取,例如:int number; cin >> number;
    • 还可以使用 getline() 函数读取一行文本,例如:string line; getline(cin, line);
  2. 标准输出流 cout

    • cout 是 C++ 中的标准输出流,用于向屏幕或其他输出目标打印数据。
    • 可以使用 << 运算符进行数据插入,例如:cout << "The number is: " << number;
    • 可以在 cout 流中使用格式化输出,例如:cout << setw(10) << number; 设置输出宽度为10。
  3. 文件输入流 ifstream

    • ifstream 是用于从文件中读取数据的输入流类。
    • 需要包含 <fstream> 头文件。
    • 示例:ifstream file("data.txt"); file >> number;
  4. 文件输出流 ofstream

    • ofstream 是用于向文件中写入数据的输出流类。
    • 需要包含 <fstream> 头文件。
    • 示例:ofstream file("data.txt"); file << "The number is: " << number;
  5. 异常处理:

    • 在进行文件操作时,可能会遇到异常,如文件未找到或权限问题。
    • 使用 try 和 catch 块来处理这些异常,例如:try { file.open("data.txt"); } catch (exception& e) { cerr << "Error: " << e.what(); }
  6. 格式化输出:

    • 使用 iostream 头文件中的 setw()setprecision()setfill() 等函数来格式化输出。
    • 例如:cout << setw(10) << setprecision(2) << fixed << number;
  7. 缓冲区管理:

    • C++ 的流对象具有内部缓冲区,用于临时存储数据。
    • 可以通过 flush() 函数强制刷新缓冲区,将数据立即输出到屏幕或文件。
  8. 操作符重载:

    • 可以为自定义类型重载 << 和 >> 操作符,以便能够像处理内置类型一样处理这些类型的输出和输入。
  9. 序列化:

    • 流支持序列化,这意味着可以将对象的状态写入流中,然后从流中读取对象的状态。
  10. 命名空间 std

    • C++ 标准库中的流类和函数位于 std 命名空间中。
    • 使用时需要指定命名空间,例如:std::cinstd::cout

总结来说,C++ 的输入和输出操作是通过流类来实现的,这些流类提供了简单易用的接口来处理数据的不同来源和目标。通过掌握这些基础概念和工具,可以有效地进行程序的输入和输出操作。

C++缺省参数总结

C++ 函数可以定义缺省参数,这意味着如果调用函数时没有提供相应的参数值,将会使用预定义的默认值。以下是对 C++ 缺省参数的一些总结:

  1. 定义缺省参数:
    • 在函数声明中,可以为函数的参数指定默认值。
    • 默认参数必须从右向左定义,即先无默认值的参数,然后是有默认值的参数。
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++引用总结

  1. 引用的概念:

    • 引用是一个别名,或者说是另一个变量的名字。
    • 一旦一个变量被引用,它就不能被重新绑定到另一个变量。
    • 引用必须在使用之前被初始化,并且一旦初始化,就不能被改变。
  2. 声明引用:

    • 声明引用时,使用 & 操作符跟随变量类型和引用名称。
    • 例如:int x = 10; int &ref = x;
  3. 引用作为函数参数:

    • 引用可以作为函数的参数传递,这样做可以避免函数调用时的值复制,从而提高效率。
    • 在函数内部,引用参数可以被直接修改,这些修改会反映到原始变量上
      void increment(int &value) {value++;
      }int main() {int num = 1;increment(num);cout << num << endl; // 输出 2return 0;
      }
      
  1. 引用的特点:

    • 引用相当于一个变量的别名,因此对引用的操作就是对它所指向的变量的操作。
    • 引用不能是野值(即未经初始化的值),必须在声明时或者在之后被赋予一个有效的内存地址。
    • 引用不能被重新赋值给另一个变量,也不能被解引用。
  2. 引用的解引用:

    • 可以使用 * 操作符来解引用一个引用,但这样做通常没有意义,因为引用本身就是指向另一个变量的指针。
  3. 引用的用途:

    • 引用通常用于函数参数、返回值以及作为函数的局部变量,以提高性能和代码的可读性。
    • 引用也可以用于数组和对象的成员,以便直接访问其成员。
  4. 引用的错误:

    • 如果引用一个未初始化的变量,将导致未定义行为。
    • 试图将引用赋值给另一个变量将导致编译错误。

总结来说,C++ 引用是一种强大的特性,它允许程序员直接操作内存中的数据,而不需要使用指针。引用在函数调用和数据传递中非常有用,但需要注意它们的初始化和唯一性。

相关文章:

C++入门小结

C命名空间总结 C 中的命名空间&#xff08;Namespace&#xff09;是一种组织代码的方式&#xff0c;用于避免全局命名冲突。在同一个命名空间中&#xff0c;可以有相同名称的变量、函数和类&#xff0c;但它们彼此互不影响。下面是对 C 命名空间的一些总结&#xff1a; 定义命…...

Java 开发实例:Spring Boot+AOP+注解+Redis防重复提交(防抖)

文章目录 1. 环境准备2. 引入依赖3. 配置Redis4. 创建防重复提交注解5. 实现AOP切面6. 创建示例Controller7. 测试8. 进一步优化8.1 自定义异常处理8.2 提升Redis的健壮性 9. 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨…...

使用difflib实现文件差异比较用html显示

1.默认方式&#xff0c;其中加入文本过长&#xff0c;需要换行&#xff0c;因此做 contenthtml_output.replace(</style>,table.diff td {word-wrap: break-word;white-space: pre-wrap;max-width: 100%;}</style>)&#xff0c;添加换行操作 ps&#xff1a;当前te…...

【文末附gpt升级秘笈】AI热潮降温与AGI场景普及的局限性

AI热潮降温与AGI场景普及的局限性 摘要&#xff1a; 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI热一度席卷全球&#xff0c;引发了广泛的关注和讨论。然而&#xff0c;近期一些学者和行业专家对AI的发展前景提出了质疑&#xff0c;认为AI热潮将逐渐…...

Vue待学习

整个渲染过程了解 Vue实例&#xff1f;Vue模板&#xff1f;渲染函数render&#xff08;&#xff09;&#xff1f;虚拟DOM VNode?模板编译器&#xff1f;diff算法 CSS相关 CSS高级学习&#xff1f;过渡&#xff1f; 待熟悉掌握 Vue-router?VueX&#xff1f;Vue-Cli、Webpack和…...

TOP150-LC88

/*给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。注意&#xff1a;最终&#xff0c;合并后数组不…...

使用Python和TCN进行时间序列预测:一个完整的实战示例

使用Python和TCN进行时间序列预测&#xff1a;一个完整的实战示例 时间卷积网络&#xff08;TCN&#xff09;已被证明在处理序列数据方面表现出色&#xff0c;尤其是在需要捕获长期依赖关系的任务中。在本文中&#xff0c;我们将通过一个简单的例子&#xff0c;展示如何使用Py…...

如何用R语言ggplot2画高水平期刊散点图

文章目录 前言一、数据集二、ggplot2画图1、全部代码2、细节拆分1&#xff09;导包2&#xff09;创建图形对象3&#xff09;主题设置4&#xff09;轴设置5&#xff09;图例设置6&#xff09;散点颜色7&#xff09;保存图片 前言 一、数据集 数据下载链接见文章顶部 处理前的数据…...

Python基于 Jupyter Notebook 的图形可视化工具库之ipysigma使用详解

概要 在数据科学和网络分析中,图(Graph)结构是一种常用的数据结构,用于表示实体及其关系。为了方便图数据的可视化和交互操作,ipysigma 提供了一个基于 Jupyter Notebook 的图形可视化工具。通过 ipysigma,用户可以在 Jupyter Notebook 中创建、编辑和展示图结构,方便进…...

四叉树和KD树

1. 简介 四叉树和KD树都是用于空间数据索引和检索的树状数据结构。它们通过将空间递归地划分为更小的区域&#xff0c;并存储每个区域内的点&#xff0c;来实现快速搜索和范围查询。 2. 四叉树 2.1 定义 四叉树是一种树状数据结构&#xff0c;它将二维空间递归地划分为四个…...

C语言中结构体使用.与->访问成员变量的区别

文章目录 前言点运算符&#xff08;.&#xff09;箭头运算符&#xff08;->&#xff09;总结 前言 在C语言中&#xff0c;. 和 -> 都是用来访问结构体成员的运算符&#xff0c;但它们的使用场景和含义有所不同。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…...

计算机二级Access选择题考点

在Access中&#xff0c;若要使用一个字段保存多个图像、图表、文档等文件&#xff0c;应该设置的数据类型是附件。在“销售表"中有字段:单价、数量、折扣和金额。其中&#xff0c;金额单价x数量x折扣&#xff0c;在建表时应将字段"金额"的数据类型定义为计算。若…...

人工智能历史与现状

1 人工智能历史与现状 1.1 人工智能的概念和起源 1.1.1 人工智能的概念 人工智能 (Artificial Intelligence ,AI)是一门研究如何使计算机 能够模拟人类智能行为的科学和技术,目标在于开发能够感知、理解、 学习、推理、决策和解决问题的智能机器。人工智能的概念主要包含 以…...

【git使用一】windows下git下载、安装和卸载

目录 &#xff08;1&#xff09;下载安装包 &#xff08;2&#xff09;安装git &#xff08;3&#xff09;安装验证 &#xff08;4&#xff09;卸载git &#xff08;1&#xff09;下载安装包 官网下载地址&#xff1a;Git 国内镜像下载地址&#xff1a;CNPM Binaries Mir…...

JVM 类加载器的工作原理

JVM 类加载器的工作原理 类加载器&#xff08;ClassLoader&#xff09;是一个用于加载类文件的子系统&#xff0c;负责将字节码文件&#xff08;.class 文件&#xff09;加载到 JVM 中。Java 类加载器允许 Java 应用程序在运行时动态地加载、链接和初始化类。 2. 类加载器的工…...

ARM Cortex-M4 CPU指令大全:作用、原理与实例

引言 在计算机系统中&#xff0c;CPU&#xff08;中央处理器&#xff09;是执行各种指令的核心部件。ARM Cortex-M4是广泛应用于嵌入式系统中的一款处理器&#xff0c;其指令集架构&#xff08;ISA&#xff09;基于ARMv7-M。本文将介绍ARM Cortex-M4处理器中的常见指令&#x…...

Mysql学习(九)——存储引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 七、存储引擎7.1 MySQL体系结构7.2 存储引擎简介7.3 存储引擎特点7.4 存储引擎选择7.5 总结 七、存储引擎 7.1 MySQL体系结构 连接层&#xff1a;最上层是一些客户…...

TFT屏幕波形显示

REVIEW 关于TFT显示屏&#xff0c;之前已经做过彩条显示&#xff1a; TFT显示屏驱动_tft驱动-CSDN博客 关于ROM IP核&#xff0c;以及coe文件生成&#xff1a; FPGA寄存器 Vivado IP核_fpga寄存器资源-CSDN博客 1. TFT屏幕ROM显示正弦波 ①生成coe文件 %% sin-cos wave dat…...

服务器无法远程桌面连接不上的问题排查与解决方案

一、问题概述 当尝试使用远程桌面协议&#xff08;RDP&#xff09;连接至服务器时&#xff0c;如果连接失败&#xff0c;这通常意味着存在一些配置问题、网络问题或服务器本身的问题。此类问题对于管理员而言&#xff0c;需要系统地进行排查和解决。 二、排查步骤 1. 检查网…...

JAVA面试题整理——内存溢出与内存泄露的区别与联系

内存溢出与内存泄露的区别与联系 在前面jvm学习整理的时候其实用过一个简单的例子了解过内存溢出&#xff0c;在jvm内存模型章节下&#xff0c;大家有兴趣的可以去看看&#xff1a;JVM初学 GC_knowwait的博客-CSDN博客 内存溢出 内存溢出&#xff08;out of memory&#xff09…...

L50--- 104. 二叉树的最大深度(深搜)---Java版

1.题目描述 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 2.思路 这个二叉树的结构如下&#xff1a; 根节点 1 左子节点 2 右子节点 3 左子节点 4 计算过程 从根节点 1 开始计算&#xff1a; 计算左子树的最大深度&#xff1a; 根节点 2&#xf…...

Linux 中 “ 磁盘、进程和内存 ” 的管理

在linux虚拟机中也有磁盘、进程、内存的存在。第一步了解一下磁盘 一、磁盘管理 &#xff08;1.1&#xff09;磁盘了解 track&#xff08; 磁道 &#xff09; &#xff1a;就是磁盘上的同心圆&#xff0c;从外向里&#xff0c;依次排序1号&#xff0c;2号磁盘........等等。…...

test_pipeline

test_pipeline 是一个测试管道&#xff08;test pipeline&#xff09;的定义。 在计算机视觉任务中&#xff0c;通常需要对输入图像进行一系列的预处理操作&#xff0c;以便将其适配到模型的输入要求或提高模型的性能。测试管道就是用于定义这些预处理操作的一系列步骤。 在给…...

使用甲骨文云arm服务器安装宝塔时nginx无法卸载

使用甲骨文云arm服务器安装宝塔 其他环境都能安装上 唯独nginx安装完不运行 卸载了几次以后还无法卸载了. 修复 重启都不行. 差点就重建主机了. 最后靠下面的命令 就卸载掉了 然后重装就把nginx安装好了 mv /www/server/nginx/sbin/nginx /tmp/nginx_back mv /etc/in…...

C++青少年简明教程:C++的指针入门

C青少年简明教程&#xff1a;C的指针入门 说到指针&#xff0c;就不可能脱离开内存。了解C的指针对于初学者来说可能有些复杂&#xff0c;我们可以试着以一种简单、形象且易于理解的方式来解释&#xff1a; 首先&#xff0c;我们可以将计算机内存想象成一个巨大的有许多格子的…...

Apache Doris 基础 -- 数据表设计(分层存储)

1、应用场景 未来一个重要的用例是类似于ES日志存储&#xff0c;其中日志场景中的数据是根据日期分割的。许多数据都是查询不频繁的冷数据&#xff0c;因此需要降低此类数据的存储成本。考虑到节约成本: 来自不同厂商的常规云磁盘的定价比对象存储更昂贵。Doris 集群实际在线…...

使用Spring Boot设计一套BI系统

商业智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;系统是一种将数据转化为可操作信息&#xff0c;帮助企业进行决策支持的技术与工具的集合。随着大数据时代的到来&#xff0c;BI系统在企业中的应用变得越来越广泛。本文旨在探讨如何使用Spring Boot框…...

2024.6.12总结

今天是排毕业照的日子&#xff0c;拍照的时候并没有太过兴奋。后来受到主管说明天就能签offer了&#xff0c;这才喜极而泣。 自从得知自己面试通过后&#xff0c;我是非常高兴&#xff0c;开始幻想着今后的生活。可是&#xff0c;后面在等offer的过程中&#xff0c;我是无比的…...

1027 - 求任意三位数各个数位上数字的和

问题描述 对于一个任意的三位自然数 x &#xff0c;编程计算其各个数位上的数字之和 S 。 输入 输入一行&#xff0c;只有一个整数 x(100≤x≤999) 。 输出 输出只有一行&#xff0c;包括 1 个整数。 样例 输入 123 输出 6 以下是C实现的代码&#xff1a; 代码1 #…...

K8s 卷快照类

卷快照类 卷快照类 这个警告信息通常出现在使用 kubectl 删除 Kubernetes 集群资源时&#xff0c;如果尝试删除的是集群作用域&#xff08;cluster-scoped&#xff09;的资源&#xff0c;但指定了命名空间&#xff08;namespace&#xff09;&#xff0c;就会出现这个警告。 集…...