C++标准输入输出/C++异常机制/自定义模板

C++数据输入类型的异常处理 很简单的一个程序,输入一个整数判断是否为素数。 如果输入的是小数或者其他字符,会返回输入错误的提示。 主要用到了atoi函数(需要iomanip头文件)将字符转换为整数,如果不是数字atoi会返回0,以此判断输入的是否是数字。 atoi函数遇到小数不会报错,所以先查找小数点排除小数的情况。 #include<iostream> #include<iomanip> using namespace std; bool isPrime(int a); int main() { 阅读详情

一、C++标准输入输出

1、四个类对象

cin:标准输入流(键盘)

cout:标准输出流(显示器)

ceer:标准错误流(不带缓冲区),直接输出到显示器

clog:标准错误流(带缓冲区),先把要输出的内容放到缓冲,直到缓冲区满或遇到换行endl才输出到 显示器

2、C++标准输入:在istream输入流类中定义对“>>”重载的一组公用成员函数,具体声明格式

    istream& operator>>(T&);

    C++标准输出:在ostream输出流类中定义对“<<”重载的。。。。。。。。。。。。。。。

    ostream& operator <<(T&);

3、输入输出格式控制

(1)输入输出流枚举常量:在前面加ios::前缀就可以设置相应的格式

(2)输入输出流的内部函数

流成员函数与之作用相同的控制符作用
precision(n)setprecision(n)设置实 数的精度为n位。
width(n)setw(n)设置字段宽度为n位。
fill(c)setfill(c)设置填充字符c。
setf( )setiosflags( )设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。
ubsetf( )resetiosflags( )终止已设置的输出格式状态。

(3)使用控制符控制输出格式

控制符作用
dec设置整数的基数为10
hex设置整数的基数为16
oct设置 整数的基数为8
setbase(n)设置整数的基数为n(n只能是16,10,8之一)
setfill(c)设置填充字符c,c可以是字符常量或字符变量
setprecision(n)设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位 数)形式和scientific(指数)形式输出时,n为小数位数。
setw(n)设置字段宽度为n位。
setiosflags(ios::fixed)设置浮点数以固定的小数位数显示。
setiosflags(ios::scientific)设置浮点数以科学计数法(即指数形式)显示。
setiosflags(ios::left)输出数据左对齐。
setiosflags(ios::right)输出数据右对齐。
setiosflags(ios::shipws)忽略前导的空格。
setiosflags(ios::uppercase)在以科学计数法输出E和十六进制输出字母X时,以大写表示。
setiosflags(ios::showpos)输出正数时,给出“+”号。
resetiosflags终止已设置的输出格式状态,在括号中应指定内容

二、C++异常机制

C++异常处理机制是由3个部分组成:检查(try)、抛出(throw)和捕捉(catch)

把需要检查的语句放在try中,throw用来当出现异常时发生一个异常信息,而catch则用来捕捉异常信息,如果捕捉到了异常信息就处理它。

1、首先介绍try

首先是把可能出现异常的、需要检查的语句或程序放在段放在try后面的花括号中。

try块可以嵌套、程序按顺序寻找匹配的异常处理器,抛出的异常将被第一个类型符合的异常处理器捕获 、如果内层try块后面没有找到合适的异常处理器,该异常向外传播,到外层try块后面的catch块中寻找 、没有被捕获的异常将调用terminate函数,terminate函数默认调用abort终止程序的执行,可以使用set_terminate函数指定terminate函数将调用的函数

try_catch语句形式如下 :

try
{
        包含可能抛出异常的语句;
}

catch(类型名 [形参名]) // 捕获特定类型的异常
{


}
catch(类型名 [形参名]) // 捕获特定类型的异常
{


}
catch(...)    // 三个点则表示捕获所有类型的异常
{
}

2、catch

(1)一个异常处理器一般只捕捉一种类型的异常 
(2)异常处理器的参数类型和抛出异常的类型相同 
(3)…表示可以捕获任何异常

注意事项:

在一个try_catch中,可以只有try块而无catch块。即只检查而不处理,把catch处理放在其他函数中。

但一个try_catch结构中只能有一个try块,但却可以有多个catch块,以便与不同的异常信息匹配。

3、throw 

(1)可以抛出内置类型异常也可以抛出自定义类型异常 

