C++基础教程面向对象(学习笔记(109))

结束?

恭喜!你完成了整个面向教程!花点时间给自己当之无愧(插入你喜欢的东西)。

现在,在长长的松了一口气之后,你可能会问一个问题,“下一步是什么?”。

接下来是什么?

到目前为止,您应该对核心C ++面向对象语言有充分的了解。这样您就可以继续学习其他相邻区域。所以,如果有一些你真正有兴趣了解的东西,那么现在是时候看看你是否有足够的知识来进入这个领域。

但是,对于大多数用户来说,我认为有一些后续步骤。

数据结构和算法

如果您还没有了解这些,这是我最强烈的建议。

数据结构是数据的集合和一个定义良好的组的方法,以访问或操纵该数据。编程中使用的最常见的数据结构是数组,它在顺序存储器中保存了许多相同类型的元素。您可以使用数组索引来操作数组内的数据,以直接访问(或修改)数组中的元素。在课程中,我们还介绍了堆栈数据结构,它提供了push,pop和top函数来访问堆栈上的数据。

算法是一个自包含的组,其通常操作或计算的数据结构从所述数据输出的操作。例如,当您查看数组以查找中值时,您正在执行算法。二进制搜索是一种确定给定值是否存在于已排序数组中的算法。排序例程(例如选择排序和冒泡排序)是对数据集进行排序的算法。

多年来,数学家和计算机科学家提出了一套相当标准的可重用数据结构和算法,可用于构建更复杂的程序。这些都有各种权衡。例如,数组可以快速访问数据和排序,但添加或删除元素的速度很慢。另一方面,链接列表访问数据和排序的速度很慢,但添加或删除元素的速度非常快(如果您已经知道这些元素的位置)。

为什么这有关系?让我们用一个类比。如果你打算建房子,你可以根据需要从头开始构建你的所有工具。但是这需要很长时间,你可能会搞砸了很多东西并且不得不重新开始(曾经创造过一把锤子?我也没有)。此外,如果您使用错误的工具进行工作,您的质量将受到影响(尝试使用扳手钉在钉子上)。

更有可能的是,你去当地的五金店购买一些工具:锤子,水平仪,木匠的广场等…然后阅读一些关于如何正确使用它们的网络教程。这些将极大地加速您的房屋建设工作。

数据结构和算法在编程中具有相同的用途:它们是工具,如果您知道如何使用它们,可以大大加快您在质量上完成工作的速度。

好消息是,许多这些数据结构和算法已经在标准库中实现。您已经在前面的教程中遇到过其中一些:std :: array,std :: vector,std :: stack,std :: string和std :: sort,仅举几例。学会有效和适当地使用这些是你的时间的一个很好的利用。

如果您的时间(或耐心)很短,那么学习如何使用最常见的数据结构和算法是您应该做的最小的事情。但如果您有这种倾向,请尝试从头开始重新创建这些数据结构。编写可重用代码是非常好的做法,当您需要的东西不在标准库中时,它将帮助您顺利完成。但是然后抛弃它们,并使用标准库中的那些。🙂

C ++标准库

大部分C ++标准库是数据结构和算法。但是,标准库也包含其他内容,下一步可能是探索这些内容。除此之外,还有数字(数学)库,I/O例程,处理本地化和区域化的函数,正则表达式,线程和文件访问。每个新版本的C ++(现在大约每三年发生一次)都会在标准库中添加一批新功能。了解其中的所有内容是如何工作的并不重要,但至少知道存在的内容是值得的,因此如果您遇到需要,可以根据需要学习更多内容。 是我发现存在的东西的参考C ++参考资料。

图形应用程序

在我们的教程系列中,我们开发了控制台应用程序,因为它们很简单,跨平台,并且不需要安装其他软件。与许多现代编程语言不同,C ++没有创建应用程序窗口的功能,或者使用图形元素或图形用户界面小部件(复选框,滑块等)填充这些窗口。要在C ++中执行这些操作,您需要获得第三方库的帮助。

