当前位置:文档之家› CCP2009-TIAN-17

CCP2009-TIAN-17

程序设计实习
第十七讲 输入输出流和文件操作
田永鸿
https://www.doczj.com/doc/b04949084.html,/cpp2009 p // p / pp https://www.doczj.com/doc/b04949084.html,/jiaoxue-CPP/2009/index.htm

上 讲内容回顾 上一讲内容回顾
函数模板
类型参数 函数和模板匹配顺序:普通函数 函数模板 类型转换后函数
类模板
类模板 & 模板类 使用类模板声明对象:同 个类模板的两个模板类是不兼容 使用类模板声明对象:同一个类模板的两个模板类是不兼容 类模板的非类型参数:用来说明类模板中的属性 类模板与继承:类模板:类模板/模板类/普通类,普通类: 模板 类 类模板与友元函数:把模板函数/模板类/模板类的成员函数声 明为友元时,必须利用类型参数 类模板与静态变量:不同的模板类不能共享静态变量
String类
一个常用的模板类,各种成员函数 个常用的模板类 各种成员函数 string中的字符串没有null做结束符
北京大学《程序设计实习》课程
2

课 课堂问题 题
1. 下列函数模板中定义正确的是: A. template T1 fun (T1,T2) { return T1 + T2; } B. B template< class T> l l T T fun(T a) { return T + a;} C. C tempmlate T1 class T1 fun(T1,T2) { return T1 + T2 ; } D. template p T fun(T a,T b) { return a + b ; }
ans: D
3
北京大学《程序设计实习》课程

课 课堂问题 题
2. 有如下类模板定义
template class CTemp{ friend myClassA; m ClassA; friend myClassB; private: T1 elements[size]; l [ i ] public: CTemp(T arg){}; }; 则myClassA、myClassB、myClassA、 myClassA都是CTemp的友员类 y 都是 p , , 的友员类 myClassA、myClassB是CTemp的 友员类, myClassA、myClassA不是 y y
4
北京大学《程序设计实习》课程

课 课堂问题 题
3. 找出下列代码中的错误之处,并解释a(10)的含义
template t l t < l T int i > class CTemp{ friend void func(int); private: T elements[size]; l [ i ] public: CTemp(T arg){}; } }; void func(int size){ CTemp a(10); CTemp b(8.9); CTemp p , c(10); ( ); 局部变量不能用作非 CTemp d(10); 类型参数 int i; for(i=0; i<50; i++) { cout<北京大学《程序设计实习》课程
CTemp(T arg)的参数,如 CTemp(T arg){ for(int i=0; i5

上一讲遗留内容
String类
转换成C语言式char *字符串 符串流 字符串流处理
北京大学《程序设计实习》课程

转 转换成C语言式char *字符串(1) 符 ( )
注意:string中的字符串没有null做结束符 成员函数 c_str() string s1( hello world ); s1("hello world"); printf("%s\n", s1.c_str()); // s1.c_str() 返回传统的 1 t () 返回传统的const char * 类型字符串 t h 类型字符串, 并在末尾增加了一个null结束符。 输出: 输出 hello world
北京大学《程序设计实习》课程
7

转 转换成C语言式char *字符串(2) 符 ( )
成员函数 成员函数data() () string s1("hello world"); const char * p1=s1.data(); p (); for(int i=0;i北京大学《程序设计实习》课程
8

转 转换成C语言式char *字符串(3) 符 ( )
成员函数copy() py()
string s1("hello world"); int len = s1.length(); char * p2 = new char[len+1]; h 2 h [l +1] s1.copy(p2,5,0); p [ ] ; p2[5]=0; cout << p2 << endl;
// s1.copy(p2,5,0) 从s1的第一个字符开始制作一个最 长5个字符长度的字符串副本并将其赋值给p2, 长5个字符长度的字符串副本并将其赋值给 2 不添 加null结束符。返回值表明实际复制字符串的长度。 输出: hello
北京大学《程序设计实习》课程
9

字符串流处理 符
除了标准流和文件流输入输出外 还可以从 除了标准流和文件流输入输出外,还可以从string g 进行输入输出 类似 istream和osteram进行标准流输入输出,我们 用 istringstream 和 ostringstream进行字符串上的 输入输出,也称为内存输入输出。 #include #include #include
北京大学《程序设计实习》课程
10

字符串流处理 符
例:字符串输入流
string input("Input test 123 4.7 A"); istringstream inputString(input); string string1, string2; ti ti 1 ti 2 int i; double d; char c; h inputString >> string1 >> string2 >> i >> d >> c; cout << string1 << endl << string2 << endl; g g cout << i << endl << d << endl << c <> l) cout << "long\n"; ( p g ) g\ ; else cout << "empty\n";
输出: 输出 Input test 123 4.7 A empty
北京大学《程序设计实习》课程
11

字符串流处理 符
例:字符串输出流
string input("Output test 123 4.7 A"); istringstream inputString(input); string string1, string2; string1 int i; double d; char c; h inputString >> string1 >> string2 >> i >> d >> c; ostringstream outputString; outputString << string1 << endl << string2 << endl; outputString << i << endl << d << endl << c <输出: Output test 123 4.7 A
北京大学《程序设计实习》课程
12

输入输出流
流的概念模型 C++中与流操作相关的类及其继承关系 输入输出流对象: cin, cout, cerr clog cin cout cerr, 输出流 输入流 无格式输入输出 流操纵算子 流格式状态
北京大学《程序设计实习》课程
13

流的概念模 流的概念模型
流 --- 可以看作一个无限长的二进制数字序列
~ 1 0 1 0 1 1 1 0 ~
通过读写指针进行流的读和写(以字节为单位)
~ 1 0 1 0 1 1 1 0 ~
将流上的数据读进变量x 将y的值写入流 y 1 1 1 0 0 0 1 0 x 1 0 1 0 1 1 1 0
北京大学《程序设计实习》课程
14

流的概念模型 概 模
输出流
可以看作一端无限,另一端通过写指针不停地向后 写入新内容的单向流,
~
1 1 0
0
0
1
1
0
1
0 写指针
北京大学《程序设计实习》课程
15

流的概念模型 概 模
输入流
可以看作一端无限,另一端通过读指针不停地从流 中读取新内容的单向流,读出的内容从流中删去。
~
1 1 0
0
0
1
1
0
1
0 读指针
北京大学《程序设计实习》课程
16

相关主题
文本预览
相关文档 最新文档