(2) throw抛出一个类对象会调用拷贝构造函数,因此常抛出临时对象, 
e.g. throw Myexception(“Myexception”); 
(3)抛出异常后,异常发生之前创建的局部对象被销毁,这一过程称为栈展开。


什么是栈展开? 
当一个函数里面抛出异常时,如果抛出的异常没有在该函数里面找到相应的catch处理模块,这个时候在抛出异常前的那些局部变量就开始销毁,最后整个函数调用的栈帧也被销毁。异常就到了调用该函数的去找catch处理模块,如果也没有 那么一样要销毁该调用函数的栈。就这样一层层的往外推。

注意:将派生类放在基类catch的上面,否则的话异常信息都会被基类接走(????) 


三、自定义模板

1、函数模板定义与实例化

函数模板是C++新增的一种性质,它允许只定义一次函数的实现,即可使用不同类型的参数来调用该函数。这样可以减小代码的书写复杂度,同时也便于修改。

mark:使用函数模板并不会减少最终可执行程序的大小,因为在调用模板函数时,编译器都根据调用时的参数类型进行形影的实例化。

定义格式:

template<typename 形参名1,typename 形参名2,...>

返回类型  函数名

{函数体}

2、类模板定义与实例化

类模板为描述多个具有相同结构(成员变量及成员函数),仅成员类型不同(可能为int、char、double等类型)的类提供了方便。

模板类的定义格式如下:

template <class T1,class T2,......>

class <类名>

{

<成员说明>

};

其中,template是关键字,表示定义的是一个模板。类模板的定义是以template开始。T1,T2等为类模板的类型参数,用尖括号"<>"括起来,多个类型参数项之间用逗号隔开。在类成员的说明中,可以使用T1、T2等指定类中数据成员的类型、成员函数的参数类型和返回值类型。

【C++】深入C++的STL:如何编写高效的自定义容器 C++标准模板库(STL)提供了强大的容器类,但在某些特殊情况下,编写自定义容器可以更好地满足需求。本文深入分析了STL容器的内部机制,展示了如何从零开始编写高效的自定义容器,涵盖了数据存储、迭代器实现、异常安全性和性能优化等关键技术。通过详细的代码示例,读者可以学习到如何设计具备扩展性和高性能的容器类,并应用于实际项目中。本文还讨论了使用RAII管理资源、采用强保证提高异常安全性,以及通过基准测试和单元测试确保容器的正确性与高效性。 阅读详情

相关推荐

C++标准

C++标准是C++编程语言的规范,由国际标准化组织(ISO)制定。C++标准的发展历程可以追溯到1998年,当时ISO/IEC 14882:1998标准被发布,这是第一个C++标准,常被称为C++98。随后,C++标准经历了多次更新和修订,包括C++03(2003年)、C++11(2011年)、C++14(2014年)和C++17(2017年)。最新的C++标准是C++20,于2020年发布,引入了许多新特性,如概念(concepts)、范围库(ranges)、协程(coroutines)等。

如无必要,勿增实体。 2293

C++中带输入、输出样例题型

一.第n天股票价格 题目描述: 经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天…依此类推。 为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱? 输入输出结果: ...

moonbaby 2266

2020.11.15 第9课 C++异常处理机制

2020.11.15 第9课 C++异常处理机制 一、基本异常处理 ---------------------------------------------------------- throw:抛出异常 try:检查异常 catch:捕获处理异常 1.任何东西都可以当作异常 错误也是异常的一种 2.异常处理机制 问题不在当前函数解决 3.抛出的异常,不处理,如果引发异常,会调用默认处理abort终止程序 4.try和catct不许是一起出现,必须{} ------------

LZGaile的博客 168

c++刷题自定义输入输出

1、输入一个数组 vector<int> nums; int tmp_int while(cin >> tmp_int){ nums.push_back(tmp_int); if(cin.get() == '\n') break; } 注: a. 以空格为间隔输入数组 b. 输入完成,回车必须紧跟最后一个数字,若回车前是空格,则此回车会像空格一样被忽略 2、输入一个不带空格的字符串 string str; cin >> str; 3、输入一个带空格的字符串

贾亚超的博客 1048

C++编程新手到高手:CS42Cpp课程学习之路

