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瀏覽器)將應用程序的呈現(繪圖圖形)部分放在單獨的線程上,因此在繪圖發生時更新屏幕不會阻止其他事情(如接受用戶輸入) 。網絡調用通常在不同的線程上完成,因此如果網絡調用需要一段時間才能解決,則應用程序在等待時不會停止。

線程是強大的,但它帶來了額外的複雜性,並且存在很多額外錯誤的空間。因此,我不建議從這裏開始,但它最終是一個很好的學習領域,特別是如果你想做複雜的圖形應用程序或網絡編程。

再見!

在這一點上,我想花一點時間來感謝您停下來閱讀本教程系列。我希望你在這裏過得愉快,並且發現這個教程很有用。

祝你好運(和技巧)在你未來的努力和快樂的編程!

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