C++ 文件和流、异常处理、动态内存、预处理器

一、C++文件和流:

在C++中进行文件处理,需要包含头文件<iostream>和<fstream>。fstream标准库定义的三个新的数据类型:

数据类型

描述

ofstream

该数据类型表示输出文件流,用于创建文件并向文件写入信息。

ifstream

该数据类型表示输入文件流,用于从文件读取信息。

fstream

该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。

打开文件:

void open(const char *filename, ios::openmode mode);

   关闭文件:

Void close();

文件被打开的模式:

模式标志

描述

ios::app

追加模式。所有写入都追加到文件末尾。

ios::ate

文件打开后定位到文件末尾。

ios::in

打开文件用于读取。

ios::out

打开文件用于写入。

ios::trunc

如果该文件已经存在,其内容将在打开文件之前被截断,即把文件长度设为 0。

示例:

ofstream outfile;

outfile.open("file.dat", ios::out | ios::trunc );

ifstream  afile;

afile.open("file.dat", ios::out | ios::in );

二、C++异常处理:

异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况。异常提供了一种转移程序控制权的方式。

C++ 异常处理涉及到三个关键字:try、catch、throw。

throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。

catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。

try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

try {

// 保护代码

}catch( ExceptionName e1 ) {

// catch 块

}catch( ExceptionName e2 ) {

// catch 块

}catch( ExceptionName eN ) {

// catch 块

}

三、C++动态内存:

C++程序中的内存分为两个部分:1、栈—在函数内部声明的所有变量都将占用栈内存;2、堆—程序中未使用的内存,在程序运行是可用于动态分配的内存。

使用new运算符为给定类型的变量在运行时分配堆内的内存,当不再需要动态分配的内存空间,使用delete运算符,来删除由new运算符分配的内存。示例:

double* pvalue = NULL; // 初始化为 null 的指针

pvalue = new double; // 为变量请求内存

double* pvalue = NULL;

if( !(pvalue = new double )) {

cout << "Error: out of memory." <<endl;

exit(1);

}

delete pvalue;        // 释放 pvalue 所指向的内存

四、C++命名空间:

命名空间的定义使用关键字 namespace,后跟命名空间的名称:

namespace namespace_name {

// 代码声明

}

调用带有命名空间的函数或变量,需要在前面加上命名空间的名称:

name::code; // code 可以是变量或函数

使用using namespace指令,在使用命名空间时,可以不用再前面加上命名空间的名称。

命名空间的嵌套:通过使用 :: 运算符来访问嵌套的命名空间中的成员

namespace namespace_name1 {

// 代码声明

namespace namespace_name2 {

// 代码声明

}

}

五、C++模板:

模板式泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

函数模板:

template <typename type> ret-type func-name(parameter list) {

// 函数的主体

}

类模板:

template <class type> class class-name {

...

}

六、C++预处理器:

◆ #define预处理:用于创建符号常量,该符号常量称为宏。

#define macro-name replacement-text

可以使用 #define 来定义一个带有参数的宏:

#define MIN(a,b) (a<b ? a : b)

◆ 条件编译:有几个指令可以用来有选择地对部分程序代码进行编译。

#ifdef NULL

   #define NULL 0

#endif

#ifdef DEBUG

    cerr <<"Variable x = " << x << endl;

#endif

#if 0

    不进行编译的代码

#endif

C++中的预定义宏:

描述

__LINE__

这会在程序编译时包含当前行号。

__FILE__

这会在程序编译时包含当前文件名。

__DATE__

这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。

__TIME__

这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode项目推送到git

1、打开项目文件 打开文件后点击vs code左侧工具栏中第三个源代码管理图标&#xff0c;点击初始化仓库&#xff0c;此时会创建一个本地仓库会检查该项目中的文件变更 2、创建远程仓库 点击克隆/下载&#xff0c;复制HTTPS地址 3、添加远程地址 1&#xff09;图形化操作 2…

Leetcode刷题之用队列实现栈(C语言版)

Leetcode刷题之用队列实现栈&#xff08;C语言版&#xff09; 一、题目描述二、题目要求三、题目示例四、题目解析Ⅰ、MyStack* myStackCreateⅡ、void myStackPush(MyStack* obj, int x)Ⅲ、int myStackPop(MyStack* obj)Ⅳ、int myStackTop(MyStack* obj)Ⅴ、bool myStackEmp…

文件夹重命名:彻底摆脱数字困扰,批量修改文件夹名去除数字

在日常生活和工作中&#xff0c;经常会遇到需要修改文件夹名称的情况。有时候是因为文件夹名称中包含了数字&#xff0c;有时候是因为文件夹名称不符合规范。无论出于什么原因&#xff0c;修改文件夹名称都是一件非常繁琐的事情。尤其是需要修改大量文件夹名称时&#xff0c;手…

Jenkins 整合 Docker 自动化部署

Docker 安装 Jenkins 配置自动化部署 1. Docker 安装 Jenkins 1.1 拉取镜像文件 docker pull jenkins/jenkins1.2 创建挂载文件目录 mkdir -p $HOME/jenkins_home1.3 启动容器 docker run -d -p 8080:8080 -v $HOME/jenkins_home:/var/jenkins_home --name jenkins jenkin…

CentOS rpm安装Nginx和配置

CentOS rpm安装Nginx和配置 官方下载地址: http://nginx.org/en/download.html 介绍 Nginx(“engine x”)是一款由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。 rpm包安装 #安装nginx&#xff0c…

