面向对象程序设计-C++ Stream & Template & Exception【第十五次上课笔记】
这是本门《面向对象程序设计》课最后一次上课,刚好上完了这本《Thinking in C++》 :)
这节课首先讲了流 Stream 的概念
平时我们主要用的是(1)在屏幕上输入输出的 cin cout 流
(2)在文件中输入输出的 ifstream ofstream 流
(3)在字符串中输入输出的 istringstream ostringstream istrstream ostrstream 流
具体实例可以看以下代码:
/*************************************************************************
> File Name: Code09.cpp
> Author: Jeremy Wu
> Created Time: Mon 08 Jun 2015 09:55:51 AM CST
************************************************************************/ //跟字符串相关的流:1)支持C风格的字符串流
// 2)支持C++风格的字符串流
// 1 ) strstream (istrstrstream, ostrstream)
// 2 ) stringstream (istringstream, ostringstream) #include <iostream>
#include <sstream>
#include <string> using namespace std; float str_to_float (const char * s) {
istrstream tmp (s, strlen (s));
float ans;
tmp >> ans;
return ans;
} int main () { //想把整数输入到字符串里 ostringstream oss;
int i = ;
double d = 1.414; oss << i << '\t' <<d;
string str = oss.str (); cout << str << endl; //C++ 字符串 istringstream iss ("223 2.414");
iss >> i >> d;
cout << i << '\t'<< d << endl; //C 字符串 char *s = "v -3.1 // 3.1415"; return ;
}
在C语言中对输出的控制是非常方便的,同样,在C++中也可以对输出作格式控制,并且功能更加强大
在控制格式上有两种方法: (1)使用 setfs 等控制符
(2)cout 的时候使用操作值
/*************************************************************************
> File Name: Code07.cpp
> Author: Jeremy Wu
> Created Time: Mon 08 Jun 2015 09:46:45 AM CST
************************************************************************/ //流的输入输出的格式化
// 控制格式两种方式 1)使用 setfs 等控制符
// 2)cout 的时候使用操作值 #include <iostream> using namespace std; //ios 是所有流的基类 ios::fmtflags oldFlag = cout.flags (); int main () { int i = ;
cout.setf (ios::showpos); //显示正负号
cout << i << endl;
cout.setf (ios::showbase); //显示进制号
//16进制输出
cout << hex << i << endl;
//8进制输出
cout << oct << i << endl << endl; cout.flags (oldFlag); //默认保留6位数字
double f = 1234.56789;
cout << "default: \t" << f << endl; //科学计数法,默认保留小数后6位数字
cout.setf (ios::scientific, ios::floatfield);
cout << "scientific: \t" << f << endl; //固定点模式,默认保留小数后6位数字
cout.setf (ios::fixed, ios::floatfield);
cout << "fixed: \t " << f << endl; //恢复默认值
cout.setf (ios::fmtflags (), ios::floatfield);
cout << "default: \t" << f << endl << endl; //输出浮点数默认精度
cout << "default precision is " << cout.precision () << endl; //修改默认精度
cout.precision (); cout << "after precision (8)" << endl;
cout << "default: \t" << f << endl; cout.setf (ios::scientific, ios::floatfield);
cout << "scientific: \t" << f << endl; cout.setf (ios::fixed, ios::floatfield);
cout << "fixed: \t" << f << endl << endl; cout.flags (oldFlag); //输出预留宽度
cout << "Current width: \t" << cout.width ()
<< "\t Currend fill character : \t" << cout.fill () << endl; cout.precision (); //设置预留宽度
//设置填充为 #
//默认按右边对齐
//
// ·修改 width 只针对下一次输出有效
//
cout.width ();
cout.fill ('#'); cout << f << endl; cout << "Current width: \t" << cout.width ()
<< "\t Currend fill character : \t" << cout.fill () << endl; cout << f << endl << endl; cout.width ();
cout << -f << endl;
cout.width (); //左边对齐
cout.setf (ios::left, ios::adjustfield);
cout << -f << endl;
cout.width (); //中间对齐
cout.setf (ios::internal, ios::adjustfield);
cout << -f << endl << endl; cout.flags (oldFlag); return ;
}
在C++ 中有个非常有用的功能叫做模板 Template
以下是一个 Template 简短 的例子
在自己写模板的时候得注意许多小细节,比较在类的外部定义函数的时候需要在前面加上模板头还要在类后面加上<T>等
/*************************************************************************
> File Name: Code08.cpp
> Author: Jeremy Wu
> Created Time: Mon 08 Jun 2015 09:51:33 AM CST
************************************************************************/ //函数模板
//实例化的真正含义: 函数模板 -> 模板函数 #include <iostream>
#include <cstring> using namespace std; /*
int sum (int a, int b) {
return a + b;
} double sum (double a, double b) {
return a + b;
}
*/ //模板的定义
template <typename T> //template head
T sum (T _a, T _b) {
return _a + _b;
} //模板变量和模板常量(可以提供默认值
template <typename T = double, int Size = >
class Array {
private:
//const static int Size = 100;
T a[Size];
public:
Array () { memset (a, , sizeof (a)); }
T & operator [] (int index);
Array & operator + (T rhs) {
for (int i = ; i < Size; ++i) a[i] += rhs;
return *this;
}
}; //在类的外部定义的时候
// 1)加模板头
// 2)类后面加 <T>
template <typename T, int Size>
T & Array <T, Size>::operator [] (int index) {
if (index < || index >= Size) {
cout << "out of range" << endl;
//exit (0);
} else {
return a[index];
} } int main () { //模板的实例化 : 显示实例化 和 隐示实例化
/*
int i (10), j (7);
cout << sum (i, j) << endl; double d1 (12.3), d2 (7.9);
cout << sum <int> (d1, d2) << endl;
*/ //Array <double, 100> ay;
Array <>ay;
ay[] = ;
cout << ay[] << endl; ay = ay + 5.2;
cout << ay[] << endl; return ;
}
接下来是异常处理
需要正确理解在异常处理整个周期中流程
catch (...) // ... 可以捕捉任何类型的异常,并且这句 catch 必须放在所有 catch 的最后
/*************************************************************************
> File Name: Code10.cpp
> Author: Jeremy Wu
> Created Time: Mon 08 Jun 2015 11:44:31 AM CST
************************************************************************/ //异常处理: exception handling
//try \ throw \ catch
//要理解异常处理的执行顺序 #include <iostream>
#include <string> using namespace std; class ExcepClass {
public:
string message () { return "devide number is invalid"; }
}; double devide (int a, int b) {
if ( == b) throw ExcepClass (); //如果符合条件,函数结束,所有局部变量释放
cout << "Just after throw" << endl;
return double (a) / b;
} int main () { cout << "Before exception" << endl; try {
int i (), j ();
cout << devide (i, j) << endl; //出现异常以后的所有代码都不会被执行
cout << "After devide (i, j)" << endl;
} catch (ExcepClass k) { //类型必须匹配捕捉到的类型
cout << k.message () << endl;
} catch (int m) { }
catch (...) { //捕捉任何类型的异常,并且...必须放在最后
cout << "Captur all exception" << endl;
} //结束异常处理
cout << "After capture processing" << endl; return ;
}
至此,一系列上课笔记
END
面向对象程序设计-C++ Stream & Template & Exception【第十五次上课笔记】的更多相关文章
- 201271050130-滕江南-《面向对象程序设计(java)》第十五周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十五周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...
- 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结
201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三 Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...
- 201871010123-吴丽丽《面向对象程序设计(Java)》第十五周学习总结
201871010123-吴丽丽<面向对象程序设计(Java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010104-陈园园 《面向对象程序设计(java)》第十五周学习总结
201871010104-陈园园 <面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010105-曹玉中《面向对象程序设计(java)》第十五周学习总结
201871010105-曹玉中<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010107-公海瑜《面向对象程序设计(java)》第十五周学习总结
201871010107-公海瑜<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于 ...
- 201871010128-杨丽霞《面向对象程序设计(java)》第十五周学习总结
201871010128-杨丽霞<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871010133-赵永军《面向对象程序设计(java)》第十五周学习总结
201871010133-赵永军<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
- 201871020225-牟星源《面向对象程序设计(java)》第十五周学习总结
201871020225-牟星源<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...
随机推荐
- 51nod 1239 欧拉函数之和(杜教筛)
[题目链接] https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 [题目大意] 计算欧拉函数的前缀和 [题解] 我们 ...
- SGU 242 Student's Morning 网络流(水
题目链接:contest=0&problem=242">点击打开链接 题意: 给定n个人,m个终点 以下n行表示每一个人能够去m个点. 每一个人仅仅能去一个点. 输出随意一个方 ...
- xcode 不值钱的动画UIImageView
了解 animateWithDuration方法 制作动画变得不值钱 代码创建一个UIImageView 后加入self.view 容器中 调用点击屏幕touchesBegan 方法执行动画 #imp ...
- 日常之学习CSS3变形和js函数指针
1,transform变形属性,包括rotate(xxdeg)旋转,translate(x轴px,y轴px)移动,scale(0.5,2)变形(x轴缩小0.5倍,y轴放大2倍),skew(x轴deg, ...
- Jquery 方法大全
一.JQuery常用的方法 :(JQuery中90%都是方法,没有参数是获取,带参数是设置) $("#id").css('backgroundColor','blue'); .cs ...
- Dojo实现Tabs页报错(一)
1.在用Dojo写tab页的过程中出现了一些错误 dojo源码如下: <%-- Document : grid Created on : 2013-12-15, 18:05:47 Author ...
- c#的Marshal
补充过程中~ 感觉应该是C#调用非托管的比较专门的class 例1. public struct ImageDataMsg { public char DataType; public int Srv ...
- 基于FPGA的信号消抖
上一篇写了一个按键消抖,按键消抖需要一个计数器.可是有些信号是不需要这么负责的,仅仅是抖动而已.于是我在上一篇博文的基础上做了一点修改,于是有了这个信号消抖的程序 module sig_nojitte ...
- FPGA工程中用C语言对文件进行处理_生成mif文件
本博客中有用verilog处理文件数据的代码,本博文采用C 处理文件中的数据. 有时候要生成一个mif文件—— altera memory initial file.本次工程中我得到的是一个大型的数 ...
- 深究带PLL的错误复位设计
PLL复位通常犯的错误 或者是像上一篇文章 FPGA知识大梳理(四)FPGA中的复位系统大汇总 中的图一样,也是错误设计.为何呢?看ALTPLL (Phase-Locked Loop) IP Cor ...