V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tonyzzp
V2EX  ›  程序员

搞过两年JAVA,想学c++,求指教

  •  
  •   tonyzzp · 2013-08-26 17:56:17 +08:00 · 9543 次点击
    这是一个创建于 4110 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从事了2年android开发,目前好像基本只会java这一门语言。。。。。
    想学c++,一看书好厚一本啊!!
    刚看完c primer ,也没看太细,完全没有任何实战经验。。
    现在想学c++要怎么下手?

    虽然我知道没有什么可以速成的。但我真的想快速入门。。求别喷。
    34 条回复    1970-01-01 08:00:00 +08:00
    sgissb1
        1
    sgissb1  
       2013-08-26 18:19:40 +08:00
    人家都是c++转容易上手的语言,您可好倒过来。

    这门语言是欲速则不达。和java有很大的差别。
    tonyzzp
        2
    tonyzzp  
    OP
       2013-08-26 18:30:02 +08:00
    @sgissb1 以前在学校java se和javaee都做过课程设计,所以基本只学会了java,。 c++完全没学。。
    chchwy
        3
    chchwy  
       2013-08-26 18:46:02 +08:00
    重點不是語言,是應用。否則學了也只是學個語法。您想用C++來做什麼?
    fangzhzh
        4
    fangzhzh  
       2013-08-26 19:20:52 +08:00 via Android
    说到c++ 语法也很重要 非常重要。
    felix021
        5
    felix021  
       2013-08-26 19:25:45 +08:00
    建议是先从C语言开始学起。

    Java程序员缺少的是对底层的理解,可惜的是好多java程序员就满足于此不思进取……在此恭喜LZ跳出桎梏。
    sgissb1
        6
    sgissb1  
       2013-08-26 20:27:45 +08:00
    @tonyzzp 你应该从基础开始,毕竟从语言分工上来说,c c++都是偏底的。

    和楼上说的差不多,你先看看c。如果吃力,建议吧计算机基础课程再回顾一下。
    wity_lv
        7
    wity_lv  
       2013-08-27 07:35:41 +08:00
    学之前先推荐一本书 《Unix编程艺术》,之后再学学C.
    jianghu52
        8
    jianghu52  
       2013-08-27 08:30:46 +08:00
    呵呵。难得有人愿意学c++。其实java本身已经很博大精深了。2年时间除非你接触的都是底层项目,不然真的java都还没办法吃透吧。
    holmesabc
        9
    holmesabc  
       2013-08-27 09:32:54 +08:00
    我也在看C++。当然主要为了NDK,以及cocos2dx。
    快速学习语法倒是可以,但标准库这个还是必须要花时间的。
    c++ primer 里面的习题如果一时想不通,最好还是动手练练。当然习题这东西是用来解惑,不能指望应用上手。
    感觉cocos2dx已经封的比较傻瓜了,基本可以直接写了,用这个来入门练手,个人感觉可以。

    ps: 看了点C++后,真感觉那个coolshell上说的,java想来填一些C++的坑还是很有道理的。
    tonyzzp
        10
    tonyzzp  
    OP
       2013-08-27 10:37:24 +08:00
    @holmesabc 是啊。我也是为了ndk和 2dx,虽然不太喜欢cocos2d,但没办法。。好像做游戏的都在用。。。
    tonyzzp
        11
    tonyzzp  
    OP
       2013-08-27 10:38:15 +08:00
    @jianghu52 感觉一直在打酱油,当然不敢说精通。暂时也没那志向,只求熟练应用。
    tonyzzp
        12
    tonyzzp  
    OP
       2013-08-27 10:39:50 +08:00
    @felix021 搞java的都不思进取吗。。被java和eclipse惯坏了,确实看其他的都不顺眼。。近几个月项目用lua,骂惨了。。。
    felix021
        13
    felix021  
       2013-08-27 11:01:59 +08:00   ❤️ 1
    @tonyzzp 我觉得跟OOP的过度宣传关系挺大的,很多Java程序员自以为会了Java,会了OOP,还有什么不能解决的呢。

    记得很早以前看过一个帖子讨论Java和C/C++效率的问题,原帖已经找不到了,但是其中一段基本上跟这里说的类似:http://tech.ccidnet.com/art/3741/20050507/542505_1.html

    对于不理解底层的Java程序员来说,根本没有可能认识到这种说法的逻辑错误——也就是Java在效率上的根本缺陷。

    p.s. 还找到这篇 http://hi.baidu.com/sppeivan/item/7f4ab2f6af481ad043c36a3d
    作者把 "C++写的JVM没有Java写的JVM快" 这样某个具体项目的结果与 "Java和C++的效率比较" 这两个东西混淆起来了。这让我想起前一段时间流传的某个C++代码(插入一个没用的1亿次循环那个)。
    tonyzzp
        14
    tonyzzp  
    OP
       2013-08-27 11:12:23 +08:00
    @felix021 弱弱问一句,java写在jvm要跑在什么环境上。。
    felix021
        15
    felix021  
       2013-08-27 11:27:55 +08:00
    timonwong
        16
    timonwong  
       2013-08-27 11:39:58 +08:00   ❤️ 1
    @tonyzzp Java写JVM只能玩票,虽然现在有了JIT以及使用primitive types(OO,呵呵)能达到接近(或超过,看实际代码、编译器、硬件环境等)C/C++的性能,但是,一个软件是一个系统,一套生态环境各种性能损伤是会累加起来的(以下基本对JVM, .net CLR, blahblahblah都有效):
    - 数据类型的内存overhead对cache line的伤害
    - GC时的挂起以及Overhead(这个就是为什么基本没有靠谱的游戏引擎用Java来做的主要原因,同理还有图像、音视频处理等等等等等,在移动终端上情况尤其严重,服务器上到没啥)
    sdysj
        17
    sdysj  
       2013-08-27 12:18:51 +08:00
    晕,摆脱不了问这种低级问题的最好不要再换什么语言了。
    xiaoye5200
        18
    xiaoye5200  
       2013-08-27 12:49:17 +08:00
    搞定多继承和指针就行啦。
    smallghost
        19
    smallghost  
       2013-08-27 14:43:38 +08:00
    java不是很有前途吗?干嘛换C++呢?
    tonyzzp
        20
    tonyzzp  
    OP
       2013-08-27 15:22:47 +08:00
    @smallghost android游戏现在全都在用cocos2d-x啊。没办法,再不学要被淘汰了。
    shawnelee88
        21
    shawnelee88  
       2013-08-27 15:34:26 +08:00   ❤️ 1
    C嘛 核心就是指针
    C++嘛 主要应该是比C多了面向对象的思想,封装,继承,多态
    记得貌似那本书里面看过,貌似就是说可以完全把c++当一门新的语言来学
    c++ primer是本好书哈
    快速入门有一本书:《accelerated c++》
    xiiing
        22
    xiiing  
       2013-08-27 15:51:36 +08:00   ❤️ 1
    C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并不是一门成熟的编程语言,因为太容易犯错了。所以,你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种难以训服的猛兽来看待。

    多问“为什么要这样”的问题。学习C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比如:很多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?完全不是这样的,C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这样的原因,你才能学好C++。有空看看《C++演化和设计》一书。

    看书,大量的C++书。你可以按如下先后顺序阅读(下面这些书,我花了大约4-5年的时间,今天我还在随时温习)
    《C++ Primer》,这本初级读本可能让会你啃得很痛苦,所有的语言的特性和为什么都在里面了,好好读读。当然由C++之父写的《C++程序设计语言》也不错。两本看一本就好了(我看的是前者)。
    了解C++的语法仅仅是万里长征的第一步,你还需要看看《Effective C++》和《More Effective C++》这两本书并不厚,但我从02年就一直看到现在,每次读我都有新的体会,这两本书太经典了。如果你对C语言不熟,这两本书会让你回去补C语言的课。
    Think in C++同样是另一本经典之极的书,学c++必读,但是中文版的翻译的很不好,所以还是去读英文版的吧。
    《C++沉思录》同样非常值得一读,这里教的不是编程,而是思考的方法,这是相当珍贵的。
    《Exceptional C++》和《More Exceptional C++》让你看看各种问题的解决方法和一些常见的经典错误。
    《Advanced C++》和《Modern C++》可以让你知道C++各种神奇的用法。
    《泛型编程与STL》是把C++实践到了极致的东西。很强大。STL——神一样的模板库(容器,算法和函数对象),不得不服。
    《深入探索C++对象模型》让你了解编译器下的C++是什么样的,让你了解C++的性能并不差。这个对于C++的程序员太关键了。我以前写过的《C++虚函数表解析》还有《C++对象内存布局》属于这个范畴。
    ----------------------------
    转自酷壳http://coolshell.cn/articles/4119.html
    kid177
        23
    kid177  
       2013-08-27 19:16:35 +08:00
    囧,lz怎么先学java后学c++。又是外面培训班搞的鬼吗=。=
    leavic
        24
    leavic  
       2013-08-27 20:30:20 +08:00
    C++是一门看语法都能把人看傻的语言
    lfzyx
        25
    lfzyx  
       2013-08-27 23:54:24 +08:00
    java那么多框架,搞项目多快啊
    maxiaojun
        26
    maxiaojun  
       2013-08-28 02:14:05 +08:00   ❤️ 1
    首先我强迫症一下,Java、C++,大小写也是正确拼写的一部分。

    学C++,自然不能用来历不明的书,毕竟VC6的遗毒可能还没有完全消失。《C++ Primer》说是经典,其实我倒觉得读起来比较枯燥乏味,因为基本是罗列语言特性。只不过其他书,不是在语言上太浅或不全,就是太偏,不适合初学,所以只要一本书的话依然选择《C++ Primer》。

    在实践中,不是太多C++库完全按照现代标准C++的思想设计,或者说得夸张一些,一个库一个设计(谁让C++太灵活)。所以如果楼主有了具体的开发目标,不如直接通过例子学习那个开发目标的方言,然后结合资料理解原理。

    最后推荐两个网站:
    http://www.cplusplus.com/
    http://en.cppreference.com/w/
    tonyzzp
        27
    tonyzzp  
    OP
       2013-08-28 10:05:11 +08:00
    @kid177 在学校c++和java都开过课。但c++完全没有学过。。
    tonyzzp
        28
    tonyzzp  
    OP
       2013-08-28 10:10:14 +08:00
    @maxiaojun cplusplus.com这个网站很好啊,收藏了。
    bengol
        29
    bengol  
       2013-08-28 18:23:21 +08:00
    @tonyzzp 推荐<<the c++ programming language>>多读几遍
    ovjaywang
        30
    ovjaywang  
       2013-08-28 20:07:33 +08:00
    其实吧,我觉得,把研不研究和衡量java程序猿思不思进取套在一起完全没必要。

    学程序写程序的要义还是应用,有一个良好的驱动和动力才是进步的关键,职业发展和个人职业需要和潜能开发协同就好。
    luoqeng
        31
    luoqeng  
       2013-08-28 21:54:46 +08:00
    印像中,你想知道一門語言有哪些糟點,只要看 Effective 的書籍就行了。
    LokiSharp
        32
    LokiSharp  
       2013-08-28 21:59:19 +08:00
    别学 C++,学 C 就足够了。
    hourui
        33
    hourui  
       2013-08-29 00:07:06 +08:00
    PHP -> C/C++ 的飘过~~~
    不要对STL产生依赖, 那就是一个深不见底的大坑~~~
    nil
        34
    nil  
       2013-08-30 07:04:39 +08:00
    直接上iOS开发好了,你会发现语言根本就不是事啊,也不应该是个事啊~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:09 · PVG 09:09 · LAX 17:09 · JFK 20:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.