c++编程思想-----输入输出流介绍

1.1 为什么要用输入输出流

       大的障碍是运行期间用作参数表函数的解释程序。这是在运行期间对格式串做语法分析以及从参数表中索取并解释变量的代码。产生这个问题的四个原因是:
       1) 即使仅使用解释程序的一部分功能,所有的东西将获得装载。假如说:
       p r i n t f ( " % c " , ' x ' ) ;
       我们将得到整个包,包括打印出浮点数和串的那部分。没有办法可减少程序使用的空间。
       2) 由于解释发生在运行期间,所以不能终止这个执行。令人灰心的是在编译时,格式串里的所有信息都在这儿,但是直到运行时,才能对其求值。但是,如果能在编译时分析格式串里的变量,就可以建立硬函数调用,它比运行期间解释程序快得多(虽然 p r i n t f ( )族函数通常已被优化得很好)。
       3) 由于直到运行期间才对格式串求值,一个更糟糕的问题出现了:可能没有编译时的错误检查。如果我们已经尝试找出由于在 p r i n t f ( )说明里使用错误的数或变量类型而产生的错误,我们大概对这个问题很熟悉了。 C + +对编译期间错误检查作了许多工作,使我们及早发现错误,使工作更容易。特别是因为I / O库用得很多,如果弃之不用,那是很不明智的。
      4) 对C + +,最重要的问题是函数中的 p r i n t f ( )族不是能扩展的。它们被设计是用来处理 C中四类基本的数据类型(字符,整型,浮点数,双精度及它们的变形)。我们可能认为每增加一个新类时,都能增加一个重载的 p r i n t f ( )和s c a n f ( )函数(以及它们对文件和串的变量)。但是要记住,重载函数在参数表里必须有不同的类型, p r i n t f ( )族把类型信息隐藏在可变参数表和格式串中。对一个像C + +这样其目标是能容易地添加新的数据类型的语言,这是一个笨拙的限制。
1.2 解决输入输出流问题
        所有这些问题都清楚地表明: C + +中应该有一个最高级别标准类库,用以处理 I / O。由于“h e l l o , w o r l d”差不多是每个人使用一种新的语言所写的第一个程序 , 而且由于I / O通常是每个程序的一部分,因此 C + +中的I / O库必须特别容易使用。这是一个巨大的挑战:它不知道必须适应哪些类,但是它必须能适用于任何新的类。这样的约束要求这个最高级别的类是一个真正的有灵感的设计。

       要使用输入输出流,必须知道 C + +中所有操作符具有不同的含义。

        编译器在编译一个变量后跟一个操作符再后跟一个变量组成的表达式时,它只调用一个函数。那就是说,一个操作符只不过是不同语法的函数调用。
        在输入输出流库里,两个操作符被重载,目的是能容易地使用输入输出流。操作符“ < <”经常作为输入输出流的插入符,操作符“> >”经常作为提取符。

        如果一个流能产生字节(一个输入流),可以用一个提取符从这个流中获取信息。这个提取符产生并格式化目的对象所期望的信息类型。

1.3 文件输入输出流
       用输入输出流操作文件比在 C中用S T D I O . H要容易得多,安全得多。要打开文件,所做的就是建立一个对象。 构造函数做打开文件的工作。 不必明确地关闭一个文件(尽管我们用c l o s e()成员函数也能做到)。这是因为当对象超出范围时,析构函数将其关闭。要建立一缺省输出文件,只要建一个 o f s t r e a m对象即可。

1.4 输入输出流缓冲
        我们要知道的最重要的事是:每个输入输出流对象包含一个指向 s t r e a m b u f的指针,而且,如果需要调用的话, s t r e a m b u f有我们可以调用的成员函数。为了允许我们访问s t r e a m b u f,每个流对象有一个叫做 r d b u f ( )的成员函数,这个函数返回指向对象的s t r e a m b u f的指针。这样,我们可以为下层的 s t r e a m b u f调用任何成员函数。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值