这是本门《面向对象程序设计》课最后一次上课,刚好上完了这本《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【第十五次上课笔记】的更多相关文章

  1. 201271050130-滕江南-《面向对象程序设计(java)》第十五周学习总结

    201271050130-滕江南-<面向对象程序设计(java)>第十五周学习总结 博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.c ...

  2. 201871010111-刘佳华《面向对象程序设计(java)》第十五周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十五周学习总结 实验十三  Swing图形界面组件(二) 实验时间 2019-12-6 第一部分:理论知识总结 5> ...

  3. 201871010123-吴丽丽《面向对象程序设计(Java)》第十五周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  4. 201871010104-陈园园 《面向对象程序设计(java)》第十五周学习总结

    201871010104-陈园园 <面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  5. 201871010105-曹玉中《面向对象程序设计(java)》第十五周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. 201871010107-公海瑜《面向对象程序设计(java)》第十五周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第十五周学习总结             项目                            内容   这个作业属于 ...

  7. 201871010128-杨丽霞《面向对象程序设计(java)》第十五周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  8. 201871010133-赵永军《面向对象程序设计(java)》第十五周学习总结

    201871010133-赵永军<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  9. 201871020225-牟星源《面向对象程序设计(java)》第十五周学习总结

    201871020225-牟星源<面向对象程序设计(java)>第十五周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

随机推荐

  1. Android 流媒体系列(二)

    import java.io.IOException; import android.app.Activity; import android.content.ContentResolver; imp ...

  2. SBT模版

    /*Author:WNJXYK*/ #include<cstdio> using namespace std; ; struct SBT{ int left; int right; int ...

  3. MSSTDFMT.dll系统文件(附2种MSSTDFMT.dll 注册方法)-系统增强

    MSSTDFMT.dll系统文件(附2种MSSTDFMT.dll 注册方法)-系统增强 msstdfmt.dll是微软标准数据格式对象相关动态链接库文件. msstdfmt.dll里面包含了定义好函数 ...

  4. nginx access log logrotate配置

    /home/deployuser/deploy/nginx/temp/logs/home.access.log {   size 100M   rotate 100    nocompress   d ...

  5. 基于mini2440的看门狗(裸机)

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  6. 移动互联与大数据之美-逐浪CMS2 X1.1发布

    北京时间2013年7月1日: 领先的CMS研发软件厂商--上海逐浪CMS软件科技有限公司发布其年中重要更新,并以Zoomla!逐浪CMS2 X1.1为版本号向全球用户投递新版软件. 此次更新包括: 1 ...

  7. c/c++处理参数

    直接上代码:涉及函数getopt(),getopt_long() #include <unistd.h> #include <stdlib.h> #include <st ...

  8. BZOJ 2329: [HNOI2011]括号修复( splay )

    把括号序列后一定是))))((((这种形式的..所以维护一个最大前缀和l, 最大后缀和r就可以了..答案就是(l+1)/2+(r+1)/2...用splay维护,O(NlogN). 其实还是挺好写的, ...

  9. 【LeetCode题意分析&解答】33. Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  10. Linux 系统之Sysvinit

    子贡问为仁.子曰:“工欲善其事,必先利其器.居是邦也,事其大夫之贤者,友其士之仁者.”——孔子(春秋)<论语·卫灵公> [工欲善其事,必先利其器] 掌握一门技术,知道其发展历程是非常重要的 ...