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