启动并运行图形应用程序需要一些额外的步骤。首先,您需要实际安装第三方库并将其连接到IDE,以便将其编译到您的程序中。大多数图形库都应该提供有关如何为最流行的IDE执行此操作的说明。接下来,您需要实例化一个OS窗口,该窗口需要从工具箱中调用某些函数。大多数(如果不是全部)库应该有样本程序,如果你不确定如何做一些基本的东西,你可以编译和剖析。

那里有很多library,你应该使用哪一个library取决于你的要求(你必须自己做研究以确定哪一个适合你)。热门选择包括Qt,WxWidgets,SDL和SFML。如果你想做3D图形,所有这些框架都支持OpenGL,互联网上有很棒的OpenGL教程这里我给出一个github上的一个教程

图形应用程序通常与控制台应用程序不同。使用控制台应用程序,程序开始在main()的顶部执行,然后按顺序运行,通常仅为用户输入停止。图形应用程序也开始在main()的顶部执行,通常生成一个窗口,用图形或小部件填充它,然后进入无限循环,等待用户与窗口交互(通过鼠标点击或键盘)。此无限循环称为事件循环,当发生单击或按键时,该事件将路由到处理该类型事件的函数。这称为事件处理。处理完事件后,事件循环继续运行,等待下一位用户输入。

TCP / IP /网络编程(又称互联网)

如今,很难找到无法连接到互联网,后端服务器/服务或以某种方式利用云的程序。任何要求您拥有帐户并登录的程序都将连接到服务器并对用户进行身份验证。许多程序连接到某些服务以检查更新是否可用。社交应用程序与社交基础架构保持持久连接,以允许用户按需彼此通信。这些是网络的例子。

网络(广义上)是让您的程序连接到其他程序(在您的计算机上或在连接网络的计算机上)以交换信息的概念。网络是一个强大的工具,过去,如果您想要更改应用程序的行为,则必须发布应用程序更新。现在,通过一些好的程序设计,您可以简单地在某个地方更新服务器上的信息,并且程序的所有实例都可以利用该更改。

和许多C ++一样,有些库可以帮助你的C ++程序实现网络化。Asio C ++库是一个常用的库(有两种变体 - 独立版本,以及与Boost集成的版本,Boost是一个提供许多不同功能的库,非常类似于标准库)。

多线程

我们在本教程系列中看到的所有程序都是按顺序运行的。一项任务完成,然后下一项任务开始。如果任务卡住(例如,您要求用户输入并且尚未输入任何内容),整个程序将暂停。这对于简单的学术课程来说很好,但对于实际应用来说并不是那么好。想象一下,如果您的程序无法处理用户点击某些内容,因为它正忙着在屏幕上绘图,或者整个程序在网络调用发生时暂停/冻结。该计划会感到反应迟钝。

幸运的是,存在一种允许程序同时执行多个任务的方法。这称为线程。就像(大多数)你可以同时走路和咀嚼泡泡糖一样,线程允许一个程序“分裂”它的注意力并同时做多个事情。

例如,某些图形应用程序(例如Web浏览器)将应用程序的呈现(绘图图形)部分放在单独的线程上,因此在绘图发生时更新屏幕不会阻止其他事情(如接受用户输入) 。网络调用通常在不同的线程上完成,因此如果网络调用需要一段时间才能解决,则应用程序在等待时不会停止。

线程是强大的,但它带来了额外的复杂性,并且存在很多额外错误的空间。因此,我不建议从这里开始,但它最终是一个很好的学习领域,特别是如果你想做复杂的图形应用程序或网络编程。

再见!

在这一点上,我想花一点时间来感谢您停下来阅读本教程系列。我希望你在这里过得愉快,并且发现这个教程很有用。

祝你好运(和技巧)在你未来的努力和快乐的编程!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章