c++---------流类

  1. 格式化输入(cin的格式化)
    • 基本用法与控制符
      • 在C++中,std::cin用于从标准输入(通常是键盘)读取数据。它默认以空白字符(空格、制表符、换行符)为分隔符来读取不同的数据。例如,读取两个整数:
      #include <iostream>
      int main() {
        int num1, num2;
        std::cin >> num1 >> num2;
        std::cout << "两个数分别是: " << num1 << "和" << num2 << std::endl;
        return 0;
      }
      
      • 可以使用一些控制符来改变cin的行为。例如,std::hex用于以十六进制格式读取数据,std::oct用于以八进制格式读取数据。读取十六进制整数的示例:
      #include <iostream>
      int main() {
        int hex_num;
        std::cin >> std::hex >> hex_num;
        std::cout << "十六进制转换后的十进制数是: " << hex_num << std::endl;
        return 0;
      }
      
    • 输入验证与错误处理
      • 当输入的数据类型与期望不符时,cin会进入错误状态。可以通过cin.fail()来检查是否出现错误。例如,期望输入一个整数,但用户输入了一个字符:
      #include <iostream>
      int main() {
        int num;
        std::cin >> num;
        if (cin.fail()) {
          std::cerr << "输入错误,请输入一个整数" << std::endl;
          cin.clear(); 
          std::string discard;
          std::cin >> discard; 
        } else {
          std::cout << "输入的整数是: " << num << std::endl;
        }
        return 0;
      }
      
      在上述代码中,cin.clear()用于清除错误状态,std::string discard; std::cin >> discard;用于丢弃输入缓冲区中的错误数据。

