V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
kerrspace
V2EX  ›  程序员

萌新求教一下大佬们 C++教材

  •  
  •   kerrspace · 2022-08-15 19:28:16 +08:00 · 2930 次点击
    这是一个创建于 863 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟我 C++语法没有大问题,用 C++做数据结构和算法问题也不大

    小弟问题集中在 C++的类上,我最近在看一些非常复杂且专业的代码,其特征是,类的成员里面包含大量其它类的实例( object ),这些“其它类”自己又包含着更加巨量的其它类,这样一层一层嵌套着的,其中夹杂着继承多态 etc 。小弟我看的是头晕眼花产生不知如何下手的感觉了已经。很多面向流程编程里面非常轻松的任务,譬如说从文件里面读取字符串,被各种类层层包装和抽象以后已经不知道如何实现了

    所以小弟想请教一下各位程序员先辈大佬,有没有什么 C++教材、资源是专攻的设计和解读的(不是语法而是应用)?

    22 条回复    2022-08-16 14:09:56 +08:00
    liuxingdeyu
        1
    liuxingdeyu  
       2022-08-15 19:31:29 +08:00
    个人觉得先 c++ primer plus 然后再看 c++primer
    FrankHB
        2
    FrankHB  
       2022-08-15 19:38:41 +08:00   ❤️ 1
    看书你速成不进。
    正经学 C++的我都是建议自己查 eel.is/c++draft 。不习惯索引就 cppreference 凑数。

    但是所谓专攻什么类的就别指望了。虽然类占了几个 Clause ,但说白了也就是一种类型构造,在整个体系中不配占多少篇幅。近 20 年内会拿这个当重点讲的材料基本都可以直接当作是质量比较差的。

    还有别自己骗自己。类都拎不清楚,模板呢?你写数据结构没用过?

    虽说正经意义上这里有没有说得清楚的语法(syntax)都是个问题。
    zxCoder
        3
    zxCoder  
       2022-08-15 19:49:27 +08:00
    那就是语法有问题了啊!!!

    拿 c++做数据结构和算法,你说的应该是刷题 leetcode 那种吧,那个顶多算个 c with stl 吧

    c++的语法要是没特别大的兴趣,或者是有项目驱动,感觉没个三五年啃不下来

    推荐下 a tour of c++ 这本书(虽然我没看完,看一半就弃坑了
    kerrspace
        4
    kerrspace  
    OP
       2022-08-15 19:56:22 +08:00
    @FrankHB 模版当然用过,我的问题是如何 cope with 大量的,嵌套的,你不知道明确目的的类(项目只有极其破碎的文档),说白了就是如何处理此类问题的方法论。在处理算法和数据结构的时候少量的,目的明确的(这是自己写的当然目的明确了)类并不是问题
    zeal7s
        5
    zeal7s  
       2022-08-15 19:59:08 +08:00
    @kerrspace 单步调试咯
    SunBK201
        6
    SunBK201  
       2022-08-15 20:01:45 +08:00
    如果语法没有什么大问题,那接下来读再多的教材提升也不大,你接下来应该要多读开源项目的源码,C/C++项目各种数据结构( struct or class )相互嵌套是很正常的,你需要多读花时间适应,可以起步不要读太复杂的项目,先从简单的著名开源项目开始,主要是学习其设计思想、工程构建的思想,这点是最难的,需要花时间。可以读下这本教材: http://aosabook.org/en/index.html
    FrankHB
        7
    FrankHB  
       2022-08-15 20:03:27 +08:00   ❤️ 1
    @kerrspace 大量的,比如 std 里的容器实现那种算不?

    不明确目的那可能不是你不懂怎么看代码的问题,而是设计文档不够,你撞上得对着源码逆向设计的坑了。再清楚怎么看源码的技巧也不保证能猜对目的,除非你自己刚好写过类似的。
    要是这个问题,找 PM 帮忙,否则就凉拌了。
    kerrspace
        8
    kerrspace  
    OP
       2022-08-15 20:09:03 +08:00
    @SunBK201 感谢您的指导!!!“多读开源项目的源码” 我记住了
    hankai17
        9
    hankai17  
       2022-08-15 20:09:48 +08:00
    我觉得 重点应该是抽象 对象间关系 生命周期
    而不是 C++语言这种
    aqtata
        10
    aqtata  
       2022-08-15 20:27:24 +08:00
    画个 UML 类图,理清各个类的作用及之间的关系,就知道从哪下手了。
    最后你会发现一个 dog 类里面 has 了一个 cat ,恭喜你发现了一座屎山,慢慢吃吧。。
    apake
        11
    apake  
       2022-08-15 20:28:14 +08:00 via Android
    建议去看面向对象设计,而不是 c++语言。 参看书目,
    apake
        12
    apake  
       2022-08-15 20:28:40 +08:00 via Android
    冒号课堂,head first design pattern
    Hsinyao
        13
    Hsinyao  
       2022-08-15 20:42:44 +08:00 via iPhone
    先看 csapp ,把 C 语言学透了
    yanqiyu
        14
    yanqiyu  
       2022-08-15 20:59:31 +08:00 via Android
    @FrankHB 推荐看标准 draft 给新手就不现实了,这东西用来语法律师间对线还算好用,用来学习语言过于弯弯绕
    FrankHB
        15
    FrankHB  
       2022-08-15 21:07:34 +08:00   ❤️ 1
    @yanqiyu 学 C++ 到能干活这事本身就是一个比单纯看文档高得多的技术壁垒,一开始就直接用最权威文献避免在各种二手来源之间脑补翻译掉坑还明显更省时间。
    越来越多的改动现在其它材料都跟不上了,如果始终适应不了找对东西看,那么看不懂日常代码也是迟早的事。
    levelworm
        16
    levelworm  
       2022-08-15 22:04:37 +08:00 via Android
    game programming patterns , 免费的。主要是设计模式,感觉和你的需求比较贴近。
    mingl0280
        17
    mingl0280  
       2022-08-16 00:06:38 +08:00
    你这个需求不需要一本教材,而是需要一个好的 IDE……
    这根本不是教材能解决的问题……
    你需要的是 Ctrl+左键直接飞进类里看的这个功能。
    littlewing
        18
    littlewing  
       2022-08-16 00:16:14 +08:00
    首先,你这个问题和 C++没任何关系,你应该看设计模式的书
    其次,你可能需要一个强大的 IDE ,比如 CLion
    LuckyPocketWatch
        19
    LuckyPocketWatch  
       2022-08-16 01:09:09 +08:00
    1.代码嵌套是 C++的主要特征,因为 C++强调封装,你翻下 STL 的源代码就能了解到了,嵌套十几层是正常,这个没任何办法,工业级别的 C++代码都是这种,你阅读这种这种代码只能靠硬啃,这个和算法无关

    2.对楼主的“语法没有大问题”表示怀疑,C++的语法可能比你想象的要复杂一些,可以找几个 STL 相关类的代码看下,如果你看不懂或者有很多不解,那你的语法可能存在问题

    3 。如果需要类有关的教材,《 C++ Primer Plus 》第 10-14 章,详细讲解了 C++各种类的基础只是,如果遇到模板类,可以参考《 C++ Template 》的第 3-10 章(该书第二版目前无中文版),但上述没有类的基础知识,并没有牵扯到类的设计,如果需要了解类的设计,建议直接阅读源代码(参考 1 ,硬啃)
    ivvei
        20
    ivvei  
       2022-08-16 09:18:00 +08:00
    看不懂就别看了。类套类都能拿出来说,那是你编程实践不够的问题了啊。多写写,写多了你就对别人的常见做法有更深的认识了。光看书哪管用。
    C++不同的人写出来的东西差异可能大得像是两个语言。实在不习惯别人的做法也不必强求。各人有各人的思路,并不是只有一条道可走。
    cwaken
        21
    cwaken  
       2022-08-16 14:07:45 +08:00 via iPhone
    没啥必要,基本理解基类,继承类就行了。写点纯虚、模版,差不多就这样。
    cwaken
        22
    cwaken  
       2022-08-16 14:09:56 +08:00 via iPhone
    stl 很多很大,精通 stl ,也可以被称作精通 c++了,那你觉得可能精通吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3071 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:33 · PVG 20:33 · LAX 04:33 · JFK 07:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.