回 帖 发 新 帖 刷新版面

主题:写了2年的初学者C++基础教程,今天终于出版了《易学C++》

[img]http://www.tomatostudio.net.cn/images/front2ss.jpg[/img]

[size=3][color=FF0000]本书已交由人民邮电出版社出版发行。[/color]

[b][size=4][color=0000FF]购买《易学C++》网址:[url]http://www.china-pub.com/39862[/url],欢迎大家捧场![/color] [/size][/b]

前 言

高级语言程序设计是各大院校计算机专业的一门专业基础必修课,主要是学习一些程序设计的基础知识和基本思路。学好高级语言程序设计对后继的一些数据结构、软件工程等课程有着重大的影响。而如果一名计算机专业的学生将来想在软件行业有所发展,也需要有着扎实的高级语言程序设计基础。因为高级语言是众多计算机语言中使用最多的。

然而,由于中学里的一些学习问题,各中学毕业的学生在计算机水平方面良莠不齐,有些甚至连一点点程序设计的基础也没有。到了大学里,老师们却因为课时紧张,难以把一些很基本的知识很详细地给学生们解释清楚,以至于日积月累之后,学生们还是觉得什么都不懂。于是,如何能够提高学生的专业水平,更快地把大家领进计算机的世界就显得尤为重要。

本书作者自幼接触并自学了BASIC语言,从初高中开始自学PASCAL语言和Visual Basic,对如何学习和掌握高级语言有一些自己的想法,在帮助一些没有程序设计基础的同学更快入门有一些自己的方法。于是就把这些想法和方法一一罗列出来,编著成书。

学习程序设计是一个循序渐进的漫长过程,在短短的几个学期内是不可能很好地掌握的。在学习过程中要求精求全实在是很有难度。而且
对初学者来说,知道得越多往往就越是迷茫。所以本书将其他教材中一些不常用的知识和原来的一些C语言的知识删去,添加了一些平时常用的算法介绍和一些可能和后继课程有部分关联的知识,以帮助大家更快地掌握高级语言程序设计的精髓。

本书作者也只是一名普通的大学生,在考虑一些非常专业的问题上可能尚有欠缺。而且由于时间较为仓促,书中难免有一些错误或不合理的地方,希望各位高人能够不吝赐教。如果您对本书有什么建议或者意见,请发送邮件到tomatostudio@126.com。

使用指南

本书主要是依照计算机本科专业的实际教学需要来编排内容的。虽然内容的条理可能不及某些专业的C++工具书那么清晰,但是这样的次序让初学者比较容易上手。毕竟那些工具书是面向一些已经掌握C++或有较高的高级语言程序设计基础的读者。编写此书的主旨就是不要一下子把什么都说出来,而是一点一点循序渐进地增长读者的能力。这样,读者就不会一下子被那么多难以接受的概念吓住,以至于失去了继续学习的信心。

本书的主要论述对象是Microsoft Visual C++,对于以前的C语言和Borland的C++不作讨论,以免初学者把各种语言的概念混淆起来,也有效降低了学习的压力。对于一些VC++中存在却不常用的内容,本书一般一笔带过或不予提及。因为这些内容在应试方面不作要求,在实际使用上也可以由其他方法代替。但是,如果你是一位初学者,那么就请务必要看到本书的每一个角落。你所遗落的一句话就有可能是一个知识的关键点。

本书的内容有四个特点:

1、粗体字:读者必须掌握理解的内容,也是每个知识点的精髓或要点。很多初学者容易犯的错误也在粗体字中予以提醒。

2、试试看:把一些可能与一般情况不符甚至矛盾的情况列举出来,鼓励读者上机试验,以得到深刻的结论。这些结论可能对以后的学习有所帮助。所以建议所有有条件的读者务必去试试看。对于没有条件的读者,则需要牢记本书给出的结论。

3、算法时间:向大家介绍一些程序设计的常用算法。其实很多时候一个程序就是把这些算法以不同形式搭建起来。能够掌握这些算法不论是对阅读别人的代码还是自己设计程序都有着很大的帮助。

4、习题:帮助大家巩固已经学习的知识。有些题型则是符合应试的要求。从难度上来说,都算适中。如果读者已经掌握了章节中的知识,那么做这些习题也不会有什么困难。

本书的定位是C++程序设计的教学辅导书,而不是C++的工具书或语法书。如果你想要了解更多深层的内容,请查阅C++的专业工具书。

如果大家感兴趣,可以到[url]http://www.tomatostudio.net.cn[/url]查看。
QQ:149883760
E-mail:tomatostudio@126.com
MSN Space:http://spaces.msn.com/members/OOTTMA/

希望能够结交高手。

回复列表 (共61个回复)

21 楼

[quote]bs楼上的,顶楼主。

我的一些意见:
void main, #include "iostream.h", 没有using namespace std;会带坏newbie的。即便你选择的编译器支持这些,还是建议按c++标准编写教材。
3.1数据类型 表格内long double占用字节在vc6和vc7.1下都是8。
3.1变量的初始化,试试看(11页)2的结论我觉得"不确定的数值"更妥当。
btw.建议页眉或页角添加当前章节号。

[/quote]
感谢您提出的宝贵建议。long double的确是我疏忽了,当时没有把数据类型一个个试过来。

22 楼

[quote]
虽然用 void main 承接了以前的大多的书本,保留了一定的读者!

