欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

巧用成員模板函數為你的類留下后門

系統 2217 0
?
巧用成員模板函數為你的類留下后門
如果你的類需要擴展功能,除了修改源碼之外,你也可以從這個類派生一個類來對這個類作擴充。比如有如下一個類。
class cls
{
public :
??? int fun( int a)
??? {
?????? // 一些處理
?????? return 0;
??? }
};
類cls有一個函數fun能針對一個 int 型的數據進行一些必要的動作。現在假如,要對這個cls類進行功能擴充。讓它能針對一個 double 型的數據進行一些動作。第一種擴充方法是修改類的源碼如下:
class cls
{
public :
??? int fun( int a)
??? {
?????? // 一些處理
?????? return 0;
??? }
??? int fun( double a)
??? {
?????? // 一些處理
?????? return 0;
??? }
};
經過對類cls源碼的修改,cls現在有了針對的 double 功能了。可是這種改源碼的方法。會影響到其它的使用到這個cls類的地方。為了降低這種影響,可以采用從cls類再派生新類的做法,如下:
class cls2: public cls
{
public :
??? int fun( double a)
??? {
?????? // 一些處理
?????? return 0;
??? }
?
};
經過對派生,現在cls2這個類擴展了cls的功能。現在cls2可以針對 int double 兩種數據類型而做必要的處理了。可是這種通過派生新類的擴展,不能使以前就使用cls的用戶直接從中受益。這些用戶想要使用這個新擴展的功能,就必需修改自己的代碼來,添加對cls2的適應。
如果象上面的這種功能擴充,要是進行多幾次的話,采用第一種方法,就會經歷多次cls類的代碼修改,采用第二種方法,就會產生多次派生過程。象cls3,cls4等等。而且采用第二種方法還有一個非常大的不足。那就是派生類不能訪問基類的私有成員。假如擴充出來的功能在進行處理時要對cls中的一些私有成員有所依賴,就不能采用第二種擴展方法。
從以上的弊端來看,這兩種功能擴展的方法都不是好方法。
下面我們再來說一種進行功能擴展的方法。要采用這種方法,就需要在cls類在設計時就留出擴展口。現在我們重新設計cls類如下:
class cls
{
public :
??? // 把要傳入的數據的地址轉為void型的,
??? // 用type來表明進行處理時要對arg進行什么樣的轉換
??? int fun( void * arg, int type)
??? {
??? ??? switch (type)
?????? {
?????? case 0:
?????????? // 做針對int型數據的處理
?????????? break ;
?????? default :
?????????? break ;
?????? }
?????? return 0;
??? }
};
經過重新設計的cls類,現在要進行功能擴展的話,只需要在它的函數fun中多加一條 case 就行了,很方便了。但是這樣的設計是脆弱的。函數fun的兩個參數arg和type,非常的不安全,很容易出現搭配錯誤。看來我們還要尋找更好的辦法。于是我們再次修改我們的cls類如下:
class cls
{
public :
??? template < typename T>
??? int fun( T& arg)
??? {
?????? // 一些處理
?????? return 0;
??? }
};
這一次的cls類的模板成員函數fun,可以經得起功能擴充了。擴充它的途徑是特化這個成員模板函數。例如現在要對cls進行針對 double 的處理的擴展,只需對fun進行double類型的特化如下。
template <>
int cls::fun( double & arg)
{
??? // 針對double的一些處理
??? return 0;
}
特化的過程沒有動過cls類的一分一毫,也沒有從cls派生任何新類。但我們的 功能擴展卻安全的完成 了。這才是我們想要的方便的,安全的功能擴展方法。
?
?
? 讓后門支持偏特化

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1546360


巧用成員模板函數為你的類留下后門


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美一级久久 | 永久免费mv网站入口 | 精品国产不卡一区二区三区 | 排球少年第四季樱花动漫 | 超碰在线国产 | 久久aⅴ国产欧美74aaa | 三级毛片免费 | 九一国产在线观看免费 | 企鹅公装网 | 欧美日韩午夜精品 | 偷拍做爰吃奶视频免费看 | 国产aⅴ一区二区三区 | 亚洲一级在线观看 | 亚洲欧美日韩精品久久亚洲区 | 国产最新网址 | 91精品国产高清久久久久久91 | 日本福利视频 | 欧美精品一二区 | 很黄很色的网站 | 婷婷六月综合 | 亚洲人xxxx| 久久777国产线看观看精品 | 999久久久免费精品国产 | 成人福利视频在线看高清观看 | 国产精品一区二区免费 | 欧美特黄aaaaaaaa大片 | 成人性视频免费网站 | 亚洲一区二区视频在线观看 | 日本理论片好看理论片 | 日日a.v拍夜夜添久久免费 | 亚洲91在线| 成在线视频 | 欧美精品欧美精品系列 | 青娱乐手机在线 | 久久国产视频网站 | 亚洲激情 欧美 | 欧美线在线精品观看视频 | a欧美| 日本午夜免费无码片三汲大片 | 日日操夜夜爽 | 欧美成人免费在线视频 |