国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

探討C++編程中避免代碼冗余的技巧

2017-12-15 10:22李琳
電腦知識(shí)與技術(shù) 2017年32期
關(guān)鍵詞:循環(huán)

李琳

摘要: 編程的基本原則是盡可能避免代碼重復(fù)。在程序編寫的過程當(dāng)中,涉及很多的結(jié)構(gòu)比如循環(huán)、函數(shù)調(diào)用、類等,這很容易導(dǎo)致代碼的冗余。該文以C++編程語言為例,列舉了幾種常見的代碼重復(fù)的情況.并提出了相應(yīng)的解決方案。

關(guān)鍵詞: 循環(huán);函數(shù)調(diào)用;類;代碼冗余; C++

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)32-0101-02

Discussing Technology for Avoiding Code Duplication in C++ Programming

LI Lin

(School of Computer and Information Engineering, Luoyang Institute of Science and Technology, Luoyang 471023,China)

Abstract: The basic principle of programming is that avoiding code duplication. During the progress of coding, many kinds of structures causes code duplication easily such as loop, function call, class.etc. This paper Based on C++ programming language, listed five common situations that induced code duplication and also provided the solutions.

Key words: loop; function call, class; code duplication; C++ programming

眾所周知,在編程過程中因?yàn)楦鞣N原因會(huì)產(chǎn)生重復(fù)性的冗余代碼。這些多余的代碼往往會(huì)引起一些小的bug而不易被覺察到。原因在于它并不會(huì)影響最終的運(yùn)行結(jié)果,卻嚴(yán)重影響了執(zhí)行效率。在有些函數(shù)被多次使用時(shí),這種情況就更容易出現(xiàn)。本文以C++編程語言為例,列舉了在編程過程中最常遇見的幾種情況,用一個(gè)個(gè)具體的實(shí)例描述造成重復(fù)代碼的原因.并提出了相應(yīng)的解決方案。

1 函數(shù)大致相同,但是參數(shù)或者返回的類型不同

1) 舉例描述:如圖1所示,這里有2段代碼。第一段代碼是輸出整型數(shù)據(jù)類的數(shù)組,第二段代碼是輸出雙精度類型的數(shù)組??梢钥吹剿鼈兯瓿傻墓δ苁窍嗤?,只是數(shù)據(jù)的操作類型不同。

2) 出現(xiàn)的問題:成員函數(shù)擁有相同的結(jié)構(gòu)和作用,僅僅差別在實(shí)際操作的對象不同。造成一定程度的代碼冗余。

3) 解決方案:利用C++提供的成員函數(shù)模板就能較好的解決這個(gè)問題。因?yàn)槟0寰哂泄餐ㄐ?。可以將相同的代碼部分由模板參數(shù)定義獲得。這樣就能夠針對不同的數(shù)據(jù)類型使用同一段代碼完成。所以可以用下列代碼(如圖2)來完成:將原來數(shù)據(jù)類型的地方比如int用一個(gè)參數(shù)A代替,這樣就抽象出一個(gè)模板。當(dāng)實(shí)參的數(shù)據(jù)類型是整型時(shí),編譯器會(huì)自動(dòng)用整型類型來替代類型參數(shù)A,如果實(shí)參的數(shù)據(jù)類型變?yōu)殡p精度型,那么編譯程序又會(huì)用雙精度型來替代類型參數(shù)A。

2 構(gòu)造函數(shù)的重載

1) 舉例描述:如圖3所示,propertypage類有2個(gè)構(gòu)造函數(shù),他們的區(qū)別在于一個(gè)是無參數(shù)的構(gòu)造函數(shù),一個(gè)是有參數(shù)的構(gòu)造函數(shù)。

2) 出現(xiàn)的問題:兩個(gè)構(gòu)造函數(shù)的成員初始化工作相同,只因?yàn)橛袩o參數(shù)的差別,需要分別構(gòu)建,導(dǎo)致代碼冗余。

3) 解決方案:利用委托構(gòu)造函數(shù)解決此類問題就是很好的做法??梢宰屍渲幸粋€(gè)構(gòu)造函數(shù)在初始化的階段調(diào)用另一個(gè)同類的構(gòu)造函數(shù),這樣就可以由委托的函數(shù)代替完成初始化的工作,從而減少了代碼的重復(fù)率。

3 在調(diào)用函數(shù)時(shí)遇到很長的參數(shù)列表

1) 舉例描述:有的時(shí)候我們調(diào)用的函數(shù)參數(shù)會(huì)特別多

2) 出現(xiàn)的問題:,example( )函數(shù)被調(diào)用了3次,參數(shù)非常的多,3次函數(shù)調(diào)用中只有細(xì)微的差別。代碼被大量重復(fù)。

3) 解決方案:利用綁定成員函數(shù)的方法來減少重復(fù)性代碼。Std::bind是C++提供的一種很好的機(jī)制,可以用來綁定多個(gè)不同參數(shù),其參數(shù)的類型和個(gè)數(shù)都不受限制,然后將其返回到另一個(gè)可以接收這些參數(shù)的函數(shù)。用于接收參數(shù)綁定值的可以是函數(shù)、函數(shù)指針、lambda表達(dá)式、成員函數(shù)等。下圖6中參數(shù)Work使用占位符_1綁定,說明對done()的調(diào)用只需要提供一個(gè)參數(shù)即可。

4 小結(jié)

通過成員函數(shù)模板、委托構(gòu)造函數(shù)、綁定成員函數(shù)等幾種方法能較好的減少代碼的冗余,讓代碼的結(jié)構(gòu)更加清晰,執(zhí)行率更高。當(dāng)然,一味地減少代碼不是最終目的,重要的是減少代碼出現(xiàn)Bug的幾率,從而便于后期的代碼維護(hù)。

參考文獻(xiàn):

[1] 邁耶斯.Effective Modern C++[M].南京:東南大學(xué)出版社,2015.

[2] 任智康.c++中的函數(shù)模版和類模版[EB/OL].http://www.cnblogs.com/renyuan/archive/2013/05/26/3100047.html.endprint

猜你喜歡
循環(huán)
淺析英語詞匯記憶策略
分層、過濾、循環(huán)教學(xué)法初探*
太陽能光伏材料的循環(huán)利用
汽輪機(jī)凝汽器最佳運(yùn)行工況實(shí)時(shí)分析技術(shù)的研究
会东县| 旅游| 荣昌县| 晴隆县| 嘉祥县| 松江区| 德令哈市| 平南县| 丽水市| 甘谷县| 金乡县| 临沧市| 和平区| 海门市| 清新县| 永宁县| 张家港市| 朝阳县| 祁门县| 汤阴县| 荣昌县| 资源县| 宁远县| 丹阳市| 彰化县| 正宁县| 自贡市| 信阳市| 宁都县| 玉龙| 瑞金市| 绵阳市| 靖江市| 西林县| 肃南| 郑州市| 罗城| 平陆县| 焦作市| 肥东县| 佳木斯市|