但是,偶建议还是一切以标准为写作的紧绳!
[/quote]
恩,这个问题很多朋友都提出了。虽然我说明了返回int和void的问题,但是我觉得一开始返回整型初学者会不会觉得不解……
这个要看情况了,看看实际教学情况

23 楼

好,我们期待,不知道还有没有好一本啊!!!!!

24 楼

我現在在學C++
就看你這本
哈哈

25 楼

编程就是'算'和'找',总结的太好了~

26 楼

最好是做成pdf的

27 楼

这一章竟然写了三个月,看来效率有点低下了。好在自己把一些主要的问题都讲清楚了,至于要想写得更好,还是以后再不断改进吧。我在面向对象的开头写了两章短篇,就是为了将最简单的问题讲清楚,而不给读者产生压力。试想如果学习一个完全不懂的概念,前两章就有半本书那么厚,读者一定会以为这个内容很难了。另外最近在高中里教书的时候发现一些初学者常见的问题,于是对前面的章节有所修改和加强。可见,实践是很重要的。
接下来写的思路是这样,面向对象的基本知识主要是围绕一个链表类的程序来说,比如什么构造函数,析构函数,静态成员数据,类模版等等;继承,多态,友元主要围绕一个文字RPG游戏来说。

本次内容节选:

我们已经了解了数据类型和变量的关系。数据类型是各个变量的归类,而变量则是某个数据类型的具体表现,我们称变量为数据类型的一个实例(Instance)。各个变量都有他们的属性:内容和占用内存空间等等;各个变量都有他们的操作:算术运算或逻辑运算等等。从这个角度来看,类和对象的关系就如同数据类型和变量的关系。我们不妨将类看作一种自定义的数据类型,那么对象就是一种属于该类型的变量。

所谓公有,就是外部可以访问的数据或执行的操作。比如一个人的身高(数据)是可以较直接地获得的,一个人吃东西(操作)是可以受外部控制的。私有就是外部不能直接访问的数据或执行的操作。比如一个人的心跳次数(数据)和消化过程(操作),虽然他们都是客观存在,但我们却不能直接地获取心跳数据或控制消化过程。
如果一个类的所有数据和操作都是公有的,那么它将完全暴露在外,同结构一样没有安全性。如果一个类的所有数据和操作都是私有的,那么它将完全与外界隔绝,这样的类也没有存在的意义。

由于数据封装在类的内部,在处理一些问题的时候就需要小心翼翼,不能把成员数据破坏了。以前我们介绍使用const来保护变量(就变成了常量),或保护指针所指向的内容,那么在类中,我们也可以使用const这个关键字来保护成员数据不被成员函数改变。我们把这种成员函数称为常成员函数。

28 楼

不错,通俗易懂。
建议现在写书再也不必去兼顾以前那些“毁人不倦”的不符合标准的写法。
象头文件<iostream.h>,这在VC++2005中都已经不再支持了。

29 楼

头文件的引入中,
引号与尖括号的差别是:
   前者编译器先在文件所在的路径找,
   后者直接在编译器中指定的INCLUDE目录处找...

并非什么万能或标准的问题。。。

30 楼

这一章主要是讲构造函数和析构函数。因为我在学的时候就认为拷贝构造函数就是构造函数的一种重载,所以把它也拉到这个章节里面来了。至于什么无名对象,至少在大学阶段用的机会不会很多,所以干脆就不说了。这段时间又有好多老师、出版社和我联系出版事宜,我想等到下一章写完,差不多也就剩2-3章左右,到那时候可以好好考虑一下出版的问题。

本次内容节选:

既然init函数担负着初始化对象的重任,那么它就必须和对象的声明“出双入对”了。万一忘记对对象进行初始化,程序就可能会出错。这就像在病毒肆虐的今天,保证电脑安全的病毒防火墙必须在开机之后立刻运行一样。万一哪天开了电脑忘记运行病毒防火墙,那么后果可能很严重。不过,你使用的病毒防火墙是你每次开机以后自己去点击运行的么?那样岂不是很麻烦?你是否知道,我们使用的病毒防火墙往往是随系统一起启动的?这给了我们一些启示:有的程序能够随着系统的启动而自动运行,那么会不会有一种函数,随着对象的创建而自动被调用呢?有!那就是构造函数(Constructor)。

根据程序的运行结果,我们发现头结点的构造函数比链表的构造函数优先运行。这也不难理解:构造函数的目的是要初始化成员数据,初始化成员数据的时候这个成员数据是必须存在的。所以当一个成员数据是一个对象的时候,应当先产生这个子对象,于是就先调用了子对象的构造函数。

我们看到,现在即使运行a.Destroy()之后,链表b里面的数据仍然能够正常显示。这是因为深拷贝构造函数是真正意义上的复制了链表a,并且使得链表a和链表b各自独立,互不干扰。这才是自定义拷贝构造函数存在的重要意义。

在学习链表的时候,我们知道结点是动态生成的,如果在程序结束之前不释放内存,就会造成内存泄漏。虽然我们已经编写了成员函数Destroy来删除所有动态生成的结点,但是如果我们不知道这个链表对象何时不再使用,那么调用Destroy的时机对我们来说就是个麻烦了。如果过早地调用,则后面的程序可能会出错。既然有构造函数能随着对象的创建而自动被调用,那么有没有一种函数能随着对象的消亡而自动被调用呢?有!那就是析构函数(Destructor)。

我来回复

您尚未登录,请登录后再回复。点此登录或注册