在这里插入图片描述

  1. 格式化输出(cout的格式化)

    • 基本格式化控制符
      • std::cout是用于标准输出(通常是控制台)的对象。可以使用控制符来格式化输出。例如,std::setw()用于设置输出宽度,std::setfill()用于设置填充字符,std::fixedstd::scientific用于控制浮点数的输出格式。输出一个右对齐的整数示例:
      #include <iostream>
      #include <iomanip>
      int main() {
        int num = 123;
        std::cout << std::setw(6) << std::right << num << std::endl;
        return 0;
      }
      
    • 自定义输出格式(通过重载<<运算符)
      • 对于自定义的类,可以重载<<运算符来实现自定义的输出格式。例如,定义一个Point类并重载<<运算符:
      class Point {
      public:
        int x;
        int y;
        Point(int a = 0, int b = 0) : x(a), y(b) {}
      };
      std::ostream& operator<<(std::ostream& os, const Point& p) {
        os << "(" << p.x << ", " << p.y << ")";
        return os;
      }
      int main() {
        Point p(3, 4);
        std::cout << p << std::endl;
        return 0;
      }
      
  2. 数据文件(文件输入输出)

    • 文件写入(ofstream
      • std::ofstream用于将数据写入文件。可以指定文件名和打开模式(如ios::out用于输出,ios::app用于追加等)。例如,将一些文本写入文件:
      #include <iostream>
      #include <fstream>
      int main() {
        std::ofstream out_file("output.txt", ios::out);
        if (out_file) {
          out_file << "这是第一行" << std::endl;
          out_file << "这是第二行" << std::endl;
          out_file.close();
        } else {
          std::cerr << "无法打开文件进行写入" << std::endl;
        }
        return 0;
      }
      
    • 文件读取(ifstream
      • std::ifstream用于从文件中读取数据。例如,读取刚才写入文件中的内容:
      #include <iostream>
      #include <ifstream>
      int main() {
        std::ifstream in_file("output.txt");
        if (in_file) {
          std::string line;
          while (std::getline(in_file, line)) {
            std::cout << line << std::endl;
          }
          in_file.close();
        } else {
          std::cerr << "无法打开文件进行读取" << std::endl;
        }
        return 0;
      }
      
    • 二进制文件操作(fstream
      • 对于二进制文件,可以使用std::fstream进行读写操作。例如,将一个整数数组以二进制形式写入文件,然后再读取出来:
      #include <iostream>
      #include <fstream>
      int main() {
        int numbers[] = {1, 2, 3, 4, 5};
        // 写入二进制文件
        std::fstream bin_file("binary.bin", ios::out | ios::binary);
        if (bin_file) {
          bin_file.write(reinterpret_cast<char*>(numbers), sizeof(numbers));
          bin_file.close();
        } else {
          std::cerr << "无法打开二进制文件进行写入" << std::endl;
        }
        // 读取二进制文件
        int read_numbers[5];
        std::fstream bin_read_file("binary.bin", ios::in | ios::binary);
        if (bin_read_file) {
          bin_read_file.read(reinterpret_cast<char*>(read_numbers), sizeof(read_numbers));
          for (int i = 0; i < 5; ++i) {
            std::cout << read_numbers[i] << " ";
          }
          bin_read_file.close();
        } else {
          std::cerr << "无法打开二进制文件进行读取" << std::endl;
        }
        return 0;
      }
      
  3. 类层次(面向对象中的类继承层次结构)

    • 基本概念
      • 类层次结构是通过类的继承关系构建的。基类(父类)定义了一些通用的属性和行为,派生类(子类)继承基类并可以添加自己的特定属性和行为。例如,定义一个Shape基类和CircleRectangle派生类:
      class Shape {
      public:
        virtual double area() = 0;
      };
      class Circle : public Shape {
      public:
        double radius;
        Circle(double r) : radius(r) {}
        double area() override {
          return 3.14 * radius * radius;
        }
      };
      class Rectangle : public Shape {
      public:
        double width;
        double height;
        Rectangle(double w, double h) : width(w), height(h) {}
        double area() override {
          return width * height;
        }
      };
      
    • 多态性与虚函数
      • 多态性允许通过基类指针或引用调用派生类的函数。在上述例子中,Shape类中的area函数是虚函数,通过基类指针调用area函数时,会根据指针所指向的实际对象(CircleRectangle)来调用相应的area函数实现。例如:
      int main() {
        Shape* shape1 = new Circle(3);
        Shape* shape2 = new Rectangle(4, 5);
        std::cout << "圆的面积: " << shape1->area() << std::endl;
        std::cout << "矩形的面积: " << shape2->area() << std::endl;
        delete shape1;
        delete shape2;
        return 0;
      }
      
    • 继承中的访问控制(publicprivateprotected
      • 在继承关系中,public继承表示派生类继承基类的publicprotected成员,并且这些成员在派生类中的访问权限不变。private继承会将基类的publicprotected成员变为派生类的private成员。protected继承会将基类的public成员变为派生类的protected成员。例如:
      class Base {
      public:
        int public_member;
      protected:
        int protected_member;
      private:
        int private_member;
      };
      class PublicDerived : public Base {
      public:
        void accessMembers() {
          public_member = 1; 
          protected_member = 2; 
        }
      };
      class PrivateDerived : private Base {
      public:
        void accessMembers() {
          public_member = 3; 
          protected_member = 4; 
        }
      };
      
      PublicDerived类中,可以直接访问基类的publicprotected成员。而在PrivateDerived类中,虽然可以访问基类的publicprotected成员,但是这些成员在PrivateDerived类外部是不可访问的,因为它们被继承为private成员。
      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NIPS2014 | GAN: 生成对抗网络

Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…

MySQL 锁概述

1.锁的分类 根据不同的分类角度可将锁分为&#xff1a; 按是否共享分&#xff1a;S 锁、X 锁按粒度分&#xff1a;表级锁、行级锁、全局锁&#xff08;锁整个库&#xff09;、页锁&#xff08;锁数据页&#xff09;意向锁&#xff1a;意向 S 锁、意向 X 锁&#xff1a;都是表…

自然语言处理与知识图谱的融合与应用

目录 前言1. 知识图谱与自然语言处理的关系1.1 知识图谱的定义与特点1.2 自然语言处理的核心任务1.3 二者的互补性 2. NLP在知识图谱构建中的应用2.1 信息抽取2.1.1 实体识别2.1.2 关系抽取2.1.3 属性抽取 2.2 知识融合2.3 知识推理 3. NLP与知识图谱融合的实际应用3.1 智能问答…

模型工作流:自动化的模型内部三角面剔除

1. 关于自动减面 1.1 自动减面的重要性及现状 三维模型是游戏、三维家居设计、数字孪生、VR/AR等几乎所有三维软件的核心资产&#xff0c;模型的质量和性能从根本上决定了三维软件的画面效果和渲染性能。其中&#xff0c;模型减面工作是同时关乎质量和性能这两个要素的重要工…

大语言模型(LLM)中大数据的压缩存储及其重要性

在大型语言模型&#xff08;LLM&#xff09;中&#xff0c;KV Cache&#xff08;键值缓存&#xff09;的压缩方法及其重要性。 为什么要压缩KV Cache&#xff1f; 计算效率&#xff1a;在生成文本的过程中&#xff0c;每个生成的token都需要与之前所有的token的键值&#xff…

GitLab安装及使用

目录 一、安装 1.创建一个目录用来放rpm包 2.检查防火墙状态 3.安装下载好的rpm包 4.修改配置文件 5.重新加载配置 6.查看版本 7.查看服务器状态 8.重启服务器 9.输网址 二、GitLab的使用 1.创建空白项目 2.配置ssh 首先生成公钥&#xff1a; 查看公钥 把上面的…

从0开始在linux服务器上部署SpringBoot和Vue

目录 一、申请服务器的IP &#xff08;1&#xff09;阿里云申请IP &#xff08;2&#xff09;设置服务器的密码 &#xff08;3&#xff09;远程终端——MobaXterm 二、Docker &#xff08;1&#xff09;安装Docker &#xff08;2&#xff09;镜像加速 &#xff08;3&…

企业销售人员培训系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…

智能家居实训室中,STC单片机驱动的“互联网+”智能家居系统设计

一、引言 随着经济的快速发展&#xff0c;人们对家居环境的智能化、网络化需求日益增强&#xff0c;智能家居的研究也因此受到了国内外相关机构的广泛关注。STC单片机凭借其卓越的性能和广泛的应用领域&#xff0c;成为了智能家居系统设计的优选方案。作为一种先进的微控制器&…

替代传统FTP传输,镭速大数据传输系统实现安全高效数据流转!

信息技术的快速进步让大数据成为了企业决策的关键支撑&#xff0c;但同时也带来了巨大的挑战。企业在运营过程中产生的数据量急剧增加&#xff0c;这对数据传输的速度、安全性和效率提出了更高的要求。然而&#xff0c;传统的FTP传输方式在处理大规模数据时显得力不从心&#x…

渗透Vulnhub-Solidstate靶机

本篇文章旨在为网络安全渗透测试行业靶机教学。通过阅读本文&#xff0c;读者将能够对渗透Vulnhub系列Solidstate靶机有定的了解 一、信息收集阶段 靶机官网&#xff1a;https://www.vulnhub.com/entry/solidstate-1%2C261/ 因为靶机为本地部署虚拟机网段&#xff0c;查看dhcp…

前端下载后端文件流,文件可以下载,但是打不开,显示“文件已损坏”的问题分析与解决方案

目录 场景还原 相关代码开发者工具 - 网络请求记录 问题排查 定位改bug 总结 场景还原 我在前端使用axios接收后端xlsx表格文件流并下载&#xff0c;xlsx文件能够下载成功&#xff0c;但是打开却显示文件无法打开 相关代码 请求API封装:Content–Type以及responseType经核…

什么样的LabVIEW控制算自动控制?

自动控制是指系统通过预先设计的算法和逻辑&#xff0c;在无人工干预的情况下对被控对象的状态进行实时监测、决策和调整&#xff0c;达到预期目标的过程。LabVIEW作为一种图形化编程工具&#xff0c;非常适合开发自动控制系统。那么&#xff0c;什么样的LabVIEW控制算作“自动…

【机器学习】探索机器学习与人工智能:驱动未来创新的关键技术

探索机器学习与人工智能&#xff1a;驱动未来创新的关键技术 前言&#xff1a;人工智能的核心技术深度学习&#xff1a;自然语言处理&#xff08;NLP&#xff09;&#xff1a;计算机视觉&#xff1a; 机器学习与人工智能的驱动创新医疗健康领域金融行业智能制造与工业互联网智慧…

在 Vue3 项目中实现计时器组件的使用(Vite+Vue3+Node+npm+Element-plus,附测试代码)

一、概述 记录时间 [2024-12-26] 本文讲述如何在 Vue3 项目中使用计时器组件。具体包括开发环境的配置&#xff0c;ViteVue 项目的创建&#xff0c;Element Plus 插件的使用&#xff0c;以及计时器组件的创建和使用。 想要直接实现计时器组件&#xff0c;查看文章的第四部分。…

图神经网络_图嵌入_Struc2Vec

0 背景 之前的node embedding方式&#xff0c;都是基于近邻关系&#xff0c;但是有些节点没有近邻&#xff0c;也有结构相似性。如图中的u、v节点。 struc2vec算法适用于捕获结构相似性。 1 相似度&#xff08;距离&#xff09;计算 1.1 公式 f k ( u , v ) f k − 1 ( u …

JZ31 栈的压入、弹出序列

题目来源&#xff1a;栈的压入、弹出序列_牛客题霸_牛客网 题目&#xff1a;如下 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xf…

Android 蓝牙开发-传输数据

概述 传统蓝牙是通过建立REFCCOM sockect来进行通信的&#xff0c;类似于socket通信&#xff0c;一台设备需要开放服务器套接字并处于listen状态&#xff0c;而另一台设备使用服务器的MAC地址发起连接。连接建立后&#xff0c;服务器和客户端就都通过对BluetoothSocket进行读写…

Java圣诞树

目录 写在前面 技术需求 程序设计 代码分析 一、代码结构与主要功能概述 二、代码功能分解与分析 1. 类与常量定义 2. 绘制树的主逻辑 3. 彩色球的绘制 4. 动态效果的实现 5. 窗口初始化 三、关键特性与优点 四、总结 写在后面 写在前面 Java语言绘制精美圣诞树…

认识计算机网络

单单看这一个词语&#xff0c;有熟悉又陌生&#xff0c;让我们来重新认识一下这位大角色——计算机网络。 一、是什么 以及 怎么来的 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路和通信设备连接起来&#xff0c;在网络操作…