
一、閱讀資料
1、多看標準庫文檔,熟練使用其中常用的接口,標準庫文檔很多時候可以滿足大部分需求。
2、多敲代碼,多練習,將書中的知識轉化為自己的代碼。
二、程序員思維對于一個需求或者一個項目,應先思考如何設計。例如:
1、應該提供哪些接口,比如:返回圖書信息,根據圖書id,返回圖書的全部信息。(比如:可以將圖書信息作為參數引用傳送,而函數返回bool值,提示存在或者不存在)。
2、思考應該封裝哪些變量及數據。
3、思考使用什么數據結構存儲數據(比如:map、hashmap,如果使用這個數據結構,會給程序帶來哪些影響,使用哪個數據結構,性能較高,擴展性較好)。
4、越簡單越好,思考如果這個需求給其他人維護或者以后自己進行擴展,又應該如何設計這個項目使其更簡單易懂又方便。
5、思考數據長度是多大,是固定長度還是可擴展長度,后期會不會擴展。比如:圖書倉庫為1000,后期會不會想修改,加到1500等等,需不需要大規模更改代碼。
三、用戶思維
1、用戶只需要拿到.h文件和庫,不應該提供給用戶變量或者提供給用戶會影響程序運行的變量及數據,這些應該封裝到.cpp文件里。
2、對于用戶輸入導致數據有誤,如果是用戶習慣,比如:輸入空格,程序應該對空格處理,返回合適值;對于其他的錯誤,程序應該提示并定位到錯誤的來源,并由程序設計者思考用戶會不會允許該錯誤,并決定程序是否繼續往下執行。
3、面向接口編程。
4、思考用戶需要的接口,避免暴露不必要的變量或數據等(可以使用私有類封裝起來),將具體實現放在該私有類里(私有類在.cpp文件中實現,用戶不可訪問)。
5、可以重構項目,但要把之前的項目的坑填完。但是過度優化也是一種災難,如果一個工具,面向的用戶是100個人,則不需要考慮給100000人用。
四、交流學習遇到問題的時候,與同事或同學交流一個需求或問題的設計思路。
1、思考與自己的思路相比有什么不同。
2、為什么他會采用這種解法,這種解法的優點是什么,(可以從可擴展性、可維護性、可讀性等思考)。
3、自己的思路存在什么缺點以及優點,如何結合他的方法,尋求更好的解法。
4、不確定的就要問,要有自己的想法。
五、項目經驗
1、長期維護一個項目可能會受到項目影響,會受到項目開發者思路的影響,接觸不同的項目視野會越來越開闊,不同的項目會有不同的解決方法,有各自的優點與缺點,揚長避短。
2、一個項目,短期可能看不出來影響,長期維護,會發現最初設計的影響越來越大(開發、維護、擴展等等)。
3、接觸模板越深后,會發現C++因為模板而變成是一個“新的語言”,模板千變萬化,發現C++越來越難學。
4、不同平臺接口不一樣,比如安卓、ios、web等,使用方法也不一樣,需要都去了解。
六、代碼規范
1、參照匈牙利命名法與駝峰命名法。
2、一般include系統文件放在文件的最上方。
七、小tips
1、如果子類不再被繼承,可將重載父類的方法設置為final,如果被繼承,則像之前一樣采用override。
2、對于一些由成員函數調用的函數,又不想把它們設置為成員函數,也不滿足API函數,可不在.h文件中聲明這些函數,在.cpp文件中直接定義。
3、std::vector<std::vector<std::string>>可以寫成:typedef std::vector<std::string>one_array;typedef std::vector<one_array>two_array;
4、所有子類共有的東西放在基類中,或者把基類單獨提出來,放在一個.h文件中。
5、對于memcpy這類直接操作內存的函數,一定要注意,因為這類函數是要寫明讀寫多少字節的。如果某一個數組長度改寫了,而memcpy函數長度忘了改,那么對內存的操作就會越界了。
6、匿名函數可以用于提供接口,可以試試傳函數,將操作交給用戶。
以上就是關于“學習C++需要注意哪些”的內容介紹,希望對大家學習有所幫助。想要了解更多關于學習C++的相關資訊歡迎來咨詢。