k8s部署的java服务查看连接nacos缓存的配置文件

一、问题描述 k8s部署的java服务&#xff0c;使用nacos中的配置文件&#xff0c;需要在缓存中查看该服务具体是使用到了哪些配置文件 二、解决 参考文档: https://nacos.io/zh-cn/docs/system-configurations.html 文档描述如下: 进入java服务容器进入用户目录下的nacos&a…

4-Docker命令之docker version

1.docker version介绍 docker version命令是用于查看docker容器的版本信息 2.docker version用法 docker version [参数] [root@centos79 ~]# docker version --helpUsage: docker version [OPTIONS]Show the Docker version informationOptions:-f, --format string Fo…

Android 12.0 mt6771新增分区功能实现四

1.前言 在12.0的系统rom开发中,在对某些特殊模块中关于数据的存储方面等需要新增分区来保存, 所以就需要在系统分区新增分区,接下来就来实现这个功能,看第四部分的新增分区的实现过程 2.mt6771新增分区功能实现四的核心类 device/mediatek/mt6771/ueventd.mt6771.rcdevice…

Java枚举详解

一、什么是枚举类型 枚举类型是一种特殊的数据类型&#xff0c;用于定义一组固定的命名常量。枚举类型提供了一种更强大、更安全和更易读的方式来表示一组相关的常量。 在Java中&#xff0c;枚举类型是通过使用enum关键字来定义的。枚举类型可以包含一个或多个枚举常量&#xf…

常见状态码总结

常见状态码总结 2xx 200 OK&#xff1a;表示服务器成功处理了客户端的请求&#xff0c;并返回所请求的数据。这是最常见的状态码&#xff0c;表示一切正常。201 Created&#xff1a;表示服务器成功处理了客户端的 POST 请求&#xff0c;并在服务器上创建了新的资源。204 No C…

vue005——vue组件入门(非单文件组件和单文件组件)

一、非单文件组件 1.1、单文件组件的使用 1.1.1、局部注册 1、第一步&#xff1a;创建school组件 2、第二步&#xff1a;注册组件&#xff08;局部注册&#xff09; 3、第三步&#xff1a;使用组件&#xff08;编写组件标签&#xff09; <!DOCTYPE html> <html>…

设计模式—里氏替换原则

1.概念 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说&#xff0c;任何基类可以出现的地方&#xff0c;子类一定可以出现。 LSP是继承复用的基石&#xff0c;只有当衍生类可以替换掉基类&#xff0c;软件单位的功能不受到影…

Spring注解方式整合第三方框架

目录 Spring整合MyBatis 原有xml方式整合配置如下 注解方式&#xff1a; Import可以导入如下三种类 第三方框架是指由其他开发者或团队开发的软件模块或库&#xff0c;供开发者在自己的应用程序中使用。这些框架通常提供了一系列已经封装好的功能或工具&#xff0c;可节省开…

使用flask返回json格式的数据

Flask Flask是一个使用Python编写的轻量级Web框架&#xff0c;它的设计理念是保持简单、灵活和易扩展。它的核心是Werkzeug和Jinja2&#xff0c;并且它本身只提供了非常基础的Web框架功能&#xff0c;例如路由和请求处理等。 使用Flask可以快速创建一个Web应用程序&#xff0c;…

跳跃游戏Ⅱ[中等]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说&#xff0c;如果你在nums[i]处&#xff0c;你可以跳转到任意nums[i j]处: 0 < j < nums[i] i j < n …

【Python 训练营】N_8 打印阿姆斯特朗数

题目 输入一个数&#xff0c;判断是否为阿姆斯特朗数&#xff0c;阿姆斯特朗数指一个n位正整数等于其各位数字的n次方之和。其中n为3时是水仙花数。 分析 利用循环&#xff0c;获取数的长度&#xff0c;根据长度和定义&#xff0c;拆分出来运算 答案 while True:n int(in…

【Python 训练营】N_7 打印水仙花数

题目 打印出1000以内所有的"水仙花数"&#xff0c;所谓"水仙花数"是指一个三位数&#xff0c;其各位数字立方和等于该数本身。例如&#xff1a;153是一个"水仙花数"&#xff0c;因为1531的三次方&#xff0b;5的三次方&#xff0b;3的三次方。 …

数学启发式

学习资料&#xff1a; 优化求解器 | Gurobi 数学启发式算法&#xff1a;参数类型与案例实现 数学启发式算法 | 可行性泵 (Feasibility Pump)算法精讲&#xff1a;一份让您满意的【理论介绍编程实现数值实验】学习笔记(PythonGurobi实现) 大佬到底是大佬&#xff01;这些资料太…

Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题

文章目录 设备信息1. Ubuntu WiFi不可用解决方式查看Mac的网卡型号根据网卡型号搜索获取到的解决方法查看WiFi名字问题参考链接 2. 解决WiFi重启后失效问题打开终端创建.sh脚本文件编辑脚本文件复制粘贴脚本修改脚本权限创建并编辑systemd service文件复制粘贴下文到systemd se…

Typescript怎样对URL参数进行编码?

URL中的参数需要进行编码&#xff08;URL encoding&#xff09;是为了确保传输的参数不包含特殊字符&#xff0c;同时确保数据的可靠性和安全性。 特殊字符如空格、&、?等在URL中有特殊含义&#xff0c;如果直接包含在参数值中&#xff0c;可能会导致解析错误或者安全问题…