代码之家  ›  专栏  ›  技术社区  ›  ismail

我应该如何编码才能进入高级C++的深度?

  •  10
  • ismail  · 技术社区  · 5 年前

    我正在寻找项目建议,这会迫使我用“先进的C++”来“弄脏我的手”。我所说的项目将利用语言的全部功能(stl甚至boost(还没有使用太多))。

    为什么?因为我想学习,我想找到新的挑战。在工作中,事情开始变得无聊了,真的。我习惯于不断地遇到新事物、新想法和新特性。正如您所能想象的,大多数时候这不是传统公司代码的情况。尽管如此,看看这里的一些问题和答案,深入研究模板、共享指针和所有我发现自己丢失的东西,不知道答案,甚至更糟——甚至不了解发生了什么。

    这就是为什么我正在寻找一些我可以自己编码的东西,最好只使用C++(+Boost)——命令行实用程序,不需要图形。我真的不想加入任何开源社区。我知道,看别人的代码是有帮助的。但这是我在工作中经常做的,所以…不用了,谢谢。这个项目可以是任何有意义或无意义的东西,一个有用的实用工具,或者只是一些没有实际用途的东西。唯一的要求是,它会迫使我真正测试我的C++技能。或者至少它应该是非常困难的,甚至是不可能的代码与C++的基本知识-我是那种人从来没有满意的代码,只是工作,所以我相信这将迫使我学习。但请记住,我是一个工人,我的时间是有限的,所以像“编写你自己的操作系统”这样的回答真的没什么帮助。

    11 回复  |  直到 9 年前
        1
  •  6
  •   Community Egal    7 年前

    我应该如何编码才能进入高级C++的深度?

    1. 了解更多,
    2. 更多的学习,
    3. 了解更多。

    不,我不是在开玩笑。一点也不。大约15年前我开始学习C++,我还在定期学习新的东西。

    看一看 The Definitive C++ Book Guide and List 做你的选择。
    我建议 现代C++设计 安德烈·亚历山德里斯科和 C++模板的完整指南 由Vandevoorde&Josuttis提供。这两个单独的输入足以让一个程序员在几个月内获得新的想法,如果不是几年的话。(请注意,按这个顺序阅读它们有一个好处,那就是安德烈的书比较薄,让你想读另一本书,只是为了全面了解他写的东西。按相反的顺序阅读它们的好处是,你不会像安德烈的书中那样经常迷路。不管你喜欢什么。)

        2
  •  4
  •   the_mandrill    14 年前

    你提到过创建“一个无用的工具”。相反,我建议您考虑一个对您个人有用的应用程序或实用程序,或者替换一个您已经使用的应用程序,您可以根据自己的需求、工作流、美学等进行设计。选择一些您想从这个项目中学习的特定东西,例如智能指针、Boost、templ元编程,正则表达式,多线程,网络。然后讨论如何使用所选技术实现应用程序。只要有一点编码要做,你就知道该怎么做,然后停下来,强迫自己思考如何用新的习语来做。例如,尝试只使用智能指针编写应用程序。

    我发现,创建一个愚蠢的小演示应用程序的危险在于,你没有任何动力去完成它。在头脑中有一个对你有用的工具的目标要好得多。这正是我目前正在做的:我有一个非常复杂的工作流程,用于导入照片、标记照片、重命名和编辑,所以我准备用C和WPF编写一个应用程序来为我做这件事。这给了我一个动力,让我看穿这个项目。

    强迫自己用不熟悉的技巧来解决熟悉的问题是一个很好的学习工具。

        3
  •  2
  •   cristobalito    14 年前

    类似于矩阵数学库的东西可能是沿着你所寻找的方向排列的。算法和容器的大量潜在用途。这一切都是在头脑中完成的,但如果你想找些快速而肮脏的东西来试一下,那就是我想要的。

        4
  •  1
  •   Byron Whitlock    14 年前

    编写分叉或多线程的Web服务器。写LISP。创建一个数据库(整个实现,SQL可选)。

        5
  •  1
  •   user390086    14 年前

    我做了Stroustrup的C++编程语言的所有练习:在大约6个月的过程中的特别版。这是值得的。

        6
  •  0
  •   adamk    14 年前

    选择任何高级数据结构(即树、优先级队列等)并实现它。

    这样,您将学习如何:
    -以OOP方式设计
    -提供有用且一致的API
    -正确地使用继承、模板、内联函数来完成实现目标
    -编写跨平台代码
    -编写综合单元测试

    使用STL代码作为应该如何进行操作的参考。

        7
  •  0
  •   Gustavo V    14 年前

    我应该如何编码才能进入高级C++的深度?

    C++没有任何真实性 先进的 特点,语言做得很好,先进的特点是使用了世界各地存在的许多图书馆。

    来自数学库、图形、通信、windows/x-windows/kde/gnome等。

    如果你想学习一个成熟的交流图书馆,我建议使用 The ADAPTIVE Communication Environment (ACE(TM)) 这是一个有点旧的时尚,但有很多语言的先进概念。

    具有很高的学习曲线,但适用于所有市长 companies 全世界。

    另一方面,避免使用图形实用程序是受虐狂,因为你在任何图形用户界面都能解决的事情上浪费时间。

    您可以使用NetBeans或Eclipse作为多平台、kde Developer for Linux(with kde)、MS Visual Studio in Windows等。

        8
  •  0
  •   Doc    14 年前

    尝试编写花哨的内存池。你的手很快就会变脏。如果这还不够,请添加垃圾收集功能;)

        9
  •  0
  •   Juliano    14 年前

    C++剖析工具会让你看到语言的深度。

        10
  •  0
  •   utnapistim    14 年前

    这个项目可以是任何东西, 有意义的或无意义的,有用的 实用性或者只是一些东西 没有真正的用法。

    做点有用的东西要好得多。你可以使用它(在某种程度上使用你自己的应用程序会让你更快乐),你也可以共享它(开源项目——或者不共享)。

    唯一的要求是 强迫我真正测试我的C++技能。

    好吧,我脑子里有一些想法:

    为某些内容(表达式、简单语言、XML、逻辑表达式)编写解析器。更好的是,为prolog类语言编写一个解析器/解释器(定义谓词、对象和关系),然后让应用程序对给定的规则进行推理,最终得到结果。

    编写一个正则表达式包或一个正则表达式调试器(提供一个字符串和一个模式,并告诉您该字符串在模式中的匹配点)。在编写复杂的正则表达式时,这样的应用程序将非常有用。

    编写一个XML包以包含在Boost中(嘿,您需要一些强制您 真正考验 你的技能)。

    编写一个具有完全支持的逻辑操作的模糊逻辑值模块(假设有五个真值:假、可能假、未知、可能真、真)。

    编写一个人工智能包,使您能够轻松地设计和实现具有自定义学习/反馈功能的各种神经网络。

    或者至少应该是 难以或甚至不可能编码 具有C++基础知识

    有了C的基本知识,您就可以编写图形平台、操作系统和数据库管理系统、数学和加密软件包等(实际上是任何东西)。什么都没有 不可能用C++的基本知识进行编码 )

    你的想象力真的是你的极限。

        11
  •  -1
  •   Bruno Brant    14 年前

    一个相当客观的答案:我一直认为OO开发最强大的功能是多态性。在处理设计模式时,最好观察它的使用。

    所以,我建议 Design Pattern bible 通过gof和编写使用它的代码。应用程序?可以是任何,如前所述,因为没有任何东西强迫您使用任何东西的任何高级特性。

    ( 需要证据吗?世界上一些最复杂的系统都是用COBOL编写的,在CS中没有任何理论知识。 )