1。关于要不要学习C++Q(l论Q要学,一定要学!Q?br />如今在网上很多ؓ要不要学C++争的不可开交,因ؓ现在JAVAQC#Q。NET都炒的很火,特别是JAVAQ大有炸q_山,停止地球转动之势。用林锐同志的话_其实JAVA只是C++外甥Q跑到舅舅n上撒了一泡尿而已。首先,我们从JAVA 的来历上来说QJAVA的设计初h用来l家用电器设计程序用的Q最初设计者想用C++Q但觉得C++太复杂,在C++的基上做了一些简化,设计ZJAVAQ它的设计思想是跨q_Q所以必d在运行^C安装虚拟机,然后把源E序~译成中间语a在运行。这是一个优点,但我们说L优点都是建立在缺点上的,JAVA的缺点就是运行速度慢,q对于某些系l来说是致命q。况且,JAVA中没有指针,对于制作pȝ软g来说Q这更是无法饶恕的。再来看C++。C++产生于美国贝实验室Q就是发明电话那个公司。设计初h用来改进C的开发效率,C是面向过E的语言Q开发效率底Q贝实验室有大量的CE序员,所以只要在开发效率上提高一点点Q就可以节约数目庞大的成本。C是什么东西?是用来代替汇~编写操作系l的语言Q用C++代替CQ可以得Z个结论:W一QC++必须h同C相当的执行速度Q第二,C++必须比Ch较高的开发效率。执行速度斚wQC++的设计者的思想是在改q开发效率的同时量不增加C++的系l开销Q当然有些地斚w增加开销不可Q也把开销控制在最程度内。具非权威研I报告,C++比C的执行开销多出不到10%。开发效率方面,C++引进了面向对象机Ӟ库机Ӟ最大程度上实现了代码重用,q是软g开发h员的音。C++在改qC的开发效率的同时Q对C的缺陷做了一些修补。C的优点在C++中都得到了很好的保留QC的缺点在C++中都有了改进Q有了更好的解决办法。而且Qؓ了现有的大量CE序l护QC++q全面兼容了C。纵观当今程序语a家族Q我觉得只有C可以C++相提q论Q门当户对,其它语言都无法和C++相提q论。无Z什么角度来_C++都算的上语言中的老大?br />如今Q网上有很多关于C++的争论,其实争论的h都是一些不知情的hQ绝大多数是学校里的学生Q我也曾l这栗在学校里的时候,不知道究竟应该学习什么,要是遇到好的老师q可以,遇到垃圾老师Q垃圑֭校那更p糕。如今,什么MCSEQCCNAQCIW{等认证漫天飞,把h搞的昏头昏脑Q其实这都是认证公司炒的。社会上需要的是有真才实学的hQ而不是需要证书?br />我从大二开始学习编E,一开始学习VBQ后来学习DELPHIQ再后来学习C#Q再后来学习C++Q绕了个大圈子,最后还是绕回来了。而且重新学习数据l构Q操作系l,学习软g工程Q学习大学本U的基本评Q重新读外国的程序设计名著,而这些以前在大学是不屑一儡。劝如今q在学校的师弟师妹们Q努力学习C++?/p>
2。ؓ什么要学习学习C++
1QC++的程序员wh普遍较高Q当Ӟ前提是你必须是高手。我所在的城市Q那些公司根本就招不到合格的C++E序员,一斚wC++E序员要求高Q学习C++的h来少了。当Ӟ怀着q个目的Q你或许永远无法成ؓC++高手Q但我把q个原因攑֜最前面Q可以给大家一个很明确的激励,当你接触C++后,发现从学习中获得乐趣比高的工资更有动力;
2QC++的优势是用来开发大型YӞ从中可以学到很多优秀的Y件设计思想。C++不是软g开发的首选工P一般说来,大多人更愿意学习和用VBQؓ什么,单。简单的另一个方面是功能的局限。微软公司恨不的所有h都学VBQ只有他一家会C++。容易上手,大家都喜Ƣ学Q喜Ƣ用Q很多h拿一?00늚书,看个两三个星期,p得自己是个程序员了,可以开发Y件了Q而且觉得做出来的东西很不错。当软g规模大到一定程度的时候,其他语言p来越无法NQ这时C++的优势就体现出来了。你说做个成l管理系l,Z查询pȝQ用VBQDELPHIQC#QJAVA都行Q但是例如银行,电信Q保险,操作pȝQ数据仓库,囑Ş处理Q编译系l,较底层的软gӞ其他工具几乎是无法完成的。就说C++的指针,JAVA没有Q在遇到数据量交大的数据排序Q搜索,动态内存分配时Q它没有办法了。所以说Q学习C++Q不仅仅是学到的一U语aQ还学习了优U的Y件设计思想?br />3Q学习C++可以学习到计机底层的理论,即不是用C++开发,对计机q行机制的理解,对徏制稳定的pȝQ对q用其他语言Q也是一U促q。这一点,我是在学习过E中体会到的Q所以,要说Z大家可以接受的理由来较难Q大家以后学习就知道了?/p>
3。怎样学习C++Q?br />首先Q我们必L认,学习要讲I方法,有捷径。其ơ,我们q得承认Q学习要下苦功,要务实。上学的时候,书上有个故事Q是关于王o之学习书法的Q王献之问他父亲王o之,学习书法的秘诀是什么,他父亲把他带到后院,指着18口大水_你如果把q里的水都写完了Q就知道书法的秘诀在那里了。这个故事相信很多h都还记得。前几天看梁肇新Q豪杰公司老板Q的《高手箴a》,他说如果你如果愿意利?q时间来成ؓ高手Q那么你只要两三q就会成为高手,如果你想一q成为高手,那么?q也成不了高手。学习要切忌躁Q要脚踏实地。我曄很Qw,l果一直呆在菜鸟堆里,当半q前我静下心来学习C++Q才感觉有真正的q步。现在做WEB开发,虽然我从来不看WEB开发的书,但是我的同事遇到问题Ӟ我经常能一下说出问题的所在。因Z看问题的角度变了。所以,学习C++的第一个方法是Q切忌Qw。其实学M东西都一PƲ速则不达。从基本数据cd看vQ从基本程控制语句写v?br />其次Q教材很重要Q要看经典名著?br />
其次Q教材很重要Q要看经典名著,而且如果p好,最好看原版英文教材?br />l典之所以成为经典,是因为经历了考验沉淀下来的东ѝ去q?月䆾Q当我打{向C++的时候,曑我一位同事咨询,他向我推荐了《C++~程思想》,q说叫我一定要诅R当我读完前面三到四章的时候,发觉自己找C感觉。接下来Q我一口气d了整本书Q当然其中很多东西还是无法真正理解,q是一本很深邃的书。废话少_我现在把我自qq的C++参考书c列出来Q?/p>
1Q《C++入门l典》,原名《The C++ Language Begeining?作者Ivor Horton 此书显易懂极适合入门Q书中包括最基本的程序设计知识,例如基本数据cdQ流E控制语句,函数设计。即使没有Q何程序设计基的hQ看着也不觉得累。书中一些很有特色的事例Q能促进和加p者的理解。但此书的代码风格实在有些糟p?/p>
2Q《C++~程思想?原名《Thinking in C++?作者Bruce Eckell, 此书的名气就不在q里说了.此书最新版?W三?开头部分增加了几章讲C语言的部?然后把读者逐渐引向C++,在讨a的一个特性时,往往L先讲解在C中的解决Ҏ,然后讨论q中Ҏ的局限和不之处,再讨论C++中的解决Ҏ.据我的感?此书作者的初衷是引导CE序员走向C++,但后来发现大多数新生代程序员,非美国的E序员不一定懂C,于是在W三版中加入了介lC的部? 此书最大的特点? 作者善于透过语言现象,看看屏风后面I竟发生了什?例如,昄出生成的汇编语言).消化好这本书QC++水^上一个大台阶Q?/p>
3Q《C++高效~程》,原名《Effect C++》。此书重Ҏ讨C++的一些技术死角,我只看过其中很少的一些章节,在此不作q多评论Q?/p>
4Q《C++ Primer》,作者Stanley B.LippmanQ此书还没有读过Q接下来读这本书。我在网上找了一点对此书特点的描qͼ对C++基本概念和技术全面而且权威的阐qͼ对现代C++~程风格的强调,使本书成为C++初学者的最x南;对于中高U程序员Q本书也是不可或~的参考书。第4版不再强调低层编E技术,而把中心转向标准库的使用。书中很早就开始介l标准库Q示例也已经重新改写Q充分利用了标准库设施。我们也对语a主题叙述的先后次序进行了重新~排Q讲解更加畅Q?/p>
5Q《C++~程语言》,原名《C++ Program Language》,作者乃C++的发明者被誉ؓC++之父的Bjarne StroustrupQ此书我只读了一部分Q说实话Q有些难。此书的作者就是C++的创始hQ发明者,知识非常渊博Q其思想深度q远在前面几位之上。如果你想知道C++I竟能做什么,C++那些希奇古怪的Ҏؓ什么那栯计,那你去参考这本书。另外,阅读此书Ӟ你还会ؓ作者U深邃的思想Q博大的胸怀感觉CU发自内的快乐,舒畅。书中还讲到了很多大型系l设计的Ҏ和技巧。MQ不L书,是作为程序员的一大遗憾。我先阅诅RC++~程思想》,再参考此书。因为《C++~程思想》的作者说Q他写这本书的目的就是ؓ了大家能够参考《C++~程语言》这本书Q?/p>
6Q《C++高质量编E》,作者林锐。此书不属于l典名著Q但我也比较推荐q本书。作者不象国内其他作者那栯腐功利,而是从一个程序员的角度,介绍他在以往开发过E中遇到的问题和U篏的经验,q本书很薄,但其中的思想Ҏ很有用。且语句诙谐q默Q阅读v来很LQ?/p>
M一本书Q都有他的可取之处;M一本书Q都无法解决在学习中遇到的所有问题;M一本书Q都无法替代人的智慧和经验。但是好的教材,可以起到好的指导效果Q可以学习走弯\。但我不怎么看比较薄Q?00以下)的书Q因为对于C++来说Q这L幅Ҏp不清楚,也不看国内作者的教材Q你发现大多是从上面所说的书中抄下来的?/p>
4。C++和VC的区?br />目前我们所说的C++Q通常意义上指标准C++Q就是美国C++标准委员会发布的C++。它定义了一些基本的语言规范语言Ҏ,定义了一个框Ӟq有一个标准库。虽然生于UNIX下,但它不属于某一个^収ͼ某一个厂商,某一个编译器。它是一U统Uͼ一U概cVC是微软公司在WINDOWSq_下的一U开发工P本质上和VBQC#没有什么区别,只是较之底层一些。VC支持标准C++Q但不百分之百支持。一般来_学习C++可以使用VC的编译环境,但是必须要用标准库。还有其他一些C++~译器例如C++ BUIDERQ就是Borland公司生的WINDOWS下的C++~译器,GCC是LINUX下的常用的C++~译器。估计在ҎZ也有相应的C++~译器,因ؓC++处理囑Şpȝ是其牚w?/p>
要学习C++Q就不要从VC学vQ学习VC无法学到真正的C++~程思想Q而你只是学会了用类库而已。C++的特性是什么?C++本质是什么?C++的精华是什么?我觉得ȝ成一句话Q利用面向对象的思想Q解军_型系l的开发问题?/p>
5。学习C++的重?br />如果你学习过C或者了解CQ那么在学习C++的时候更Ҏ受C的媄响,CQC是面向过E的语,C++是面向对象的语言。如果你学习qCQ那么学习C++的重Ҏ掌握C++的新Ҏ,C与C++的区别,C++的面向对象特性,试用C++的风格去~写E序Q用C++的技术去解决问题。或怽认ؓC很不错,但在C++可能有更好的解决办法Q?/p>
如果你学习过JAVAQC#或DELPHIQ那么你应该寚w向对象机制很熟悉。但是,C++中的面向对象机制和上q几U语a有所区别Q例如多重ѝ最好尝试在没有用户界面的环境下~写E序Q还有,指针是C++的精华之一Q所以必L握;
如果你没有编E基Q那q接从C++学vQ这样就没有其他语言的干扰和影响。祝ZQ一开始就接触了这样一U伟大的语言Q?/p>
我觉得,C++的重点可以用三个词来描述Q指针,面向对象Q标准库?/p>
最后,在这里同所有学习C++的程序员共勉Q不要担心学习C++会被淘汰Q我所在的单位q有大量的InformixE序员,而且日子q的很舒服。我时候学书法Q老师常对我说一句话是Q字写的好,哪怕拿一根筷子在嘴巴里咬几下Q都写的好看Q而不在于用什么笔。用C++之父Bjarne Stroustrup的话来说Q只要你在用电脑,你就直接或间接用了C++?/p>
让我们共同学习,共同q步Q相互交,怺促进?/p>
FILE *fpQ?br />fp=("file a","r"); |
FILE *fphzk fphzk=("c:\\hzk16',"rb") |
if((fp=fopen("c:\\hzk16","rb")==NULL) { printf("\nerror on open c:\\hzk16 file!"); getch(); exit(1); } |
#include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } ch=fgetc(fp); while (ch!=EOF) { putchar(ch); ch=fgetc(fp); } fclose(fp); } |
#include<stdio.h> main() { FILE *fp; char ch; if((fp=fopen("string","wt+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); ch=getchar(); while (ch!='\n') { fputc(ch,fp); ch=getchar(); } rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } |
#include<stdio.h> main(int argc,char *argv[]) { FILE *fp1,*fp2; char ch; if(argc==1) { printf("have not enter file name strike any key exit"); getch(); exit(0); } if((fp1=fopen(argv[1],"rt"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } if(argc==2) fp2=stdout; else if((fp2=fopen(argv[2],"wt+"))==NULL) { printf("Cannot open %s\n",argv[1]); getch(); exit(1); } while((ch=fgetc(fp1))!=EOF) fputc(ch,fp2); fclose(fp1); fclose(fp2); } |
#include<stdio.h> main() { FILE *fp; char str[11]; if((fp=fopen("e10_1.c","rt"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } fgets(str,11,fp); printf("%s",str); fclose(fp); } |
#include<stdio.h> main() { FILE *fp; char ch,st[20]; if((fp=fopen("string","at+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("input a string:\n"); scanf("%s",st); fputs(st,fp); rewind(fp); ch=fgetc(fp); while(ch!=EOF) { putchar(ch); ch=fgetc(fp); } printf("\n"); fclose(fp); } |
#include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; fwrite(pp,sizeof(struct stu),2,fp); rewind(fp); fread(qq,sizeof(struct stu),2,fp); printf("\n\nname\tnumber age addr\n"); for(i=0;i<2;i++,qq++) printf("%s\t%5d%7d%s\n",qq->name,qq->num,qq->age,qq->addr); fclose(fp); } |
#include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boya[2],boyb[2],*pp,*qq; main() { FILE *fp; char ch; int i; pp=boya; qq=boyb; if((fp=fopen("stu_list","wb+"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } printf("\ninput data\n"); for(i=0;i<2;i++,pp++) scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr); pp=boya; for(i=0;i<2;i++,pp++) fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp-> addr); rewind(fp); for(i=0;i<2;i++,qq++) fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr); printf("\n\nname\tnumber age addr\n"); qq=boyb; for(i=0;i<2;i++,qq++) printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age, qq->addr); fclose(fp); } |
#include<stdio.h> struct stu { char name[10]; int num; int age; char addr[15]; }boy,*qq; main() { FILE *fp; char ch; int i=1; qq=&boy; if((fp=fopen("stu_list","rb"))==NULL) { printf("Cannot open file strike any key exit!"); getch(); exit(1); } rewind(fp); fseek(fp,i*sizeof(struct stu),0); fread(qq,sizeof(struct stu),1,fp); printf("\n\nname\tnumber age addr\n"); printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age, qq->addr); } |