CSDN博客

img owl2008

《c++ primer》读书笔记4

发表于2004/7/15 14:06:00  1808人阅读

笔记范围:1.5

 

本节的内容不是很难,学过一点编程的人都会很容易接受,但是,我一直以来就有一种感觉。自己用的最多但又用的最糊涂的也就是i/o系统,很明显i/o实现了对计算机设备的直接操作。在c++里我们知道它是通过ios类的对象来完成的。从感觉上讲,远远不如c来的直接,明白。当然这样做的好处是大大简单了我们的操作,但是不幸的是这会给我们的理解造成一定的困难,下面我将提出自己疑问。

第一,      大家都知道,我们的io操作是通过三个对象来完成的。cincoutcerr。作者在描述的时候用了“绑定”这个词,很明显被抽象的数据类型和具体设备实现了完美的对接。但是我的问题是,从ADT的思路来说,这些对象封装了那许数据?提供那些操作?这些数据和接口是如何对设备进行控制的?很显然,以我们现在的知识很难回答这些问题。就算是自以为合理的估计也不能,但是这样的思考,有助于我们对类设计思维的熟悉,但是思考到此为止罢。不然我就误人子弟了。

第二,      还有一个问题,初学者也许会问,作者告诉我们coutcerr都可以用来输出。他们的区别一个是一般的输出,一个是输出错误信息。可是这样的解释并不能使我们这些好奇的人满意。于是我做了个恶作剧,改写了我们那个知名的”hello world!”

int main() {

             cerr<<”hello world!”<<endl;

             return 1;

          }

       事实证明 用户如果不看代码。他们不会知道自己看到的是个err。那么这两个对象的区别只是个习惯或约定吗?我们同样不能解释。把它留着罢,相信总会“悟”的

第三,      我想谈谈那个“endl”,在很多教材里把它等价于”/n”正确吗?no,你可以写下如下句子。

cout<<”aaa”

a=getchar();//.假设a已经定义

cout<<a;

VC6中你会发现输入输出的顺序乱了(刚才在VC++.NET 2003又恢复正常了、奇怪。因此不建议在c++中用c的东西),为什么呢?作者告诉我们endl除了/n的功能外还有个刷新的功能,刷新什么?看仔细点,刷新缓冲区。什么是缓冲区?哦。这个问题也许你需要一些别的知识,比如。《计算机组成原理》

关于文件的操作,与单文件非常类似,唯一要注意的是流进出的参照物、内存?or 文件?

笔记的最后,我还是要提醒大家。我提出了很多牛角尖的问题。只是对初学者的思考方法提出一些个人建议。对于这些问题本身有些并没有讨论价值。有些不是现在该解决的问题。在这节里你的任务其实很简单,搞清每个对象和运算符的作用。就是这样,c++之父把c++说成难学易用的语言,我们可以理解这句话的涵义。要不断的想起这句话,

0 0

相关博文

我的热门文章

img
取 消
img