【C】怎样学习、学好c++ (8/459)

< 上一篇下一篇 >
本帖地址: 复制地址

修改 回帖 引用 楼主: 。棄〃

用户形象图片

一、什么是 C++?

一看我的标题,大概又有人举西红柿了,您慢着点儿,别闪了腰或岔了气!很多人不知道这个问题的正确答案。如果你还认为"C++ 是 C 的超集",那你可是大大落伍了,这是二十年前的答案了。如果你说"C++ 是一种面向对象的程序设计语言",哈哈,沾边,但也不对,在98年 C++ 国际标准公布以后尤其不对!

C++ 之父 Bjarne Stroustrup 曾有一篇论文 Learning Standard C++ as a New Language,《程序员》杂志2001年4月号有陈崴的译文《将标准 C++ 视为一个新语言》,把 C++ 和它那个好像还不是右派的爹彻底划清了界限。文章对 C 和 C++ 在 Complexity(复杂度)和 Efficiency(效率)两方面做了比较,指出 C++ 已经完全不同于 C 的观念,并对如何学习标准 C++ 提出建议。有兴趣的朋友可以看看,很有启发性。

C++ 发展至今,其历史已足够写一本书了,Bjarne 的经典名著 The Design and Evolution of C++,详细记述了 C++ 设计和发展过程中(1979-1994)的种种考虑与妥协,它不讲 C++ 是什么样的,它只讲 C++ 为什么会成为这样。不建议初学者去看这本书,实在是咬不动,我当初已经看得头破血流了,而且这本书只讲到1994年为止,多少有些过时了,如果你已比较好地掌握 C++,并想了解其历史,看看倒是有些参考价值。

C++ 虽然起源于 C,语法也比较相似,其迅速成功并成为主流很大程度上也归功于 C 的成功。但经过多年的发展,其最精妙,最有吸引力的部分正是不同于 C 的那一部分。Koenig & Moo 夫妇在为想成为更好的 C++ 程序员的人提出的3条建议中第1条就是"避免使用指针",你相信吗?指针正是 C 的核心呀。C 的宏、位运算、结构、联合、数组、强制类型转换、指针,在 C++ 程序中都应该尽量避免(在少量涉及底层的程序设计中例外),C++ 语法上强调的是类、对象、模板、标准库、引用、异常和 const 关键字,思想上强调的是面向对象和泛型。

在 Procedural Programming, Object-Based Programming, Object-Oriented Programming, Generic Programming 中,C 仅仅支持第一种,而就是在 Procedural Programming 的程序中,如果使用了标准库,一个 C++ 程序也可以和实现同样功能的 C 程序完全不同。

Bjarne 曾不止一次强调 C++ 不仅仅是一种 Object-Oriented Programming Language,那是 Java,C++ 是一种集各种编程风格于一身的程序设计语言,Object-Oriented Programming 只是其中一种,并不比其它几种风格重要。我目前很怀疑 C++ 对面向对象的支持程度,虽然它一度在这方面风光无限,但多年发展,它并没有形成一个类似于 Java 或 Python 或其它语言那样的类库,也很少取得成功的像样的类库(不能说一个没有,但毕竟很少),反而,在难产到1998年的 C++ 的第一个标准化文本中的库却是基于 Template 和 Generic 的。哈,这多少有些讽刺意味,在别的语言还唧唧喳喳讨好面向对象的时候,C++ 抛下一个媚眼,却转身投入泛型的怀抱。见风使舵的 Java 和 C# 好像上错了贼船,又都赶着往自己身上贴泛型的金,弄得人不人鬼不鬼,当初,Java 可是批判 C++ 过于复杂最起劲的一个,在可以预见的将来,它的复杂程度将不低于 C++。拜托,有点创意好不好,别总让人神经衰弱了!

Java fans 们不要扁我,下次我写"如何学习 Java"时,咱哥们友情后补。

废话太多,第一个问题就此打住。

二、选用什么样的编译器?

这个问题也是初学者经常问的问题,其实一句话,对于初学者来说,现有的较新的编译器,除了易用性外,没有任何区别。

有人总是在用 VC 还是 BCB 还是 GCC 上争论不休,我想如果你能把这三种编译器的区别用出来,你现在就不会看我这篇破玩意儿了。但有人现在还在用 Turbo C++ 3.0/3.1,如果你真想学好 C++,我劝你还是换换的好,那东东确实是个好东东,但已经被 Borland fans 们当作古董收藏起来了(我也留着一套呢,还有 TC 2.0),你也收起来吧,没准什么时候能卖个好价钱。

