我应该编写什么来深入了解高级C ++?

时间:2010-07-12 20:19:44

标签: c++ boost

我正在寻找项目建议,这些建议会迫使我用先进的C ++功能“弄脏自己”。我正在谈论能够利用语言的全部功能的项目(STL甚至提升(还没有使用它))。

为什么呢?因为我想学习,我想找到新的挑战。在工作中,事情开始变得无聊,真的。我习惯于经常遇到新事物,新想法和新功能。在大多数情况下,这不是遗留公司代码的情况,正如您可以想象的那样。而且,在这里查看一些问题和答案,深入研究模板的深度,共享指针和所有那些我碰巧发现自己迷失的东西,不知道答案甚至更糟 - 甚至不了解正在发生的事情。

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

11 个答案:

答案 0 :(得分:6)

  

我应该编写什么来深入了解高级C ++?

  1. 了解详情,
  2. 了解更多,
  3. 了解更多。
  4. 而且,不,我不是在开玩笑。一点也不。大约15年前我开始学习C ++,而且我还在常规基础上学习新东西。

    查看The Definitive C++ Book Guide and List然后选择。
    我推荐由Andrei Alexandrescu提供的现代C ++设计和Vandevoorde& Sons提供的 C ++模板完整指南。约祖蒂斯。仅这两个就足以让一个程序员在几个月甚至几年内获得新想法。 (请注意,按照这个顺序阅读它们的优势在于,安德烈的书更薄,并且让你想要阅读另一本书,只是为了完全理解他写的东西。以相反的顺序阅读它们的优点是你不会经常迷路在安德烈的书中。无论你喜欢什么。)

答案 1 :(得分:4)

你提到创建类似'无用的实用程序'的东西。相反,我建议考虑一个对您个人有用的应用程序或实用程序,或者可能替换您已经使用的应用程序,您可以根据自己的要求,工作流程,美学等来设计。选择一些特定的你想从这个项目中学到的东西,比如智能指针,提升,模板元编程,正则表达式,多线程,网络。然后研究如何使用所选技术实现应用程序。无论哪里有一些编码要做,你都知道如何做,然后停下来,强迫自己想一想如何用新的成语来做。例如,尝试仅使用智能指针编写应用程序。

我发现,创建一个愚蠢的小型演示应用程序的危险在于你没有任何动力来完成它。最好有一个对你有用的工具的目标。这正是我现在正在做的事情:我有一个非常复杂的工作流程,用于导入照片,标记它们,重命名和编辑,所以我打算用C#和WPF编写一个应用程序来为我做这个。这让我有机会看到这个项目。

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

答案 2 :(得分:2)

像矩阵数学库这样的东西可能与你正在寻找的东西一致。算法和容器的大量潜在用途。这一切都是在心灵之前完成的,但是如果你正在寻找快速而肮脏的东西来尝试,那就是我想要的。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我在Stroustrup的The C ++ Programming Language:Special Edition中做了大约6个月的所有练习。这是值得的。

答案 5 :(得分:0)

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

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

使用STL代码作为对事情应该如何完成的参考。

答案 6 :(得分:0)

  

我应该编写什么来深入了解高级C ++?

C ++没有任何真正的高级特性,语言做得很好,先进的特性是使用世界各地存在的大量库。

来自Math libs,图形,通讯,windows / x-windows / kde / gnome等。

如果你想学习一个成熟的通讯库我建议使用 The ADAPTIVE Communication Environment (ACE(TM))这是一个有点老式但有很多语言的高级概念。

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

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

您可以使用Netbeans或Eclipse作为多平台,使用KDE Developer for Linux(使用KDE),使用Windows中的MS Visual Studio等。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

C ++探查器工具可以让您查看语言的深度。

答案 9 :(得分:0)

  

项目可以是任何东西,   有意义或无意义,有用   实用程序或只是组成的东西   没有实际用途。

制作有用的东西要好得多。你可以使用它(它会让你在某种程度上更快乐地使用你自己的应用程序)并且你可以分享它(开源项目 - 或者不是)。

  

唯一的要求是,它会   迫使我真正测试我的C ++技能。

好的,这是我头脑中的一些想法:

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

编写一个正则表达式包或一个正则表达式调试器(你给出一个字符串和一个模式的东西,它会告诉你字符串匹配模式中的哪个点)。在编写复杂的正则表达式时,这样的应用程序将非常有用。

写一个XML包以包含在boost中(嘿,你想要的东西会迫使你真正测试你的技能)。

使用完全支持的逻辑运算编写模糊逻辑值模块(假设 - 例如 - 五个真值:false,可能是false,未知,可能是true,true)。

编写AI包,允许您使用自定义学习/反馈功能轻松设计和实现各种神经网络。

  

或者至少它应该是非常的   很难甚至不可能编码   具有C ++基础知识

只有C的基本知识,您才能编写图形平台,操作系统和数据库管理系统,数学和加密包等(几乎任何东西)。没有什么无法使用C ++的基本知识进行编码。)

你的想象力确实是你的极限。

答案 10 :(得分:-1)

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

因此,我建议通过GoF获取Design Pattern bible并编写使用它的代码。应用程序?可以是任何,如前所述,因为没有任何东西强迫你使用任何任何高级功能。

想要证明?世界上一些最复杂的系统是由CS 理论知识不足的人用COBOL编写的)