搞过两年JAVA,想学c++,求指教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要回答技术问题时复制粘贴 AI 生成的内容
tonyzzp
V2EX    程序员

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

  •  
  •   tonyzzp 2013-08-26 17:56:17 +08:00 9985 次点击
    这是一个创建于 4438 天前的主题,其中的信息可能已经有所发展或是发生改变。
    从事了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     Solana     3445 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 04:40 PVG 12:40 LAX 21:40 JFK 00:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86