我要讲的一个重要问题是不要把 VC 与 C++ 混为一谈,也不要把 VC 当作另一种语言。首先,VC 的全称是 Microsoft Visual C++,注意,前面带有公司的名字,即使是 Java,也没有叫过 Sun Java,这就意味着 VC 是一个产品,它是 C++ 众多编译环境中的一种,它不仅仅带有一个 C++ 语言的编译器,它还带有一个用于开发 Windows 应用程序的 Application Framework - Microsoft Foundation Classes Library (MFC),又一个带公司名的家伙,它只是用 C++ 语言在 Windows API 外面加了一层包装而已,省得赤裸裸的,让程序员们在工作的时候总走神去看那些不该看的地方, 这个东西多少让开发 Windows 程序变得更容易一些。呵呵,不要再把 VC 当作语言了。

在易用性层面上,我还是推荐初学者使用 VC,用这个东东的比较多,遇到问题也好找人问。至于版本,6.0 应该够用,但这个版本已经是5年前的东东了,毕竟早了些,与标准的兼容性也多有诟病,如果有条件的话,可以用 VC .NET,这个东东的最新版本是刚刚发布的2003版,我还没见过,我只用过它的上一个版本。经过 C++ 大腕 Lippman 亲手调教过的2003版,据说对标准的兼容性已经有了根本性的转变,管他呢,又是一个宣传用语,只要你不是特意去实验标准中的那些犄角旮旯,现在流行的编译器都已经绝对够用了。

三、选书很重要

这是一个最让人挠头的问题,选什么书总是见仁见智,什么书最好是一个永远找不到标准答案的难题,来我们这个论坛的朋友多半是冲着书来的。我不想评论哪本书好哪本不好,我只是大致列一个书单,简单讲两句。

我的书单并不定位于一个没有任何语言编程基础的初学者,我觉得这样的初学者不适合直接学习 C++ 语言。我的书单定位于那些有其它语言的一定的编程基础的 C++ 初学者,他至少应该知道什么是变量,什么是运算符,什么是表达式,关键字,语句,程序,至少应该知道赋值语句是干什么的,分支判断语句干什么,循环语句干什么,当然他不必知道 C/C++ 的词法和语法,也就是说他有以上的概念,但不知道这些东西在 C/C++ 中是如何实现的。在这个基础上,我把书单分为入门类、进阶类、应用技巧类。

入门类:

 


C++ Primer, 3rd Edition

Thinking in C++, 2nd Edition

C++ 大学教程(这本书我没看过,但不少初学者说不错,留此存目)

The C++ Standard Library: A Tutorial and Reference

 

进阶类:

 

The C++ Programming Language, Special Edition

The Design and Evolution of C++

Inside C++ Object Model

C++ Templates: The Complete Guide

STL 源码剖析

Generic Programming and the STL

Modern C++ Design: Generic Programming and Design Patterns Applied

 

应用技巧类:

 

Effective C++, 2nd Editon

More Effective C++

Exceptional C++

More Exceptional C++

Effective STL

Ruminations on C++

回到帖子顶部

回帖 引用 1楼~陈年☆旧梦~

用户形象图片

多学多练多做啊!没什么捷径的
回到帖子顶部

回帖 引用 2楼尛妸愛靚

用户形象图片

不懂不懂呀!!!~~
回到帖子顶部

回帖 引用 3楼猫的魔术

用户形象图片

第一,不懂,第二,对我没有什么实际意义,第三....我先把3D MAX搞明白再考虑C++吧...
回到帖子顶部

回帖 引用 4楼 !_隨風_!

用户形象图片

如果你能把3D MAX搞明白的话,那你一定能把C++搞明白!
回到帖子顶部

回帖 引用 5楼夜 半 孤 鹤

用户形象图片

 

 

  简单...

 

回到帖子顶部

回帖 引用 6楼志刚02小叮当

用户形象图片

怎么q吧中的学c++ 的人怎么少啊  可怜啊 很好的东西啊  
回到帖子顶部

回帖 引用 7楼莞鎂啲主題麯

用户形象图片

可能是吧!相信只要认真学肯定会学好的!
回到帖子顶部

回帖 引用 8楼ㄣ┽莣鋽壹苆

用户形象图片

[游客]



   
可能是吧!相信只要认真学肯定会学好的! 
回到帖子顶部
个人信息
  • 荣誉+3
  • 荣誉+2
  • 荣誉+1
  • 荣誉-1
  • 荣誉-2
  • 荣誉-3
发表留言
  • 文章不错!
  • 精华好文!
  • 支持原创文章!
  • 帖子图文并茂,好!
  • 真知灼见,说得好!
  • 恶意广告
  • 违规内容
  • 严重灌水
  • 重复发帖
  • 标题党
你确定要删除此楼层吗
扣20点经验值

快速回复进入高级回复

插入图片 选择表情

验证码 看不清?换一张(不区分大小写)

[完成后按Ctrl+Enter发表]
[回复须知]