本文还有配套的精品资源,点击获取 简介:"CS42Cpp"课程设计为初学者提供了一个系统的C++学习路径,涵盖了从基础知识到高级概念的全面内容。课程分为两个部分:前4周的基础阶段,后16周的深入阶段,逐渐引导学员掌握C++的语法、面向对象编程、高级特性如模板和STL使用。课程利用"CS42Cpp-master"资源包提供实践材料,帮助学员通过实际编码提高编程技能和解决问题的...

weixin_35982453的博客 1605

非华为电脑与MatePad Pro多屏协同实战:从安装管家到攻克连接难题

本文详细介绍了在非华为电脑上安装华为电脑管家并实现与MatePad Pro多屏协同的完整指南。从安装步骤、常见连接失败解决方案到华为账号绑定技巧,提供了实用的操作方法和硬件优化建议,帮助用户攻克连接难题,提升多屏协同的稳定性和流畅度。

weixin_30263073的博客 233

C++ 典型样例输入

  对于不同问题的输入方式不同,有的便输入数据边处理,有的输入完成后再处理数据;有的输入的数据量已知,有的输入数据量未知… 输入若干数据,输入一个处理一个,有结束标志 e.g.输入若干数求和,以0作为结束标志 int sum = 0; int val; while (true){ cin >> val; if (val == 0) break; sun += val; } ...

我有两颗糖 2316

Cadence ADE实战:1GHz VCO相位噪声仿真全流程(附PSS/Pnoise避坑指南)

本文详细介绍了在Cadence ADE环境中对1GHz VCO进行相位噪声仿真的完整流程。重点剖析了PSS(周期性稳态分析)和Pnoise(周期性噪声分析)两大核心引擎的关键参数设置与避坑指南,帮助射频与模拟IC设计者准确评估VCO性能,解决仿真不收敛、结果异常等常见问题。

rock5的博客 671

C++刷题测试样例输入输出

