主题:写了2年的初学者C++基础教程,今天终于出版了《易学C++》
p1s
[专家分:4100] 发布于 2006-11-27 08:42:00
[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/
希望能够结交高手。
最后更新于:2008-05-09 17:20:00
回复列表 (共61个回复)
31 楼
雪光风剑 [专家分:27190] 发布于 2007-02-13 21:09:00
还是写成int main吧
我来这里答疑+寻求答疑两个月
最深刻的体会就是要写标准风格代码
如果一开始就void main
那么新手就会习惯成自然的
作为教材来说,这种做法是不可取的
32 楼
wshong [专家分:1880] 发布于 2007-02-14 11:31:00
敬佩楼主!牛,出书
33 楼
charleyaa [专家分:340] 发布于 2007-02-14 13:04:00
今天才发现这里有这么好的一本书,谢谢楼主!!
34 楼
rj1985 [专家分:20] 发布于 2007-02-16 18:10:00
谢谢,看得通俗易懂,入门很好
35 楼
p1s [专家分:4100] 发布于 2007-03-09 21:06:00
这一章是面向对象初级部分的大杂烩,什么静态成员、友元、操作符重载都在。在钱能的书里面,操作符重载独立成章的。但是我觉得操作符重载和友元隔开的话,友元容易被忘记。至于输入输出流是否独立成章,这个到时候再看。下一章将介绍继承和多态,主要围绕一个文字RPG游戏。相信这个游戏能比较好地解释类与类之间的继承关系,也能引起大家的学习兴趣。为了配合出版工作,下一章将会是网上发布的最后一章。如果某些读者有特殊的需要,可以和我联系索取之后章节的电子版。
本次内容节选:
该程序中出现了两种调用静态成员函数的方法,一种是类名::静态成员函数名(参数表),另一种是对象名.静态成员函数名(参数表),这两种调用方法的效果是相同的。由于静态成员函数是属于类的,不是属于某一个具体对象,所以它分不清到底是访问哪个对象的非静态成员数据,故而不能访问非静态成员数据。
类似于链表类和链表结点类的问题,我们可以用友元类来解决。即链表类是链表结点类的“朋友”,可以直接访问链表结点类的私有成员数据或私有成员函数。显然,要做链表结点类的“朋友”,必须要得到链表结点类的认可。所以我们必须在链表结点类的声明中告诉电脑,链表类是它认可的“朋友”,可以访问它的私有成员。
在声明和定义操作符重载时需要注意以下几点:
(1)操作符只能是C++中存在的一些操作符,自己编造的操作符是不能参与操作符重载的。另外,“::”(域解析操作符)、“.”(成员操作符)、“……?……:……”(条件操作符)和sizeof等操作符不允许重载。
(2)参数表中罗列的是操作符的各个操作数。重载后操作数的个数应该与原来相同。不过如果操作符作为成员函数,则调用者本身是一个操作数,故而参数表中会减少一个操作数。
(3)各个操作数至少要有一个是自定义类型的数据,如结构或类。
(4)尽量不要混乱操作符的含义。如果把加号用在减法上,会使程序的可读性大大下降。
前增量操作符是“先增后赋”,在操作符重载中我们理解为先做自增,然后把操作数本身返回。后增量操作符是“先赋后增”,在这里我们理解为先把操作数的值返回,然后操作数自增。所以,前增量操作返回的是操作数本身,而后增量操作返回的只是一个临时的值。
36 楼
renew [专家分:200] 发布于 2007-03-09 22:11:00
赞,楼主挺有奉献精神的。
最好能搞成电子文档的格式供下载,我也想看看呵
37 楼
yanjuan [专家分:20] 发布于 2007-03-10 10:05:00
大家觉得<<21天学习c++>>这本书如何啊?谢谢啊!
38 楼
雪光风剑 [专家分:27190] 发布于 2007-03-10 11:45:00
[quote]赞,楼主挺有奉献精神的。
最好能搞成电子文档的格式供下载,我也想看看呵[/quote]
怎么觉得想要不劳而获?
39 楼
p1s [专家分:4100] 发布于 2007-07-06 22:44:00
终于将第17章写完了。这一章是整本书中内容最多的一章。虽然C++在继承这块的内容很多,但是我还是做了删减。比如多重继承这种常常被人批判的内容,我只简要介绍了一下概念。对于本科生来说,这些内容应该已经够用。特别是在企业面试的时候,常常是问一些很基础的概念。面向对象的精髓并不是靠看几本书就能了解的,而是要在实际的工程中才能领悟的。
看到众多网友来信与我交流,肯定我的写作风格、向我提出众多宝贵的建议,我感到非常高兴。本章将会是我公布在网上的最后一个章节。之后的2-3章或许大家以后可以在书店里看到。近期我会和各大出版社联系,讨论出版事宜,以便更多的读者能够快速踏入C++程序设计的大门。如果您有在出版社工作的朋友,并且看好我的作品,也欢迎您主动来和我联系!我的邮箱地址为tomatostudio@126.com。
本次内容节选:
如果有一个类,我们可以将其实例化,成为若干个对象。另外,如果我们希望对这个类加以升级改造,我们可以将这个类继承,形成子类(或者称为派生类),被继承的类则称为父类(或者称为基类)。实例化和继承是一个类的两种发展方向。继承能够减少我们开发程序的工作量,提高类的重用性。
如果我们把编写一个类看作是一次生产,那么产品(即编写出来的类)可以有两种用途:一种是将产品直接使用,相当于将类实例化;另一种是将产品用于再生产,相当于将类继承。类在这种不断的“再生产”中变得更为强大、健全。
private是私有继承,或称为私有的实现继承。它主要体现的是父类成员的重用。父类所有的公有、保护成员继承到子类时,类型会发生改变。父类的公有成员在子类中变成了私有成员,父类的保护成员在子类中也变成了私有成员。这时,我们可以利用从父类继承而来的成员函数来实现子类的成员函数,并且不必担心外部直接访问父类的成员函数,破坏了子类的秩序。比如我们认为栈是一种特殊的链表,它只能从链表尾部添加或删除结点,栈的压栈和退栈功能可以方便地由链表类的成员函数实现。但是,如果外部还能直接访问从链表类继承而来的成员函数,那么就可以在栈的任何位置插入结点,栈就会被破坏。
在使用继承的时候,子类必然是在父类的基础上有所改变。如果两者完全相同,这样的继承就失去了意义。同时,不同子类之间具体实现也是有所区别的,否则就出现了一个多余的类。不同的类的同名成员函数有着不同的表现形式,称为多态性。多态性是符合人的认知规律的,即称呼相同,所指不同。比如,学生类及其子类都有学习这个成员函数,但本科生、中学生、小学生的学习内容并不相同;玩家类的子类都有攻击这项技能,但剑士、弓箭手和魔法师的攻击方法不同。
多态是在程序员没有指定调用父类还是某个子类的成员函数时,电脑根据程序员的要求,揣测并选择最合适的成员函数去执行。但是当成员函数的参数格式不同时,程序员在调用成员函数的各种参数无疑就是在暗示到底调用哪个成员函数。这时电脑岂敢自作主张揣测人类的心思?因此,要使用虚函数实现多态性,至少要使各个函数的参数格式也完全相同。
C++中的确能实现多继承,但是在某些问题上并不是处理得很好。比如车和船同时具有长、宽、高等属性,要搞清水陆两用车的长、宽、高到底是从哪个类继承来的,着实要花费一些功夫。应该说,C++中多重继承的思想是优秀的,但是它的实现却是混乱的。有不少人都认为多重继承是C++的一个败笔,它把原本简单的单一继承复杂化了,使程序员很难再把思路理清。所以,即使是经验丰富的程序员,在大多数情况下也不会去使用多重继承。
40 楼
deepin [专家分:50] 发布于 2007-07-07 08:44:00
谢谢楼主的分享!!
我是个新手,谢谢了!
我来回复