此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。可以接收空格,cin.getline(char*,int,char),内有三个参数,第一个表示要接收的字符串,第二个表示接收字符个数,第三个表示结束字符。输入包括两个正整数a,b(1 ...

进击的小程序员 2374

避坑指南:LVGL在Arduino环境编译报错?3步搞定lv_conf.h路径问题(附ST7789屏幕调试技巧)

本文详细解析了在Arduino环境中配置LVGL图形库时,如何解决常见的“lv_conf.h file not found”编译报错问题。通过三步法:定位并复制模板文件、启用核心配置并指定路径、配置基础参数,从根本上解决路径问题。文章还结合ST7789屏幕驱动,分享了使用TFT_eSPI库进行显示适配、内存优化及背光控制等实战调试技巧,帮助开发者建立清晰、可维护的嵌入式UI工程基础。

lake5的博客 860

从零开始学习信号完整性(SIPI)--1 简介

信号完整性就是研究如何让驱动芯片发出的信号经过传输通道被接收芯片正确接收的学问。 信号完整性包含了三个要素: 信号:是被传输的主体,我们首先要了解、熟悉信号的特性。 芯片:分为驱动芯片和接收芯片,信号完整性工程师就是要实现信号在驱动芯片和接收芯片之间的正确传输。 传输通道:是传输信号的介质,是信号所走的“路”。如何实现信号的正确传输呢?那就要信号完整性工程师为信号“修路”、“搭桥”。

qq_29476769的博客 4万+

C++ 标准的异常

C++ 标准的异常

代码人生 4321

一、qt下载与安装

qt与qtcreator 的区别与联系 1、QT Creator只是一个集成的编译器,用于将源代码编译成可执行程序。 QT 是跨平台C++图形用户界面应用程序开发框架,可以简单理解成是一个开发包。 2、Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。 QT Creator 跨平台的 Qt IDE,Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集 ...

yiye_pianzhou的博客 2218

《C++进阶之C++11》【异常】

本文介绍了C++11中的异常处理机制,通过try-catch-throw结构实现程序错误的捕获与处理。文章详细讲解了throw抛出异常、try监控代码块、catch捕获异常的语法规则和执行流程,并给出除法运算的异常处理示例

序属秋秋秋的博客 5708

【WRF-Chem教程-附录B】使用 MOZART 与WRF-Chem

使用MOZART与WRF-Chem

WW、forever的博客 242

Arduino开发实例-EMG 肌肉信号传感器

在医学研究中,测量肌肉的活动、收缩和扩张非常重要。 EMG 肌肉传感器测量肌肉活动并产生信号以显示扩张和收缩量。 因此,输出取决于所选肌肉的活动量。 3 绿色、红色和黄色电极连接到模块,用于传输来自肌肉运动的电信号。

视觉与物联智能 1699

C++标准模板库中交换操作的全面分析:从惯用法到现代自定义机制

本文深入分析了C++标准模板库中的交换操作,从基础实现到现代自定义机制。文章首先探讨了C++11前基于复制的低效交换方式,以及C++11引入移动语义后带来的性能提升。随后重点讲解了参数依赖查找(ADL)这一关键机制,详细介绍了"两步法"惯用法如何正确调用自定义swap函数。最后,文章对比了传统成员/非成员函数配对和现代"隐藏友元"惯用法这两种实现自定义swap的方式,指出后者因其更好的封装性和ADL特性而成为更优选择。全文揭示了swap操作在C++中的演变历程,展示了

greenspan的专栏 1159

混响效果的编程实现:Schroeder混响模型与Moorer型混响

Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。Schroeder混响模型是由Manfred R. Schroeder在1962年提出的,它基于一系列串联的反射器(Allpass Comb Filters)和并联的反射器(Feedback Comb Filters)构成。通过调整各个反射器和全通滤波器的参数,可以实现不同的混响效果。

2301_79326857的博客 1082

C++核心编程解析:模板、容器与异常处理全指南

本文深入探讨C++模板编程实现类型无关逻辑复用的方法,解析STL容器内存管理与性能特征,对比vector/list/map等数据结构适用场景,演示异常捕获链与文件流操作技巧,通过20+代码案例呈现从泛型设计到工程实践的完整知识体系,助力开发者掌握高效、安全的C++编程范式。

云云我啊,最喜欢用博客了呢 1422

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源。C++标准库的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利用标准库完成。这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费时间、人力重新开发呢;(2)质量:标准库的都是经过严格测试的,正确性有保证;(3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平;(4)良好的编程风格:采用行业

迂者-贺利坚的专栏 2万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

(五)C++中的异常处理与模板类

目录C++中的异常处理与模板类一、C++ 中的异常处理1、异常处理2、throw 抛出函数外3、抛出异常对象4、声明抛出异常的类型5、标准异常(类似于Java NullPointerException)二、模板类1、模板类示例2、普通类继承模板类3、模板类继承模板类4、模板类对象实例化 C++中的异常处理与模板类 一、C++ 中的异常处理 1、异常处理 在C++ 中可以抛出任何类型的异常,根据抛出...

一个人的旅行的博客 1037

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

[C++11] 外部模板机制

说明:C++11 新特性中的外部模板(Explicit Instantiation Declaration)是一种机制,允许开发者在非模板定义的源文件中明确地声明或定义模板实例。这样做的主要目的是为了避免在多个编译单元中重复编译模板代码,从而减少编译时间和潜在的编译错误。外部模板的声明告诉编译器,模板的某个具体实例应该在某个特定的编译单元中生成,而不需要在每个包含模板声明的编译单元中都进行实例化。这通常用于库的实现中,以确保模板代码只被编译一次。在这段代码中,MyClass是一个模板类,我们通过。

wangdsh的博客 1122

【C++高阶】:异常详解

✨惊起归鸿不成字,辞柯落叶最知秋🌏📃。

island1314的博客 1592

C++模板与异常处理进阶:从语法到工程实践

泛型编程和错误处理是构建健壮、高效软件系统的两大核心技术支柱。泛型编程通过模板实现编译时代码生成,在保证类型安全的同时消除冗余,其核心机制包括模板实例化、特化以及SFINAE规则,这为编写高度可复用的库组件奠定了基础。异常处理机制则提供了一种非局部的错误传播方式,通过RAII(资源获取即初始化)和异常安全保证,能够有效管理资源生命周期,防止内存泄漏。在C++工程实践中,模板元编程和异常安全设计常被用于构建高性能的泛型容器和算法,例如标准库中的vector和智能指针。理解模板的编译期行为与异常处理的运行时特性

weixin_33800463的博客 377
上一篇: C++继承预习
下一篇: 标准模板库预习
linuxwln
博客等级 码龄9年 30粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值