锘??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜国产欧美理论在线播放,欧美一级久久久,久久综合色88 http://www.shnenglu.com/ivy-jie/category/10520.htmlprogress ... zh-cn Sun, 28 Jun 2009 07:55:02 GMT Sun, 28 Jun 2009 07:55:02 GMT 60 鏈夋剰鎬濈殑鐭╅樀杈撳嚭棰?/title> http://www.shnenglu.com/ivy-jie/articles/88687.htmlivy-jie ivy-jie Sun, 28 Jun 2009 04:04:00 GMT http://www.shnenglu.com/ivy-jie/articles/88687.html http://www.shnenglu.com/ivy-jie/comments/88687.html http://www.shnenglu.com/ivy-jie/articles/88687.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/88687.html http://www.shnenglu.com/ivy-jie/services/trackbacks/88687.html 棰樼洰瑕佹眰: 鐢–緙栧啓紼嬪簭騫舵敞閲?br>N*N鐭╅樀杈撳嚭 N=3鏃惰緭鍑?br>1 2 3 8 9 4 7 6 5 N錛?鏃惰緭鍑?br> 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
緙栧啓褰揘鏃剁殑杈撳嚭 浠g爜: #include <stdio.h> #include <stdlib.h> #include <string.h>
enum { MASK_UP = 1, MASK_DOWN = 2, MASK_LEFT = 4, MASK_RIGHT = 8, TURN_NONE = 0, TURN_UP = 1, TURN_DOWN = 2, TURN_LEFT = 3, TURN_RIGHT = 4, };
int directs[5][2] = { {0, 0}, // 0:TURN_NONE {-1, 0}, // 1:TURN_UP {1, 0}, // 2:TURN_DOWN {0, -1}, // 3:TURN_LEFT {0, 1}, // 4:TURN_RIGHT };
int rules[16] = { TURN_NONE, // 0:none TURN_UP, // 1:up TURN_DOWN, // 2:down TURN_NONE, // 3:invalid TURN_LEFT, // 4:left TURN_LEFT, // 5:left and up TURN_DOWN, // 6:left and down TURN_NONE, // 7:invalid TURN_RIGHT, // 8:right TURN_UP, // 9:right and up TURN_RIGHT, // 10:right and down TURN_NONE, // 11-15:invalid }; int next_pos(int *matrix, int n, int i, int j, int *nexti, int *nextj) { if (i == -1 || j == -1) { *nexti = 0; *nextj = 0; return 1; } int mask = 0; if (i - 1 >= 0 && matrix[(i - 1) * n + j] == 0) // up ok mask |= MASK_UP; if (i + 1 <= n - 1 && matrix[(i + 1) * n + j] == 0) // down ok mask |= MASK_DOWN; if (j - 1 >= 0 && matrix[i * n + (j - 1)] == 0) // left ok mask |= MASK_LEFT; if (j + 1 <= n - 1 && matrix[i * n + (j + 1)] == 0) // right ok mask |= MASK_RIGHT; int rule = rules[mask]; int *direct = directs[rule]; if (direct[0] == 0 && direct[1] == 0) return 0; *nexti = i + direct[0]; *nextj = j + direct[1]; return 1; }
int main(int argc, char *argv[]) { if (argc != 2) return -1; int n = atoi(argv[1]); if (n <= 0) return -1; int *matrix = (int*)malloc(n * n * sizeof(int)); memset(matrix, 0, n * n * sizeof(int));
int i = -1; int j = -1; int value = 1; while (next_pos(matrix, n, i, j, &i, &j) != 0) { matrix[i * n + j] = value++; }
for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%d", matrix[i * n + j]); if (j != n - 1) printf("\t"); } printf("\n"); } free(matrix); return 0; }
]]>铏氱戶鎵夸笌铏氬熀綾葷殑鏈川 http://www.shnenglu.com/ivy-jie/articles/87104.htmlivy-jie ivy-jie Mon, 08 Jun 2009 14:34:00 GMT http://www.shnenglu.com/ivy-jie/articles/87104.html http://www.shnenglu.com/ivy-jie/comments/87104.html http://www.shnenglu.com/ivy-jie/articles/87104.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/87104.html http://www.shnenglu.com/ivy-jie/services/trackbacks/87104.html 铏氱戶鎵夸笌铏氬熀綾葷殑鏈川 铏氱戶鎵垮拰铏氬熀綾葷殑瀹氫箟鏄潪甯哥殑綆鍗曠殑錛屽悓鏃朵篃鏄潪甯稿鏄撳垽鏂竴涓戶鎵挎槸鍚︽槸铏氱戶鎵?br>鐨勶紝铏界劧榪欎袱涓蹇電殑瀹氫箟鏄潪甯哥殑綆鍗曟槑紜殑錛屼絾鏄湪C++璇█涓櫄緇ф壙浣滀負(fù)涓涓瘮杈冪敓 鍍?nèi)潥勪絾鏄張鏄l濆蹇呰鐨勭粍鎴愰儴浠借屽瓨鍦ㄧ潃錛屽茍涓斿叾琛屼負(fù)鍜屾ā鍨嬪潎琛ㄧ幇鍑哄拰涓鑸殑緇ф壙浣撶郴 涔嬮棿鐨勫法澶х殑宸紓錛堝寘鎷闂ц兘涓婄殑宸紓錛夛紝鐜板湪鎴戜滑灝辨潵褰誨簳鐨勪粠璇█銆佹ā鍨嬨佹ц兘鍜?br>搴旂敤絳夊涓柟闈㈠铏氱戶鎵垮拰铏氬熀綾昏繘琛岀爺絀躲?br> 棣栧厛榪樻槸鍏堢粰鍑?guó)櫃毦lф壙鍜岃櫄鍩虹被鐨勫畾涔夈?br> 铏氱戶鎵匡細(xì)鍦ㄧ戶鎵垮畾涔変腑鍖呭惈浜?jiǎn)virtual鍏抽敭瀛楃殑緇ф壙鍏崇郴錛?br> 铏氬熀綾伙細(xì)鍦ㄨ櫄緇ф壙浣撶郴涓殑閫氳繃virtual緇ф壙鑰屾潵鐨勫熀綾伙紝闇瑕佹敞鎰忕殑鏄細(xì) struct CSubClass : public virtual CBase {}; 鍏朵腑CBase縐頒箣涓篊SubClass 鐨勮櫄鍩虹被錛岃屼笉鏄CBase灝辨槸涓櫄鍩虹被錛屽洜涓篊Base榪樺彲浠ヤ笉涓嶆槸铏氱戶鎵夸綋緋?br> 涓殑鍩虹被銆?br> 鏈変簡(jiǎn)涓婇潰鐨勫畾涔夊悗錛屽氨鍙互寮濮嬭櫄緇ф壙鍜岃櫄鍩虹被鐨勬湰璐ㄧ爺絀朵簡(jiǎn)錛屼笅闈㈡寜鐓ц娉曘佽涔夈?br>妯″瀷銆佹ц兘鍜屽簲鐢ㄤ簲涓柟闈㈣繘琛屽叏闈㈢殑鎻忚堪銆?br> 1. 璇硶 璇硶鏈夎璦鐨勬湰韜殑瀹氫箟鎵鍐沖畾錛屾諱綋涓婃潵璇撮潪甯哥殑綆鍗曪紝濡備笅錛?br> struct CSubClass : public virtual CBaseClass {}; 鍏朵腑鍙互閲囩敤public銆乸rotected銆乸rivate涓夌涓嶅悓鐨勭戶鎵垮叧閿瓧榪涜淇グ錛屽彧瑕?br> 紜繚鍖呭惈virtual灝卞彲浠ヤ簡(jiǎn)錛岃繖鏍蜂竴鏉ュ氨褰㈡垚浜?jiǎn)铏毦lф壙浣撶郴錛屽悓鏃禖BaseClass灝辨垚涓?br> 浜?jiǎn)CSubClass鐨勮櫄鍩虹被浜?jiǎn)銆?br> 鍏跺疄騫舵病鏈夐偅涔堢殑綆鍗曪紝濡傛灉鍑虹幇铏氱戶鎵夸綋緋葷殑榪涗竴姝ョ戶鎵夸細(xì)鍑虹幇浠涔堟牱鐨勭姸鍐靛憿錛?br> 濡備笅鎵紺猴細(xì) /* * 甯︽湁鏁版嵁鎴愬憳鐨勫熀綾?br> */ struct CBaseClass1 { CBaseClass1( size_t i ) : m_val( i ) {} size_t m_val; }; /* * 铏氭嫙緇ф壙浣撶郴 */ struct CSubClassV1 : public virtual CBaseClass1 { CSubClassV1( size_t i ) : CBaseClass1( i ) {} }; struct CSubClassV2 : public virtual CBaseClass1 { CSubClassV2( size_t i ) : CBaseClass1( i ) {} }; struct CDiamondClass1 : public CSubClassV1, public CSubClassV2 { CDiamondClass1( size_t i ) : CBaseClass1( i ), CSubClassV1( i ), CSubClassV2( i ) {} }; struct CDiamondSubClass1 : public CDiamondClass1 { CDiamondSubClass1( size_t i ) : CBaseClass1( i ), CDiamondClass1( i ) {} }; 娉ㄦ剰涓婇潰浠g爜涓殑CDiamondClass1鍜孋DiamondSubClass1涓や釜綾葷殑鏋勯犲嚱鏁板垵濮嬪寲鍒?br> 琛ㄤ腑鐨勫唴瀹廣傚彲浠ュ彂鐜板叾涓潎鍖呭惈浜?jiǎn)铏氬熀绫籆BaseClass1鐨勫垵濮嬪寲宸ヤ綔錛屽鏋滄病鏈夎繖 涓垵濮嬪寲璇彞灝變細(xì)瀵艱嚧緙栬瘧鏃墮敊璇紝涓轟粈涔堜細(xì)榪欐牱鍛紵涓鑸儏鍐典笅涓嶆槸鍙鍦?br> CSubClassV1鍜孋SubClassV2涓寘鍚垵濮嬪寲灝卞彲浠ヤ簡(jiǎn)涔堬紵瑕佽В閲婅闂蹇呴』瑕佹槑鐧借櫄 緇ф壙鐨勮涔夌壒寰侊紝鎵浠ュ弬鐪嬩笅闈㈣涔夐儴鍒嗙殑瑙i噴銆?br> 2. 璇箟 鍦–++涓櫄鍑芥暟蹇呴』瑕侀氳繃涓縐嶉棿鎺ョ殑榪愯鏃訛紙鑰屼笉鏄紪璇戞椂錛夋満鍒舵墠鑳藉嬋媧伙紙 璋冪敤錛夌殑鍑芥暟錛岃岃櫄緇ф壙涔熸槸蹇呴』鍦ㄨ繍琛屾椂鎵嶈兘澶熻繘琛屽畾浣嶈闂殑涓縐嶄綋鍒躲傚瓨鍦紝 浣嗛棿鎺ャ傚叾涓叧閿氨鍦ㄤ簬瀛樺湪銆侀棿鎺ュ拰鍏變韓榪欎笁縐嶇壒寰併?br> 瀵逛簬铏氬嚱鏁拌岃█錛岃繖涓変釜鐗瑰緛鏄緢濂界悊瑙g殑錛岄棿鎺ユц〃鏄庝簡(jiǎn)浠栧繀欏誨湪榪愯鏃舵牴鎹疄闄?br> 鐨勫璞℃潵瀹屾垚鍑芥暟瀵誨潃錛屽叡浜ц〃璞″湪鍩虹被浼?xì)鍏变韩琚瓙绫婚噸铦插悗鐨勮櫄鍑芥晭图屽叾瀹炴寚鍚?br> 鐩稿悓鐨勫嚱鏁板叆鍙c?br> 瀵逛簬铏氱戶鎵胯岃█錛岃繖涓変釜鐗瑰緛濡備綍鐞嗚В鍛紵瀛樺湪鍗寵〃紺鴻櫄緇ф壙浣撶郴鍜岃櫄鍩虹被紜疄瀛樺湪錛?br> 闂存帴鎬ц〃鏄庝簡(jiǎn)鍦ㄨ闂櫄鍩虹被鐨勬垚鍛樻椂鍚屾牱涔熷繀欏婚氳繃鏌愮闂存帴鏈哄埗鏉ュ畬鎴愶紙涓嬮潰妯″瀷 涓細(xì)璁插埌錛夛紝鍏變韓鎬ц〃璞″湪铏氬熀綾諱細(xì)鍦ㄨ櫄緇ф壙浣撶郴涓鍏變韓錛岃屼笉浼?xì)鍑虹幇澶氫唤鎷疯礉銆?br> 閭g幇鍦ㄥ彲浠ヨВ閲婅娉曞皬鑺備腑鐣欎笅鏉ョ殑閭d釜闂?shù)簡(jiǎn)锛?#8220;涓轟粈涔堜竴鏃﹀嚭鐜頒簡(jiǎn)铏氬熀綾伙紝灝卞繀 欏誨湪姣忎竴涓戶鎵跨被涓兘蹇呴』鍖呭惈铏氬熀綾葷殑鍒濆鍖栬鍙?#8221;銆傜敱涓婇潰鐨勫垎鏋愬彲浠ョ煡閬擄紝 铏氬熀綾繪槸琚叡浜殑錛屼篃灝辨槸鍦ㄧ戶鎵夸綋緋諱腑鏃犺琚戶鎵垮灝戞錛屽璞″唴瀛樻ā鍨嬩腑鍧囧彧浼?br> 鍑虹幇涓涓櫄鍩虹被鐨勫瓙瀵硅薄錛堣繖鍜屽緇ф壙鏄畬鍏ㄤ笉鍚岀殑錛夛紝榪欐牱涓鏉ユ棦鐒舵槸鍏變韓鐨勯偅涔?br> 姣忎竴涓瓙綾婚兘涓嶄細(xì)鐙崰錛屼絾鏄昏繕鏄繀欏昏鏈変竴涓被鏉ュ畬鎴愬熀綾葷殑鍒濆鍖栬繃紼嬶紙鍥犱負(fù) 鎵鏈夌殑瀵硅薄閮藉繀欏昏鍒濆鍖栵紝鍝曟槸榛樿鐨勶級(jí)錛屽悓鏃惰繕?shù)笉鑳藉閲嶅杩涜鍒濆鍖栧Q岄偅鍒?br> 搴曡皝搴旇璐熻矗瀹屾垚鍒濆鍖栧憿錛烠++鏍囧噯涓紙涔熸槸寰堣嚜鐒剁殑錛夐夋嫨鍦ㄦ瘡涓嬈$戶鎵垮瓙綾諱腑 閮藉繀欏諱功鍐欏垵濮嬪寲璇彞錛堝洜涓烘瘡涓嬈$戶鎵垮瓙綾誨彲鑳介兘浼?xì)鐢ㄦ潵瀹氫箟瀵硅薄锛?jí)錛岃屽湪鏈涓嬪眰 緇ф壙瀛愮被涓疄闄呮墽琛屽垵濮嬪寲榪囩▼銆傛墍浠ヤ笂闈㈠湪姣忎竴涓戶鎵跨被涓兘瑕佷功鍐欏垵濮嬪寲璇彞錛?br> 浣嗘槸鍦ㄥ垱寤哄璞℃椂錛岃屼粎浠呬細(xì)鍦ㄥ垱寤哄璞$敤鐨勭被鏋勯犲嚱鏁頒腑瀹為檯鐨勬墽琛屽垵濮嬪寲璇彞錛?br> 鍏朵粬鐨勫垵濮嬪寲璇彞閮戒細(xì)琚帇鍒朵笉璋冪敤銆?br> 3. 妯″瀷 涓轟簡(jiǎn)瀹炵幇涓婇潰鎵璇寸殑涓夌璇箟鍚箟錛屽湪鑰冭檻瀵硅薄鐨勫疄鐜版ā鍨嬶紙涔熷氨鏄唴瀛樻ā鍨嬶級(jí)鏃跺氨 寰堣嚜鐒朵簡(jiǎn)銆傚湪C++涓璞″疄闄呬笂灝辨槸涓涓繛緇殑鍦板潃絀洪棿鐨勮涔変唬琛紝鎴戜滑鏉ュ垎鏋愯櫄 緇ф壙涓嬬殑鍐呭瓨妯″瀷銆?br> 3.1. 瀛樺湪 涔熷氨鏄鍦ㄥ璞″唴瀛樹(shù)腑蹇呴』瑕佸寘鍚櫄鍩虹被鐨勫畬鏁村瓙瀵硅薄錛屼互渚胯兘澶熷畬鎴愰氳繃鍦板潃 瀹屾垚瀵硅薄鐨勬爣璇嗐傞偅涔堣嚦浜庤櫄鍩虹被鐨勫瓙瀵硅薄浼?xì)瀛樻攽譁ㄥ璞$殑閭d釜浣嵕|紙澶淬佷腑闂淬?br> 灝鵑儴錛夊垯鐢卞悇涓紪璇戝櫒閫夋嫨錛屾病鏈夊樊鍒傦紙鍦╒C8涓棤璁鴻櫄鍩虹被琚0鏄庡湪浠涔堜綅緗紝 铏氬熀綾葷殑瀛愬璞¢兘浼?xì)琚攧〗湪瀵硅薄鍐呭瓨鐨劄N儴錛?br> 3.2. 闂存帴 闂存帴鎬ц〃鏄庝簡(jiǎn)鍦ㄧ洿鎺ヨ櫄鍩烘壙瀛愮被涓竴瀹氬寘鍚簡(jiǎn)鏌愮鎸囬拡錛堝亸縐繪垨琛ㄦ牸錛夋潵瀹屾垚閫?br> 榪囧瓙綾昏闂櫄鍩虹被瀛愬璞★紙鎴栨垚鍛橈級(jí)鐨勯棿鎺ユ墜孌碉紙鍥犱負(fù)铏氬熀綾誨瓙瀵硅薄鏄叡浜殑錛?br> 娌℃湁紜畾鍏崇郴錛夛紝鑷充簬閲囩敤浣曠鎵嬫鐢辯紪璇戝櫒閫夋嫨銆傦紙鍦╒C8涓湪瀛愮被涓斁緗簡(jiǎn) 涓涓櫄鍩虹被鎸囬拡vbc錛岃鎸囬拡鎸囧悜铏氬嚱鏁拌〃涓殑涓涓猻lot錛岃slot涓瓨鏀懼垯铏氬熀 綾誨瓙瀵硅薄鐨勫亸縐婚噺鐨勮礋鍊鹼紝瀹為檯涓婂氨鏄釜浠ヨˉ鐮佽〃紺虹殑int綾誨瀷鐨勫鹼紝鍦ㄨ綆楄櫄 鍩虹被瀛愬璞¢鍦板潃鏃訛紝闇瑕佸皢璇ュ亸縐婚噺鍙栫粷瀵瑰肩浉鍔狅紝榪欎釜涓昏鏄負(fù)浜?jiǎn)鍜岃櫄琛?br> 涓彧鑳藉瓨鏀捐櫄鍑芥暟鍦板潃榪欎竴瑕佹眰鐩稿尯鍒紝鍥犱負(fù)鍦板潃鏄師鐮佽〃紺虹殑鏃犵鍙穒nt綾誨瀷 鐨勫鹼級(jí) 3.3. 鍏變韓 鍏變韓琛ㄦ槑浜?jiǎn)鍦ㄥ璞$殑鍐呭瓨绌洪棿涓粎浠呰兘澶熷寘鍚竴浠借櫄鍩虹被鐨勫瓙瀵硅薄錛屽茍涓旈氳繃 鏌愮闂存帴鐨勬満鍒舵潵瀹屾垚鍏變韓鐨勫紩鐢ㄥ叧緋匯傚湪浠嬬粛瀹屾暣涓唴瀹瑰悗浼?xì)闄勪笂娴嬭瘯浠g爜锛?br> 浣撶幇榪欎簺鍐呭銆?br> 4. 鎬ц兘 鐢變簬鏈変簡(jiǎn)闂存帴鎬у拰鍏變韓鎬т袱涓壒寰侊紝鎵浠ュ喅瀹氫簡(jiǎn)铏氱戶鎵夸綋緋諱笅鐨勫璞″湪璁塊棶鏃跺繀鐒?br> 浼?xì)鍦ㄦ棄櫁村拰绌洪棿涓婁笌涓鑸儏鍐墊湁杈冨ぇ涓嶅悓銆?br> 4.1. 鏃墮棿 鍦ㄩ氳繃緇ф壙綾誨璞¤闂櫄鍩虹被瀵硅薄涓殑鎴愬憳錛堝寘鎷暟鎹垚鍛樺拰鍑芥暟鎴愬憳錛夋椂錛岄兘 蹇呴』閫氳繃鏌愮闂存帴寮曠敤鏉ュ畬鎴愶紝榪欐牱浼?xì)澧炲姞寮曠敤瀵诲潃鏃墮棿錛堝氨鍜岃櫄鍑芥暟涓鏍鳳級(jí)錛?br> 鍏跺疄灝辨槸璋冩暣this鎸囬拡浠ユ寚鍚戣櫄鍩虹被瀵硅薄錛屽彧涓嶈繃榪欎釜璋冩暣鏄繍琛屾椂闂存帴瀹屾垚鐨勩?br> 錛堝湪VC8涓氳繃鎵撳紑姹囩紪杈撳嚭錛屽彲浠ユ煡鐪?.cod鏂囦歡涓殑鍐呭錛屽湪璁塊棶铏氬熀綾誨璞?br> 鎴愬憳鏃朵細(xì)褰㈡垚涓夋潯mov闂存帴瀵誨潃璇彞錛岃屽湪璁塊棶涓鑸戶鎵跨被瀵硅薄鏃朵粎浠呭彧鏈変竴鏉ov 甯擱噺鐩存帴瀵誨潃璇彞錛?br> 4.2. 絀洪棿 鐢變簬鍏變韓鎵浠ヤ笉鍚屽湪瀵硅薄鍐呭瓨?shù)腑淇濆瓨澶氫唤铏氬熀绫诲瓙瀵硅薄鐨勬嫰偞濆Q岃繖鏍瘋緝涔嬪緇ф壙 鑺傜渷絀洪棿銆?br> 5. 搴旂敤 璋堜簡(jiǎn)閭d箞澶氳璦鐗規(guī)у拰鍐呭錛岄偅涔堝湪浠涔堟儏鍐典笅闇瑕佷嬌鐢ㄨ櫄緇ф壙錛岃屼竴鑸簲璇ュ浣曚嬌 鐢ㄥ憿錛?br> 榪欎釜闂鍏跺疄寰堥毦鏈夌瓟妗堬紝涓鑸儏鍐典笅濡傛灉浣犵‘鎬у嚭鐜板緇ф壙娌℃湁蹇呰錛屽繀欏昏鍏變韓 鍩虹被瀛愬璞$殑鏃跺欏彲浠ヨ冭檻閲囩敤铏氱戶鎵垮叧緋伙紙C++鏍囧噯ios浣撶郴灝辨槸榪欐牱鐨勶級(jí)銆傜敱浜庢瘡 涓涓戶鎵跨被閮藉繀欏誨寘鍚垵濮嬪寲璇彞鑰屽張浠呬粎鍙湪鏈搴曞眰瀛愮被涓皟鐢紝榪欐牱鍙兘灝變細(xì)浣?br> 寰楁煇浜涗笂灞傚瓙綾誨緱鍒扮殑铏氬熀綾誨瓙瀵硅薄鐨勭姸鎬佷笉鏄嚜宸辨墍鏈熸湜鐨勶紙鍥犱負(fù)鑷繁鐨勫垵濮嬪寲璇?br> 鍙ヨ鍘嬪埗浜?jiǎn)锛?jí)錛屾墍浠?span style="COLOR: red">涓鑸緩璁笉瑕佸湪铏氬熀綾諱腑鍖呭惈浠諱綍鏁版嵁鎴愬憳錛堜笉瑕佹湁鐘舵侊級(jí)錛屽彧 鍙互浣滀負(fù)鎺ュ彛綾繪潵鎻愪緵銆?br> 鍋囧畾閫氳繃澶氫釜媧劇敓璺緞緇ф壙鍚嶄負(fù)X鐨勬垚鍛橈紝鏈変笅闈笁縐嶅彲鑳芥э細(xì) 1錛夊鏋滃湪姣忎釜璺緞涓璛琛ㄧず鍚屼竴铏氬熀綾繪垚鍛橈紝鍒欐病鏈変簩涔夋э紝鍥犱負(fù)鍏變韓璇ユ垚鍛樼殑鍗曚釜瀹炰緥錛?br> 2錛夊鏋滃湪鏌愪釜璺緞涓璛鏄櫄鍩虹被鐨勬垚鍛橈紝鑰屽湪鍙︿竴璺緞涓璛鏄悗浠f淳鐢熺被鐨勬垚鍛橈紝涔熸病鏈変簩涔夋р斺旂壒瀹氭淳鐢熺被瀹炰緥鐨勪紭鍏堢駭楂樹(shù)簬鍏變韓铏氬熀綾誨疄渚嬨?nbsp; 3錛夊鏋滄部姣忎釜緇ф壙璺緞X琛ㄧず鍚庝唬媧劇敓綾葷殑涓嶅悓鎴愬憳錛屽垯璇ユ垚鍛樼殑鐩存帴璁塊棶鏄簩涔夋х殑銆?br>
闄勫綍錛氭祴璇曚唬鐮?br>#include <ctime> #include <iostream> /* * 甯︽湁鏁版嵁鎴愬憳鐨勫熀綾?br> */ struct CBaseClass1 { CBaseClass1( size_t i ) : m_val( i ) {} size_t m_val; }; /* * 铏氭嫙緇ф壙浣撶郴 */ struct CSubClassV1 : public virtual CBaseClass1 { CSubClassV1( size_t i ) : CBaseClass1( i ) {} }; struct CSubClassV2 : public virtual CBaseClass1 { CSubClassV2( size_t i ) : CBaseClass1( i ) {} }; struct CDiamondClass1 : public CSubClassV1, public CSubClassV2 { CDiamondClass1( size_t i ) : CBaseClass1( i ), CSubClassV1( i ), CSubClassV2( i ) {} }; struct CDiamondSubClass1 : public CDiamondClass1 { CDiamondSubClass1( size_t i ) : CBaseClass1( i ), CDiamondClass1( i ) {} }; /* * 姝e父緇ф壙浣撶郴 */ struct CSubClassN1 : public CBaseClass1 { CSubClassN1( size_t i ) : CBaseClass1( i ) {} }; struct CSubClassN2 : public CBaseClass1 { CSubClassN2( size_t i ) : CBaseClass1( i ) {} }; struct CMultiClass1 : public CSubClassN1, public CSubClassN2 { CMultiClass1( size_t i ) : CSubClassN1( i ), CSubClassN2( i ) {} }; struct CMultiSubClass1 : public CMultiClass1 { CMultiSubClass1( size_t i ) : CMultiClass1( i ) {} }; /* * 涓嶅甫鏈夋暟鎹垚鍛樼殑鎺ュ彛鍩虹被 */ struct CBaseClass2 { virtual void func() {}; virtual ~CBaseClass2() {} }; /* * 铏氭嫙緇ф壙浣撶郴 */ // struct CBaseClassX { CBaseClassX() {i1 = i2 = 0xFFFFFFFF;} size_t i1, i2;}; struct CSubClassV3 : public virtual CBaseClass2 { }; struct CSubClassV4 : public virtual CBaseClass2 { }; struct CDiamondClass2 : public CSubClassV3, public CSubClassV4 { }; struct CDiamondSubClass2 : public CDiamondClass2 { }; /* * 姝e父緇ф壙浣撶郴 */ struct CSubClassN3 : public CBaseClass2 { }; struct CSubClassN4 : public CBaseClass2 { }; struct CMultiClass2 : public CSubClassN3, public CSubClassN4 { }; struct CMultiSubClass2 : public CMultiClass2 { }; /* * 鍐呭瓨甯冨眬鐢ㄧ被澹版槑. */ struct CLayoutBase1 { CLayoutBase1() : m_val1( 0 ), m_val2( 1 ) {} size_t m_val1, m_val2; }; struct CLayoutBase2 { CLayoutBase2() : m_val1( 3 ) {} size_t m_val1; }; struct CLayoutSubClass1 : public virtual CBaseClass1, public CLayoutBase1, public CLayoutBase2 { CLayoutSubClass1() : CBaseClass1( 2 ) {} }; #define MAX_TEST_COUNT 1000 * 1000 * 16 #define TIME_ELAPSE() ( std::clock() - start * 1.0 ) / CLOCKS_PER_SEC int main( int argc, char *argv[] ) { /* * 綾諱綋緋諱腑鐨勫昂瀵? */ std::cout << "================================ sizeof ================================" << std::endl; std::cout << " ----------------------------------------------------------------" << std::endl; std::cout << "sizeof( CBaseClass1 ) = " << sizeof( CBaseClass1 ) << std::endl; std::cout << std::endl; std::cout << "sizeof( CSubClassV1 ) = " << sizeof( CSubClassV1 ) << std::endl; std::cout << "sizeof( CSubClassV2 ) = " << sizeof( CSubClassV2 ) << std::endl; std::cout << "sizeof( CDiamondClass1 ) = " << sizeof( CDiamondClass1 ) << std::endl; std::cout << "sizeof( CDiamondSubClass1 ) = " << sizeof( CDiamondSubClass1 ) << std::endl; std::cout << std::endl; std::cout << "sizeof( CSubClassN1 ) = " << sizeof( CSubClassN1 ) << std::endl; std::cout << "sizeof( CSubClassN2 ) = " << sizeof( CSubClassN2 ) << std::endl; std::cout << "sizeof( CMultiClass1 ) = " << sizeof( CMultiClass1 ) << std::endl; std::cout << "sizeof( CMultiSubClass1 ) = " << sizeof( CMultiSubClass1 ) << std::endl; std::cout << " ----------------------------------------------------------------" << std::endl; std::cout << "sizeof( CBaseClass2 ) = " << sizeof( CBaseClass2 ) << std::endl; std::cout << std::endl; std::cout << "sizeof( CSubClassV3 ) = " << sizeof( CSubClassV3 ) << std::endl; std::cout << "sizeof( CSubClassV4 ) = " << sizeof( CSubClassV4 ) << std::endl; std::cout << "sizeof( CDiamondClass2 ) = " << sizeof( CDiamondClass2 ) << std::endl; std::cout << "sizeof( CDiamondSubClass2 ) = " << sizeof( CDiamondSubClass2 ) << std::endl; std::cout << std::endl; std::cout << "sizeof( CSubClassN3 ) = " << sizeof( CSubClassN3 ) << std::endl; std::cout << "sizeof( CSubClassN4 ) = " << sizeof( CSubClassN4 ) << std::endl; std::cout << "sizeof( CMultiClass2 ) = " << sizeof( CMultiClass2 ) << std::endl; std::cout << "sizeof( CMultiSubClass2 ) = " << sizeof( CMultiSubClass2 ) << std::endl; /* * 瀵硅薄鍐呭瓨甯冨眬 */ std::cout << "================================ layout ================================" << std::endl; std::cout << " --------------------------------MI------------------------------" << std::endl; CLayoutSubClass1 *lsc = new CLayoutSubClass1; std::cout << "sizeof( CLayoutSubClass1 ) = " << sizeof( CLayoutSubClass1 ) << std::endl; std::cout << "CLayoutBase1 offset of CLayoutSubClass1 is " << (char*)(CLayoutBase1 *)lsc - (char*)lsc << std::endl; std::cout << "CBaseClass1 offset of CLayoutSubClass1 is " << (char*)(CBaseClass1 *)lsc - (char*)lsc << std::endl; std::cout << "CLayoutBase2 offset of CLayoutSubClass1 is " << (char*)(CLayoutBase2 *)lsc - (char*)lsc << std::endl; int *ptr = (int*)lsc; std::cout << "vbc in CLayoutSubClass1 is " << *(int*)ptr[3] << std::endl; delete lsc; std::cout << " --------------------------------SI------------------------------" << std::endl; CSubClassV1 *scv1 = new CSubClassV1( 1 ); std::cout << "sizeof( CSubClassV1 ) = " << sizeof( CSubClassV1 ) << std::endl; std::cout << "CBaseClass1 offset of CSubClassV1 is " << (char*)(CBaseClass1 *)scv1 - (char*)scv1 << std::endl; ptr = (int*)scv1; std::cout << "vbc in CSubClassV1 is " << *(int*)ptr[0] << std::endl; delete scv1; /* * 鎬ц兘嫻嬭瘯 */ std::cout << "================================ Performance ================================" << std::endl; double times[4]; size_t idx = 0; CSubClassV1 *ptr1 = new CDiamondClass1( 1 ); std::clock_t start = std::clock(); { for ( size_t i = 0; i < MAX_TEST_COUNT; ++i ) ptr1->m_val = i; } times[idx++] = TIME_ELAPSE(); delete static_cast<CDiamondClass1*>( ptr1 ); CSubClassN1 *ptr2 = new CMultiClass1( 0 ); start = std::clock(); { for ( size_t i = 0; i < MAX_TEST_COUNT; ++i ) ptr2->m_val = i; } times[idx++] = TIME_ELAPSE(); delete static_cast<CMultiClass1*>( ptr2 ); std::cout << "CSubClassV1::ptr1->m_val " << times[0] << " s" << std::endl; std::cout << "CSubClassN1::ptr2->m_val " << times[1] << " s" << std::endl; return 0; } 嫻嬭瘯鐜錛?br> 杞歡鐜錛歏isual Studio2005 Pro + SP1, boost1.34.0 紜歡鐜錛歅entiumD 3.0GHz, 4G RAM 嫻嬭瘯鏁版嵁錛?br>================================ sizeof ================================ ---------------------------------------------------------------- sizeof( CBaseClass1 ) = 4 sizeof( CSubClassV1 ) = 8 sizeof( CSubClassV2 ) = 8 sizeof( CDiamondClass1 ) = 12 sizeof( CDiamondSubClass1 ) = 12 sizeof( CSubClassN1 ) = 4 sizeof( CSubClassN2 ) = 4 sizeof( CMultiClass1 ) = 8 sizeof( CMultiSubClass1 ) = 8 ---------------------------------------------------------------- sizeof( CBaseClass2 ) = 4 sizeof( CSubClassV3 ) = 8 sizeof( CSubClassV4 ) = 8 sizeof( CDiamondClass2 ) = 12 sizeof( CDiamondSubClass2 ) = 12 sizeof( CSubClassN3 ) = 4 sizeof( CSubClassN4 ) = 4 sizeof( CMultiClass2 ) = 8 sizeof( CMultiSubClass2 ) = 8 ================================ layout ================================ --------------------------------MI------------------------------ sizeof( CLayoutSubClass1 ) = 20 CLayoutBase1 offset of CLayoutSubClass1 is 0 CBaseClass1 offset of CLayoutSubClass1 is 16 CLayoutBase2 offset of CLayoutSubClass1 is 8 vbc in CLayoutSubClass1 is -12 --------------------------------SI------------------------------ sizeof( CSubClassV1 ) = 8 CBaseClass1 offset of CSubClassV1 is 4 vbc in CSubClassV1 is 0 ================================ Performance ================================ CSubClassV1::ptr1->m_val 0.062 s CSubClassN1::ptr2->m_val 0.016 s 緇撴灉鍒嗘瀽錛?br> 1. 鐢變簬铏氱戶鎵垮紩鍏ョ殑闂存帴鎬ф寚閽堟墍浠ュ鑷翠簡(jiǎn)铏氱戶鎵跨被鐨勫昂瀵鎬細(xì)澧炲姞4涓瓧鑺傦紱 2. 鐢盠ayout杈撳嚭鍙互鐪嬪嚭錛岃櫄鍩虹被瀛愬璞¤鏀懼湪浜?jiǎn)瀵硅薄鐨劄N儴錛堝亸縐諱負(fù)16錛夛紝騫朵笖vbc 鎸囬拡蹇呴』绱х揣鐨勬帴鍦ㄨ櫄鍩虹被瀛愬璞$殑鍓嶉潰錛屾墍浠bc鎸囬拡鎵鎸囧悜鐨勫唴瀹逛負(fù)“鍋忕Щ - 4”錛?br> 3. 鐢變簬VC8灝嗗亸縐繪斁鍦ㄤ簡(jiǎn)铏氬嚱鏁拌〃涓紝鎵浠ヤ負(fù)浜?jiǎn)鍖哄垎鍑芥暟鍦板潃鍜屽亸縐伙紝鎵浠ュ亸縐繪槸鐢ㄨˉ 鐮乮nt琛ㄧず鐨勮礋鍊鹼紱 4. 闂存帴鎬у彲浠ラ氳繃鎬ц兘鏉ョ湅鍑猴紝鍦ㄨ櫄緇ф壙浣撶郴鍚岄氳繃鎸囬拡璁塊棶鎴愬憳鏃剁殑鏃墮棿涓鑸槸涓鑸?br> 綾昏闂儏鍐典笅鐨?鍊嶅乏鍙籌紝絎﹀悎姹囩紪璇█杈撳嚭鏂囦歡涓殑姹囩紪璇彞鐨勫畨鎺掋?br>
]]> 涓閬撳緇ф壙鍜岃櫄緇ф壙鐨勯潰璇曢 http://www.shnenglu.com/ivy-jie/articles/87102.htmlivy-jie ivy-jie Mon, 08 Jun 2009 14:30:00 GMT http://www.shnenglu.com/ivy-jie/articles/87102.html http://www.shnenglu.com/ivy-jie/comments/87102.html http://www.shnenglu.com/ivy-jie/articles/87102.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/87102.html http://www.shnenglu.com/ivy-jie/services/trackbacks/87102.html class A{ public A { std::cout<<A<<} } class B: public A{ ... // print B } class C: public A, pulic B { ... // print C } int main(){ C obj; } 杈撳嚭: AABC銆傜戶鎵垮叧緋繪槸涓夎褰細(xì)A->B->C鍔燗->C銆?br> 闂鏄細(xì)榪欎笁鏉¤竟濡傛灉鑰冭檻铏氱戶鎵匡紝姣忔潯杈規(guī)湁涓ょ鍙兘錛屽叡鍏銆傞偅涔堝叾浠栦竷縐嶇粍鍚堢殑 杈撳嚭鏄粈涔堛? 緙栬瘧鍣? VC6.0 #include "stdafx.h" #include "iostream" using namespace std; class AA { public: AA(){ std::cout<<"AA"<<endl;} }; class BB: public virtual AA { public: BB(){ std::cout<<"BB"<<endl;} };
class CC: public virtual AA, public (virtual) BB //鎷彿鐨剉irtual鍙湁鍙棤 { public: CC(){ std::cout<<"CC"<<endl;} };
int main(int argc, char* argv[]) { CC obj;
return 0; } 杈撳嚭: AA BB CC 鍏跺畠鎯呭喌緙栬瘧浼?xì)鍑洪?br>涓昏鑰冨療澶氱戶鎵跨殑铏氬熀綾誨湪鍐呭瓨?shù)腑鍙湁涓浠絚opy,濡傛灉涓嶇敤铏氱戶鎵跨殑璇濓紝瀹規(guī)槗閫犳垚浜屼箟鎬э紝緙栬瘧涓嶈繃:)
]]>闈㈠悜榪囩▼鐨勯潤(rùn)鎬佹垚鍛?/title> http://www.shnenglu.com/ivy-jie/articles/85576.htmlivy-jie ivy-jie Sun, 24 May 2009 02:47:00 GMT http://www.shnenglu.com/ivy-jie/articles/85576.html http://www.shnenglu.com/ivy-jie/comments/85576.html http://www.shnenglu.com/ivy-jie/articles/85576.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/85576.html http://www.shnenglu.com/ivy-jie/services/trackbacks/85576.html 鍦ㄥ叏灞鍙橀噺鍓嶏紝鍔犱笂鍏抽敭瀛梥tatic錛岃鍙橀噺灝辮瀹氫箟鎴愪負(fù)涓涓潤(rùn)鎬佸叏灞鍙橀噺銆傛垜浠厛涓句竴涓潤(rùn)鎬佸叏灞鍙橀噺鐨勪緥瀛愶紝濡備笅錛? //Example 1#include <iostream.h>void fn();static int n; //瀹氫箟闈?rùn)鎬佸叏灞鍙橀噺void main(){ n=20; cout<<n<<endl; fn();}void fn(){ n++; cout<<n<<endl;} 闈?rùn)鎬佸叏灞鍙橀噺鏈変互涓嬬壒鐐癸細(xì) 璇ュ彉閲忓湪鍏ㄥ眬鏁版嵁鍖?/strong> 鍒嗛厤鍐呭瓨錛? 鏈粡鍒濆鍖栫殑闈?rùn)鎬佸叏灞鍙橀噺浼?xì)琚E嬪簭鑷姩鍒濆鍖栦負(fù)0錛堣嚜鍔ㄥ彉閲忕殑鍊兼槸闅忔満鐨勶紝闄ら潪瀹冭鏄懼紡鍒濆鍖栵級(jí)錛?闈?rùn)鎬佸叏灞鍙橀噺鍦ㄥ0鏄庡畠鐨勬暣涓枃浠墮兘鏄彲瑙佺殑錛岃屽湪鏂囦歡涔嬪鏄笉鍙鐨勶紱 闈?rùn)鎬佸彉閲忛兘鍦ㄥ叏灞鏁版嵁鍖哄垎閰嶅唴瀛橈紝鍖呮嫭鍚庨潰灝嗚鎻愬埌鐨勯潤(rùn)鎬佸眬閮ㄥ彉閲忋傚浜庝竴涓畬鏁寸殑紼嬪簭錛屽湪鍐呭瓨?shù)腑鐨?br>鍒嗗竷鎯呭喌濡備笅鍥撅細(xì) 浠g爜鍖? 鍏ㄥ眬鏁版嵁鍖? 鍫嗗尯 鏍堝尯 涓鑸▼搴忕殑鐢眓ew浜х敓鐨勫姩鎬佹暟鎹瓨鏀懼湪鍫嗗尯錛屽嚱鏁板唴閮ㄧ殑鑷姩鍙橀噺瀛樻斁鍦ㄦ爤鍖恒傝嚜鍔ㄥ彉閲忎竴鑸細(xì)闅忕潃鍑芥暟鐨勯鍑?guó)檧岄噴鏀劇┖闂達(dá)紝闈?rùn)鎬佹暟鎹紙鍗充嬌鏄嚱鏁板唴閮ㄧ殑闈?鎬佸眬閮ㄥ彉閲忥級(jí)涔熷瓨鏀懼湪鍏ㄥ眬鏁版嵁鍖恒傚叏灞鏁版嵁鍖虹殑鏁版嵁騫朵笉浼?xì)鍥犱负鍑芥暟鐨勯鍑?guó)檧岄噴鏀劇┖闂淬傜粏蹇?jī)鐨勮鑰呭彲鑳戒細(xì)鍙戠幇錛孍xample 1涓殑浠g爜涓皢 static int n; //瀹氫箟闈?rùn)鎬佸叏灞鍙橀噺 鏀逛負(fù) int n; //瀹氫箟鍏ㄥ眬鍙橀噺 紼嬪簭鐓ф牱姝e父榪愯銆? 鐨勭‘錛?strong>瀹氫箟鍏ㄥ眬鍙橀噺灝卞彲浠ュ疄鐜板彉閲忓湪鏂囦歡涓殑鍏變韓錛屼絾瀹氫箟闈?rùn)鎬佸叏灞鍙橀噺榪樻湁浠ヤ笅濂藉錛? 闈?rùn)鎬佸叏灞鍙橀噺涓嶈兘琚叾瀹冩枃浠舵墍鐢紱 鍏跺畠鏂囦歡涓彲浠ュ畾涔夌浉鍚屽悕瀛楃殑鍙橀噺錛屼笉浼?xì)鍙戠敓鍐步H侊紱 鎮(zhèn)ㄥ彲浠ュ皢涓婅堪紺轟緥浠g爜鏀逛負(fù)濡備笅錛?//Example 2//File1#include <iostream.h>void fn();static int n; //瀹氫箟闈?rùn)鎬佸叏灞鍙橀噺void main(){ n=20; cout<<n<<endl; fn();}//File2#include <iostream.h>extern int n; void fn(){ n++; cout<<n<<endl;} 緙栬瘧騫惰繍琛孍xample 2錛屾?zhèn)兗?xì)鍙戠幇涓婅堪浠g爜鍙互鍒嗗埆閫氳繃緙栬瘧錛屼絾榪愯鏃跺嚭鐜伴敊璇?璇曠潃灝? static int n; //瀹氫箟闈?rùn)鎬佸叏灞鍙橀噺 鏀逛負(fù) int n; //瀹氫箟鍏ㄥ眬鍙橀噺 鍐嶆緙栬瘧榪愯紼嬪簭錛岀粏蹇?jī)浣撲細(xì)鍏ㄥ眬鍙橀噺鍜岄潤(rùn)鎬佸叏灞鍙橀噺鐨勫尯鍒? 2銆侀潤(rùn)鎬佸眬閮ㄥ彉閲? 鍦ㄥ眬閮ㄥ彉閲忓墠錛屽姞涓婂叧閿瓧static錛岃鍙橀噺灝辮瀹氫箟鎴愪負(fù)涓涓潤(rùn)鎬佸眬閮ㄥ彉閲忋? 鎴戜滑鍏堜婦涓涓潤(rùn)鎬佸眬閮ㄥ彉閲忕殑渚嬪瓙錛屽涓嬶細(xì) //Example 3#include <iostream.h>void fn();void main(){ fn(); fn(); fn();}void fn(){ static n=10; cout<<n<<endl; n++;} 閫氬父錛屽湪鍑芥暟浣撳唴瀹氫箟浜?jiǎn)涓涓彉閲忥紝姣忓綋紼嬪簭榪愯鍒拌璇彞鏃墮兘浼?xì)缁欒灞閮ㄥ彉閲忓垎閰嶆爤鍐呭瓨銆備絾闅忕潃紼嬪簭閫鍑哄嚱鏁頒綋錛岀郴緇熷氨浼?xì)鏀跺洖鏍堝唴瀛樺Q屽眬閮ㄥ彉閲忎篃鐩稿簲澶辨晥銆? 浣嗘湁鏃跺欐垜浠渶瑕佸湪涓ゆ璋冪敤涔嬮棿瀵瑰彉閲忕殑鍊艱繘琛屼繚瀛樸傞氬父鐨勬兂娉曟槸瀹氫箟涓涓叏灞鍙橀噺鏉ュ疄鐜般備絾榪欐牱涓鏉ワ紝鍙橀噺宸茬粡涓嶅啀灞炰簬鍑芥暟鏈韓浜?jiǎn)锛屼笉鍐嶄粎鍙楀嚱鏁扮殑鎺у堄灱尵l欑▼搴忕殑緇存姢甯︽潵涓嶄究銆? 闈?rùn)鎬佸眬閮ㄥ彉閲忔濂藉彲浠ヨВ鍐寵繖涓棶棰樸傞潤(rùn)鎬佸眬閮ㄥ彉閲忎繚瀛樺湪鍏ㄥ眬鏁版嵁鍖猴紝鑰屼笉鏄繚瀛樺湪鏍堜腑錛屾瘡嬈$殑鍊間繚鎸佸埌涓嬩竴嬈¤皟鐢紝鐩村埌涓嬫璧嬫柊鍊箋? 闈?rùn)鎬佸眬閮ㄥ彉閲忔湁浠ヤ笅鐗圭偣錛? 璇ュ彉閲忓湪鍏ㄥ眬鏁版嵁鍖哄垎閰嶅唴瀛橈紱 闈?rùn)鎬佸眬閮ㄥ彉閲忓湪紼嬪簭鎵ц鍒拌瀵硅薄鐨勫0鏄庡鏃惰棣栨鍒濆鍖栵紝鍗充互鍚庣殑鍑芥暟璋冪敤涓嶅啀榪涜鍒濆鍖栵紱 闈?rùn)鎬佸眬閮ㄥ彉閲忎竴鑸湪澹版槑澶勫垵濮嬪寲錛屽鏋滄病鏈夋樉寮忓垵濮嬪寲錛屼細(xì)琚▼搴忚嚜鍔ㄥ垵濮嬪寲涓?錛?瀹冨緇堥┗鐣欏湪鍏ㄥ眬鏁版嵁鍖猴紝鐩村埌紼嬪簭榪愯緇撴潫銆備絾鍏?span style="COLOR: #000000">浣滅敤鍩熶負(fù)灞閮ㄤ綔鐢ㄥ煙 錛屽綋瀹氫箟瀹冪殑鍑芥暟鎴栬鍙ュ潡緇撴潫鏃訛紝鍏朵綔鐢ㄥ煙闅忎箣緇撴潫錛? 3銆侀潤(rùn)鎬佸嚱鏁? 鍦ㄥ嚱鏁扮殑榪斿洖綾誨瀷鍓嶅姞涓妔tatic鍏抽敭瀛?鍑芥暟鍗寵瀹氫箟涓洪潤(rùn)鎬佸嚱鏁般傞潤(rùn)鎬佸嚱鏁頒笌鏅氬嚱鏁頒笉鍚岋紝瀹冨彧鑳藉湪澹版槑瀹冪殑鏂囦歡褰撲腑鍙錛屼笉鑳借鍏跺畠鏂囦歡浣跨敤銆? 闈?rùn)鎬佸嚱鏁扮殑渚嬪瓙錛? //Example 4#include <iostream.h>static void fn();//澹版槑闈?rùn)鎬佸嚱鏁皏oid main(){ fn();}void fn()//瀹氫箟闈?rùn)鎬佸嚱鏁皗 int n=10; cout<<n<<endl;} 瀹氫箟闈?rùn)鎬佸嚱鏁扮殑濂藉錛?闈?rùn)鎬佸嚱鏁頒笉鑳借鍏跺畠鏂囦歡鎵鐢紱 鍏跺畠鏂囦歡涓彲浠ュ畾涔夌浉鍚屽悕瀛楃殑鍑芥暟錛屼笉浼?xì)鍙戠敓鍐步H侊紱
]]> 闈㈠悜瀵硅薄鐨勯潤(rùn)鎬佹垚鍛?/title> http://www.shnenglu.com/ivy-jie/articles/85575.htmlivy-jie ivy-jie Sun, 24 May 2009 02:42:00 GMT http://www.shnenglu.com/ivy-jie/articles/85575.html http://www.shnenglu.com/ivy-jie/comments/85575.html http://www.shnenglu.com/ivy-jie/articles/85575.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/85575.html http://www.shnenglu.com/ivy-jie/services/trackbacks/85575.html 闈?rùn)鎬佹暟鎹垚鍛?/font>鍜?font color=#ff0000>闈?rùn)鎬佸嚱鏁版垚鍛?/font>涓ら儴鍒嗐?nbsp; 1 闈?rùn)鎬佹暟鎹垚鍛橈細(xì) 綾諱綋涓殑鏁版嵁鎴愬憳鐨勫0鏄庡墠鍔犱笂static 鍏抽敭瀛楋紝璇ユ暟鎹垚鍛樺氨鎴愪負(fù)浜?jiǎn)璇ゾc葷殑闈?rùn)鎬佹暟鎹垚鍛?/font>銆傚拰鍏朵粬鏁版嵁鎴愬憳?shù)竴鏍鳳紝闈?rùn)鎬佹暟鎹垚鍛?/font>涔熼伒瀹?font color=#3366ff>public/protected/private 璁塊棶瑙勫垯銆傚悓鏃訛紝闈?rùn)鎬佹暟鎹垚鍛?/font>榪樺叿鏈変互涓嬬壒鐐癸細(xì) 1.闈?rùn)鎬佹暟鎹垚鍛樼殑瀹氫箟銆? 闈?rùn)鎬佹暟鎹垚鍛樺疄闄呬笂鏄被鍩熶腑鐨勫叏灞鍙橀噺銆傛墍浠ワ紝闈?rùn)鎬佹垚鍛樹(shù)笉鑳藉湪綾誨畾涔夐噷杈瑰垵濮嬪寲錛屽彧鑳藉湪class body澶栧垵濮嬪寲銆?/font> 涓句緥濡備笅錛? xxx.h鏂囦歡 class base{ private: static const int _i;//澹版槑錛屾爣鍑哻++鏀寔鏈夊簭綾誨瀷鍦ㄧ被浣撲腑鍒濆鍖?浣唙c6涓嶆敮鎸併? }; xxx.cpp鏂囦歡 const int base::_i=10;//瀹氫箟(鍒濆鍖?鏃朵笉鍙梡rivate鍜宲rotected璁塊棶闄愬埗. 2.闈?rùn)鎬佹暟鎹垚鍛?/font>琚?font color=#ff0000>綾?/font>鐨勬墍鏈夊璞℃墍鍏變韓錛屽寘鎷綾繪淳鐢熺被鐨勫璞°?/span>鍗蟲(chóng)淳鐢熺被瀵硅薄涓庡熀綾誨璞″叡浜熀綾葷殑闈?rùn)鎬佹暟鎹垚鍛樸?nbsp; 3 鍒濆鍖?鎴栧畾涔?錛岃闂柟寮?br> 闈?rùn)鎬佹暟鎹垚鍛樺垵濮嬪寲鐨勬牸寮忎負(fù)錛? 錛滄暟鎹被鍨嬶紴錛滅被鍚嶏紴::錛滈潤(rùn)鎬佹暟鎹垚鍛樺悕錛?錛滃鹼紴 綾葷殑闈?rùn)鎬佹暟鎹垚鍛樻湁涓ょ璁塊棶褰㈠紡錛? 錛滅被瀵硅薄鍚嶏紴. 錛滈潤(rùn)鎬佹暟鎹垚鍛樺悕錛?鎴?錛滅被綾誨瀷鍚嶏紴:: 錛滈潤(rùn)鎬佹暟鎹垚鍛樺悕錛? 濡傛灉闈?rùn)鎬佹暟鎹垚鍛樼殑璁塊棶鏉冮檺鍏佽鐨勮瘽錛?span style="COLOR: red">鍗硃ublic鐨勬垚鍛?/strong> 錛夛紝鍙湪紼嬪簭涓紝鎸変笂榪版牸寮忔潵寮曠敤闈?rùn)鎬佹暟鎹垚鍛?nbsp;; 3.闈?rùn)鎬佹暟鎹垚鍛?/font>鍙互鎴愪負(fù)鎴愬憳鍑芥暟鐨勫彲閫夊弬鏁幫紝鑰屾櫘閫氭暟鎹垚鍛樺垯涓嶅彲浠ャ備婦渚嬪涓嬶細(xì) class base{ public : static int _staticVar; int _var; void foo1(int i=_staticVar);//姝g‘,_staticVar涓洪潤(rùn)鎬佹暟鎹垚鍛?/font> void foo2(int i=_var);//閿欒,_var涓烘櫘閫氭暟鎹垚鍛?/font> }; 4.鈽?font style="COLOR: #000000" color=#ff0000>闈?rùn)鎬佹暟鎹垚鍛?/font>鐨勭被鍨嬪彲浠ユ槸鎵灞炵被鐨勭被鍨嬶紝鑰屾櫘閫氭暟鎹垚鍛樺垯涓嶅彲浠ャ傛櫘閫氭暟鎹垚鍛樼殑鍙兘澹版槑涓?nbsp;鎵灞炵被綾誨瀷鐨勬寚閽堟垨寮曠敤銆備婦渚嬪涓嬶細(xì) class base{ public : static base _object1;//姝g‘錛岄潤(rùn)鎬佹暟鎹垚鍛? base _object2;//閿欒 base *pObject;//姝g‘錛屾寚閽? base &mObject;//姝g‘錛屽紩鐢? }; 5.鈽呰繖涓壒鎬э紝鎴戜笉鐭ラ亾鏄睘浜庢爣鍑哻++涓殑鐗規(guī)э紝榪樻槸vc6鑷繁鐨勭壒鎬с? 闈?rùn)鎬佹暟鎹垚鍛樼殑鍊煎湪const鎴愬憳鍑芥暟涓彲浠ヨ鍚堟硶鐨勬敼鍙樸備婦渚嬪涓嬶細(xì) class base{ public: base(){_i=0;_val=0;} mutable int _i; static int _staticVal; int _val; void test() const{//const 鎴愬憳鍑芥暟 _i++;//姝g‘錛宮utable鏁版嵁鎴愬憳 _staticVal++;//姝g‘錛宻tatic鏁版嵁鎴愬憳 _val++;//閿欒 } }; int base::_staticVal=0; 2 闈?rùn)鎬佹垚鍛樺嚱鏁?/strong> 1.闈?rùn)鎬佹垚鍛樺嚱鏁扮殑鍦板潃鍙敤鏅氬嚱鏁版寚閽堝偍瀛橈紝鑰屾櫘閫氭垚鍛樺嚱鏁板湴鍧闇瑕佺敤 綾繪垚鍛樺嚱鏁版寚閽堟潵鍌ㄥ瓨銆備婦渚嬪涓嬶細(xì) class base{ static int func1(); int func2(); }; int (*pf1)()=&base::func1;//鏅氱殑鍑芥暟鎸囬拡 int (base::*pf2)()=&base::func2;//鎴愬憳鍑芥暟鎸囬拡 2.闈?rùn)鎬佹垚鍛樺嚱鏁頒笉鍙互璋冪敤綾葷殑闈為潤(rùn)鎬佹垚鍛樸?u>鍥犱負(fù)闈?rùn)鎬佹垚鍛樺嚱鏁頒笉鍚玹his鎸囬拡 銆?/strong> 閫氬父鎯呭喌涓嬶紝this 鏄己鐪佺殑銆傚鍑芥暟fn()瀹為檯涓婃槸this->fn()銆備絾鏄笌鏅氬嚱鏁扮浉姣旓紝闈?rùn)鎬佹垚鍛樺嚱鏁扮敱浜庝笉鏄笌浠諱綍鐨勫璞$浉鑱旂郴錛屽洜姝ゅ畠涓嶅叿鏈塼his鎸?閽堛備粠榪欎釜鎰忎箟涓婅錛?span style="COLOR: red">瀹冩棤娉曡闂睘浜庣被瀵硅薄鐨勯潪闈?rùn)鎬佹暟鎹垚鍛?/strong> 錛?span style="COLOR: red">涔熸棤娉曡闂潪闈?rùn)鎬佹垚鍛樺嚱鏁?/strong> 錛屽畠鍙兘璋冪敤鍏朵綑鐨勯潤(rùn)鎬佹垚鍛樺嚱鏁?/strong> 銆?nbsp; 3.闈?rùn)鎬佹垚鍛樺嚱鏁頒笉鍙互鍚屾椂澹版槑涓? virtual銆乧onst銆乿olatile鍑芥暟銆備婦渚嬪涓嬶細(xì) class base{ virtual static void func1();//閿欒 static void func2() const;//閿欒 static void func3() volatile;//閿欒 }; 3 闈?rùn)鎬佹瀯閫犲嚱鏁?br> 闈?rùn)鎬佹瀯閫犲嚱鏁拌嚜鍔ㄨ璋冪敤錛屼笉鑳借鏄懼紡璋冪敤銆傝櫧鐒舵彁渚涗簡(jiǎn)璁稿綰︽潫鏉′歡錛屼絾鏄潤(rùn)鎬佹瀯閫犲嚱鏁版墽琛岀殑紜垏鏃墮棿鍜岄『搴忔槸涓嶇‘瀹氱殑錛?br>涓涓被鐨勯潤(rùn)鎬佹瀯閫犲嚱鏁板湪榪欎釜綾葷殑浠諱綍瀹炰緥琚垱寤哄墠鎵ц銆?br>涓涓被鐨勯潤(rùn)鎬佹瀯閫犲嚱鏁板湪綾葷殑浠諱綍闈?rùn)鎬佹垚鍛樿寮曠敤鍓嶆墽琛屻?br>涓涓被鐨勯潤(rùn)鎬佹瀯閫犲嚱鏁板湪瀹冪殑鎵鏈夋淳鐢熺被鐨勯潤(rùn)鎬佹瀯閫犲嚱鏁版墽琛屼箣鍚庢墽琛屻?br>涓涓被鐨勯潤(rùn)鎬佹瀯閫犲嚱鏁頒粠涓嶄細(xì)琚墽琛屼竴嬈′互涓娿?br>
]]> 瀛愮被鐖剁被鏋勯犲嚱鏁拌皟鐢ㄩ『搴?/title> http://www.shnenglu.com/ivy-jie/articles/85481.htmlivy-jie ivy-jie Fri, 22 May 2009 16:27:00 GMT http://www.shnenglu.com/ivy-jie/articles/85481.html http://www.shnenglu.com/ivy-jie/comments/85481.html http://www.shnenglu.com/ivy-jie/articles/85481.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/85481.html http://www.shnenglu.com/ivy-jie/services/trackbacks/85481.html 瀛愮被緇ф壙鍜岃皟鐢ㄧ埗綾葷殑鏋勯犳柟娉?/p>
1.濡傛灉瀛愮被娌℃湁瀹氫箟鏋勯犳柟娉?鍒欒皟鐢ㄧ埗綾葷殑鏃犲弬鏁扮殑鏋勯犳柟娉?.
2.濡傛灉瀛愮被瀹氫箟浜?jiǎn)鏋勯犳柟娉?涓嶈鏄棤鍙傛暟榪樻槸甯﹀弬鏁?鍦ㄥ垱寤哄瓙綾葷殑瀵硅薄鐨勬椂鍊?棣栧厛鎵ц鐖剁被鏃犲弬鏁扮殑鏋勯犳柟娉?/strong> ,鐒跺悗鎵ц鑷繁鐨勬瀯閫犳柟娉曘?/p>
3.濡傛灉瀛愮被璋冪敤鐖剁被甯﹀弬鏁扮殑鏋勯犳柟娉?鍙互閫氳繃super(鍙傛暟)璋冪敤鎵闇瑕佺殑鐖剁被鐨勬瀯閫犳柟娉?鍒囪璇彞鍋氫負(fù)瀛愮被鏋勯犳柟娉曚腑鐨勭涓鏉¤鍙?/span>銆?/p>
4.濡傛灉鏌愪釜鏋勯犳柟娉曡皟鐢ㄧ被涓殑鍏朵粬鐨勬瀯閫犳柟娉?鍒欏彲浠ョ敤this(鍙傛暟),鍒囪璇彞鏀懼湪鏋勯犳柟娉曠殑絎竴鏉?
璇寸櫧浜?鍘熷垯灝辨槸,鍏堣皟鐢ㄧ埗浜茬殑.(娌℃湁灝遍粯璁よ皟,鏈変簡(jiǎn)灝辨寜鏈夌殑璋?鍙嶆鍙鏈変竴涓氨鍙互浜?)
package test;
class Father{
String s = "Run constructor method of Father";
public Father(){
System.out.println(s);
}
public Father(String str){
s= str;
System.out.println(s);
}
}
class Son extends Father{
String s= "Run constructor method of son";
public Son(){
//瀹為檯涓婂湪榪欓噷鍔犱笂super()錛屽拰娌″姞鏄竴涓牱鐨?/p>
System.out.println(s);
}
public Son(String str){
this();//榪欓噷璋冪敤this()琛ㄧず璋冪敤鏈被鐨凷on(),鍥犱負(fù)Son()涓湁浜?jiǎn)涓涓猻uper()浜?jiǎn)锛屾墍浠ヨ繖閲屼笉鑳藉啀鍔犱簡(jiǎn)銆?/p>
s = str;
System.out.println(s);
}
public Son(String str1, String str2){
super(str1+" "+str2);//鍥犱負(fù)榪欓噷宸茬粡璋冪敤浜?jiǎn)涓涓埗綾葷殑甯﹀弬鏁扮殑super("---")浜?jiǎn)锛屾墍浠ヤ笉浼?xì)鍐嶈嚜鍔ㄨ皟鐢ㄤ簡(jiǎn)鏃犲弬鏁扮殑浜?jiǎn)銆?/p>
s = str1;
System.out.println(s);
}
}
public class MyClass9 {
public static void main(String[] args){
Father obfather1 = new Father();
Father obfather2 = new Father("Hello Father");
Son obson1 = new Son();
Son obson2 = new Son("hello son");
Son obson3 = new Son("hello son","hello father");
}
}
===============
緇撴灉:
Run constructor method of Father
Hello Father
Run constructor method of Father
Run constructor method of son
Run constructor method of Father
Run constructor method of son
hello son
hello son hello father
hello son
]]> 杈撳叆鍑芥暟scanf()璇﹁В http://www.shnenglu.com/ivy-jie/articles/85332.htmlivy-jie ivy-jie Fri, 22 May 2009 01:01:00 GMT http://www.shnenglu.com/ivy-jie/articles/85332.html http://www.shnenglu.com/ivy-jie/comments/85332.html http://www.shnenglu.com/ivy-jie/articles/85332.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/85332.html http://www.shnenglu.com/ivy-jie/services/trackbacks/85332.html 濡傛灉浣狅細(xì) char c[20]; scanf("%s",c); 杈撳叆:this is a c program! 瀹冩帴鏀跺埌this鍚庨亣鍒扮┖鏍鹼紝璁や負(fù)瀵瑰簲%s鐨勬暟鎹」宸茬粨鏉燂紝鍚庨潰鐨勶紙鍖呭惈絀烘牸錛変笉鑳借緭鍏ャ? 浣犳兂杈撳叆甯︾┖鏍肩殑瀛楃涓詫紝鍙湁浣跨敤gets(c); 浣嗛仐鎲劇殑鏄敤gets()鍑芥暟涓嬈″彧鑳借緭鍏ヤ竴涓瓧絎︿覆銆?br> 2 鎬葷粨 %d,閬囧埌鏁板瓧,'+','-'浠ュ鐨勫瓧絎︾粨鏉?鍙煩榪囩┖鏍? %f,,%lf:閬囧埌鏁板瓧, '.', 'e','+','-'涔嬪鐨勫瓧絎︾粨鏉?鍙煩榪囩┖鏍?br> %s,浠庣涓涓潪絀烘牸瀛楃璧風(fēng)洿鍒頒笅涓涓┖鏍肩粨鏉? %c,閬囧埌瀛楃灝辮祴鍊?涓嶇鏄┖鏍艱繕鏄洖杞︿箣綾葷殑. 鍋囧紼嬪簭涓嚭鐜拌繖鏍風(fēng)殑浠g爜,scanf("%d,%s,%c,%c").铏界劧紼嬪簭鏄互 ', '浣滀負(fù)鍒嗛殧鐨?浣?s鏄笉璁よ繖涓?', '鐨?瀹冨彧璁ょ┖鏍?鎵浠ヤ細(xì)鍑虹幇鍙橀噺涓嶈兘姝g‘璧嬪肩殑鎯呭喌,濡傛灉浣犲皢','鍘繪帀,浣嗙敱浜?c鍗撮亣鍒扮┖鏍煎張涓嶄細(xì)璺寵繃,鎵浠ヤ篃涓嶄細(xì)婊¤凍闇瑕?閫氳繃涓婇潰鐨勬垜浠煡閬?%c閬囧埌絀烘牸鏄笉浼?xì)锜q囩殑,鎵浠ユ垜閲囧彇涓嬮潰榪欎釜鏂瑰紡鏉ヨВ鍐?鍦?c鐨勫墠闈㈠姞涓涓┖鏍兼潵澶勭悊,榪欐牱灝卞彲浠ヨВ鍐充笂闈㈢殑鎵鏈夐棶棰樹(shù)簡(jiǎn),鎵浠ユ垜浠湪浣跨敤%c鏃?瑕佸湪鍓嶉潰鍔犱笂涓涓┖鏍?/span>,鍏繪垚榪欑涔?fàn)鎯彲浠ョ渷鍘讳笉灏戦喝潈?chǔ),騫朵笖鍦ㄤ嬌鐢?c涔嬪墠鏈濂借繕鍔犱笂涓鍙?span style="COLOR: #ff0000">fflush(stdin); 鐢ㄦ潵娓呴櫎緙撳瓨. 3 gets() 鍔熻兘:浠巗tdin嫻佷腑璇誨彇瀛楃涓詫紝鐩磋嚦鎺ュ彈鍒版崲琛岀鎴朎OF鏃跺仠姝紝騫跺皢璇誨彇鐨勭粨鏋滃瓨鏀懼湪str鎸囬拡鎵鎸囧悜鐨勫瓧絎︽暟緇勪腑銆傛崲琛岀涓嶄綔涓鴻鍙栦覆鐨勫唴瀹癸紝璇誨彇鐨勬崲琛岀琚漿鎹負(fù)null鍊鹼紝騫剁敱姝ゆ潵緇撴潫瀛楃涓層?br> 娉ㄦ剰:鏈嚱鏁板彲浠ユ棤闄愯鍙栵紝涓嶄細(xì)鍒ゆ柇涓婇檺錛屾墍浠ョ▼搴忓憳搴旇紜繚str鐨勭┖闂磋凍澶熷ぇ錛屼互渚垮湪鎵ц璇繪搷浣滄椂涓嶅彂鐢熸孩鍑恒?br> 瀹炰緥錛?include"stdio.h" void main() { char str[15]; gets(str); printf("%s/n",str); }
]]> 杞?qsort涓冪搴旂敤 http://www.shnenglu.com/ivy-jie/articles/83327.htmlivy-jie ivy-jie Mon, 18 May 2009 15:52:00 GMT http://www.shnenglu.com/ivy-jie/articles/83327.html http://www.shnenglu.com/ivy-jie/comments/83327.html http://www.shnenglu.com/ivy-jie/articles/83327.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/83327.html http://www.shnenglu.com/ivy-jie/services/trackbacks/83327.html <鏈枃涓帓搴忛兘鏄噰鐢ㄧ殑浠庡皬鍒板ぇ鎺掑簭> 涓銆佸int綾誨瀷鏁扮粍鎺掑簭 int num[100]; Sample: int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } qsort(num,100,sizeof(num[0]),cmp); 浜屻佸char綾誨瀷鏁扮粍鎺掑簭錛堝悓int綾誨瀷錛? char word[100]; Sample: int cmp( const void *a , const void *b ) { return *(char *)a - *(int *)b; } qsort(word,100,sizeof(word[0]),cmp); 涓夈佸double綾誨瀷鏁扮粍鎺掑簭錛堢壒鍒娉ㄦ剰錛? double in[100]; int cmp( const void *a , const void *b ) { return *(double *)a > *(double *)b ? 1 : -1; } qsort(in,100,sizeof(in[0]),cmp)錛? 鍥涖佸緇撴瀯浣撲竴綰ф帓搴? struct In { double data; int other; }s[100] //鎸夌収data鐨勫間粠灝忓埌澶у皢緇撴瀯浣撴帓搴?鍏充簬緇撴瀯浣撳唴鐨勬帓搴忓叧閿暟鎹甦ata鐨勭被鍨嬪彲浠ュ緢澶氱錛屽弬鑰冧笂闈㈢殑渚嬪瓙鍐? int cmp( const void *a ,const void *b) { return (*(In *)a).data > (*(In *)b).data ? 1 : -1; } qsort(s,100,sizeof(s[0]),cmp); 浜斻佸緇撴瀯浣撲簩綰ф帓搴? struct In { int x; int y; }s[100]; //鎸夌収x浠庡皬鍒板ぇ鎺掑簭錛屽綋x鐩哥瓑鏃舵寜鐓浠庡ぇ鍒板皬鎺掑簭 int cmp( const void *a , const void *b ) { struct In *c = (In *)a; struct In *d = (In *)b; if(c->x != d->x) return c->x - d->x; else return d->y - c->y; } qsort(s,100,sizeof(s[0]),cmp); 鍏佸瀛楃涓茶繘琛屾帓搴? struct In { int data; char str[100]; }s[100]; //鎸夌収緇撴瀯浣撲腑瀛楃涓瞫tr鐨勫瓧鍏擱『搴忔帓搴? int cmp ( const void *a , const void *b ) { return strcmp( (*(In *)a)->str , (*(In *)b)->str ); } qsort(s,100,sizeof(s[0]),cmp); 涓冦佽綆楀嚑浣曚腑姹傚嚫鍖呯殑cmp int cmp(const void *a,const void *b) //閲嶇偣cmp鍑芥暟錛屾妸闄や簡(jiǎn)1鐐瑰鐨勬墍鏈夌偣錛屾棆杞搴︽帓搴? { struct point *c=(point *)a; struct point *d=(point *)b; if( calc(*c,*d,p[1]) < 0) return 1; else if( !calc(*c,*d,p[1]) && dis(c->x,c->y,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //濡傛灉鍦ㄤ竴鏉$洿綰夸笂錛屽垯鎶婅繙鐨勬斁鍦ㄥ墠闈? return 1; else return -1; } PS: 鍏朵腑鐨剄sort鍑芥暟鍖呭惈鍦?lt;stdlib.h>鐨勫ご鏂囦歡閲岋紝strcmp鍖呭惈鍦?lt;string.h>鐨勫ご鏂囦歡閲?
]]>C++綆磋█1:緇濅笉鍦ㄦ瀯閫犳垨鏋愭瀯鏈熻皟鐢ㄨ櫄鍑芥暟 http://www.shnenglu.com/ivy-jie/articles/83251.htmlivy-jie ivy-jie Mon, 18 May 2009 09:26:00 GMT http://www.shnenglu.com/ivy-jie/articles/83251.html http://www.shnenglu.com/ivy-jie/comments/83251.html http://www.shnenglu.com/ivy-jie/articles/83251.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/83251.html http://www.shnenglu.com/ivy-jie/services/trackbacks/83251.html
class Transaction { // base class for all 銆public: // transactions 銆銆Transaction(); 銆銆virtual void logTransaction() const = 0; // make type-dependent 銆銆// log entry 銆銆... }; Transaction::Transaction() // implementation of { 銆// base class ctor 銆... 銆logTransaction(); // as final action, log this } // transaction class BuyTransaction: public Transaction { 銆// derived class 銆public: 銆銆virtual void logTransaction() const; // how to log trans- 銆銆// actions of this type 銆銆... }; class SellTransaction: public Transaction { // derived class public: 銆virtual void logTransaction() const; // how to log trans- 銆// actions of this type ... };
銆銆鑰冭檻鎵ц榪欒浠g爜鏃朵細(xì)鍙戠敓浠涔堬細(xì)
銆銆寰堟槑鏄?BuyTransaction 鐨勬瀯閫犲嚱鏁頒細(xì)琚皟鐢紝浣嗘槸棣栧厛錛孴ransaction 鐨勬瀯閫犲嚱鏁板繀欏誨厛琚皟鐢紝媧劇敓綾誨璞′腑鐨勫熀綾婚儴鍒嗗厛浜庢淳鐢熺被閮ㄥ垎琚瀯閫犮俆ransaction 鐨勬瀯閫犲嚱鏁扮殑鏈鍚庝竴琛岃皟鐢ㄨ櫄鍑芥暟 logTransaction錛屼絾鏄粨鏋滀細(xì)璁╀綘澶у悆涓鎯婏紝琚皟鐢ㄧ殑 logTransaction 鐗堟湰鏄湪 Transaction 涓殑閭d釜錛岃屼笉鏄?BuyTransaction 涓殑鈥斺斿嵆浣胯鍒涘緩鐨勫璞$被鍨嬫槸 BuyTransaction銆傚熀綾繪瀯閫犳湡闂達(dá)紝铏氬嚱鏁頒粠鏉ヤ笉浼?xì)鍚戜笅鍖归厤锛坓o down錛夊埌媧劇敓綾匯傚彇鑰屼唬涔嬬殑鏄紝閭d釜瀵硅薄鐨勮涓哄氨濂藉儚瀹冪殑綾誨瀷鏄熀綾匯傞潪姝e紡鍦拌錛?span style="COLOR: #ff0000">鍩虹被鏋勯犳湡闂達(dá)紝铏氬嚱鏁扮姝?/span>銆?榪欎釜琛ㄩ潰涓婄湅璧鋒潵鍖し鎵鎬濈殑琛屼負(fù)瀛樺湪涓涓緢濂界殑鐞嗙敱銆傚洜涓哄熀綾葷殑鏋勯犲嚱鏁板湪媧劇敓綾繪瀯閫犲嚱鏁頒箣鍓嶆墽琛岋紝褰撳熀綾繪瀯閫犲嚱鏁拌繍琛屾椂錛屾淳鐢熺被鏁版嵁鎴愬憳榪樻病鏈夎鍒濆鍖栥傚鏋滃熀綾繪瀯閫犳湡闂磋皟鐢ㄧ殑铏氬嚱鏁板悜涓嬪尮閰嶏紙go down錛夊埌媧劇敓綾伙紝媧劇敓綾葷殑鍑芥暟鐞嗘墍褰撶劧浼?xì)娑夊強(qiáng)鍒版湰鍦版暟鎹垚鍛樺Q屼絾鏄偅浜涙暟鎹垚鍛樿繕娌℃湁琚垵濮嬪寲銆傝繖灝變細(xì)涓烘湭瀹氫箟琛屼負(fù)鍜屾?zhèn)斾箣鏅氱煟鐨勮皟璇曞櫓姊﹀紑浜?jiǎn)涓寮犻氳璇?/span>銆傝皟鐢ㄦ秹鍙?qiáng)鍒颁竴涓璞¤繕娌℃湁琚垵濮嬪寲鐨勯儴鍒嗚嚜鐒舵槸鍗遍櫓鐨勶紝鎵浠?C++ 鍛婅瘔浣犳璺笉閫氥?br> 鍦ㄥ疄闄呬笂榪樻湁姣旇繖鏇村鐨勬洿娣卞眰嬈$殑鍘熺悊銆傚湪媧劇敓綾誨璞$殑鍩虹被鏋勯犳湡闂達(dá)紝瀵硅薄鐨勭被鍨嬫槸閭d釜鍩虹被鐨勩?span style="COLOR: #ff0000">涓嶄粎铏氬嚱鏁頒細(xì)瑙f瀽鍒板熀綾伙紝鑰屼笖璇█涓敤鍒拌繍琛屾椂綾誨瀷淇℃伅錛坮untime type information錛夌殑閰嶄歡錛堜緥濡傦紝dynamic_cast鍜?typeid錛夛紝涔熶細(xì)灝嗗璞¤涓哄熀綾葷被鍨嬨?/span>鍦ㄦ垜浠殑渚嬪瓙涓紝褰?Transaction 鏋勯犲嚱鏁拌繍琛屽垵濮嬪寲 BuyTransaction 瀵硅薄鐨勫熀綾婚儴鍒嗘椂錛屽璞$殑綾誨瀷鏄?Transaction銆侰++ 鐨勬瘡涓涓厤浠跺皢浠ュ涓嬬溂鍏夋潵鐪嬪緟瀹冿紝騫跺瀹冧駭鐢熻繖鏍風(fēng)殑鎰熻錛氬璞$殑 BuyTransaction 鐗規(guī)湁鐨勯儴鍒嗚繕娌℃湁琚垵濮嬪寲錛屾墍浠ュ畨鍏ㄧ殑瀵瑰緟瀹冧滑鐨勬柟娉曞氨鏄鑻ユ棤鐫廣傚湪媧劇敓綾繪瀯閫犲嚱鏁拌繍琛屼箣鍓嶏紝涓涓璞′笉浼?xì)鎴愪皋Z竴涓淳鐢熺被瀵硅薄銆?br> 銆銆鍚屾牱鐨勫師鍥犱篃閫傜敤浜庢瀽鏋勮繃紼嬨備竴鏃︽淳鐢熺被鏋愭瀯鍑芥暟榪愯錛岃繖涓璞$殑媧劇敓綾繪暟鎹垚鍛樺氨琚涓烘湭瀹氫箟鐨勫鹼紝鎵浠?C++ 灝卞皢瀹冧滑瑙嗕負(fù)涓嶅啀瀛樺湪銆傚湪榪涘叆鍩虹被鏋愭瀯鍑芥暟鏃訛紝瀵硅薄灝辨垚涓轟竴涓熀綾誨璞★紝C++ 鐨勬墍鏈夐厤浠垛斺旇櫄鍑芥暟錛宒ynamic_casts 絳夆斺旈兘濡傛鐪嬪緟瀹冦?
]]> 铏氬嚱鏁板疄鐜版満鍒?/title> http://www.shnenglu.com/ivy-jie/articles/83250.htmlivy-jie ivy-jie Mon, 18 May 2009 01:26:00 GMT http://www.shnenglu.com/ivy-jie/articles/83250.html http://www.shnenglu.com/ivy-jie/comments/83250.html http://www.shnenglu.com/ivy-jie/articles/83250.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/83250.html http://www.shnenglu.com/ivy-jie/services/trackbacks/83250.html 1 铏氬嚱鏁拌〃 铏氬嚱鏁幫紙Virtual Function錛夋槸閫氳繃涓寮犺櫄鍑芥暟琛紙Virtual Table錛夋潵瀹炵幇鐨勩傜畝縐頒負(fù)V-Table銆?鍦ㄨ繖涓〃涓紝涓繪槸瑕佷竴涓被鐨勮櫄鍑芥暟鐨勫湴鍧琛紝榪欏紶琛ㄨВ鍐充簡(jiǎn)緇ф壙銆佽鐩栫殑闂錛屼繚璇佸叾瀹圭湡瀹炲弽搴斿疄闄呯殑鍑芥暟銆傝繖鏍鳳紝鍦ㄦ湁铏氬嚱鏁扮殑綾葷殑瀹炰緥涓繖涓〃琚垎閰嶅湪浜?榪欎釜瀹炰緥鐨勫唴瀛樹(shù)腑錛屾墍浠ワ紝褰撴垜浠敤鐖剁被鐨勬寚閽堟潵鎿嶄綔涓涓瓙綾葷殑鏃跺欙紝榪欏紶铏氬嚱鏁拌〃灝辨樉寰楃敱涓洪噸瑕佷簡(jiǎn)錛屽畠?yōu)鍍忎竴涓湴鍥句竴鏍鳳紝鎸囨槑浜?jiǎn)瀹為檯鎵搴旇璋冪敤鐨勫嚱鏁般?
榪欓噷鎴戜滑鐫閲嶇湅涓涓嬭繖寮犺櫄鍑芥暟琛ㄣ傚湪C++鐨勬爣鍑嗚鏍艱鏄庝功涓鍒幫紝緙栬瘧鍣ㄥ繀闇瑕佷繚璇佽櫄鍑芥暟琛ㄧ殑鎸囬拡瀛樺湪浜庡璞″疄渚嬩腑鏈鍓嶉潰鐨勪綅緗紙榪欐槸涓轟簡(jiǎn)淇濊瘉姝g‘鍙栧埌铏氬嚱鏁扮殑鍋忕Щ閲忥級(jí)銆?榪欐剰鍛崇潃鎴戜滑閫氳繃瀵硅薄瀹炰緥鐨勫湴鍧寰楀埌榪欏紶铏氬嚱鏁拌〃錛岀劧鍚庡氨鍙互閬嶅巻鍏朵腑鍑芥暟鎸囬拡錛屽茍璋冪敤鐩稿簲鐨勫嚱鏁般?
2 浠g爜錛?br>#include <stdio.h> #include <iostream.h> #include <stdlib.h> typedef void (*Fun) (void); class Base{ public: virtual void f() {cout<<"Base::f"<<endl;} virtual void g() {cout<<"Base::g"<<endl;} virtual void h() {cout<<"Base::h"<<endl;} }; void main(int argc,char * argv[]) { Base b; Fun pFun = NULL; int *var1= (int *)&b; cout<<"铏氬嚱鏁拌〃鍦板潃:"<<var1<<endl; //(int*)(&b) int *var2 = (int*)*(int*)(&b); cout<<"铏氬嚱鏁拌〃-絎竴涓嚱鏁板湴鍧:"<< var2 << endl;//(int*)*(int*)(&b) //Invoke the first virtual function pFun = (Fun)*((int*)*(int*)(&b)+0); //f() pFun(); pFun = (Fun)*((int*)*(int*)(&b)+1); //g() pFun(); pFun = (Fun)*((int*)*(int*)(&b)+2); // h() pFun(); } //緇撴灉 铏氬嚱鏁拌〃鍦板潃:0x0012FF7C 铏氬嚱鏁拌〃-絎竴涓嚱鏁板湴鍧:0x0042804C Base::f Base::g Base::h
]]> 鍑芥暟鎸囬拡瀹炵幇鍥炶皟 http://www.shnenglu.com/ivy-jie/articles/83247.htmlivy-jie ivy-jie Mon, 18 May 2009 00:40:00 GMT http://www.shnenglu.com/ivy-jie/articles/83247.html http://www.shnenglu.com/ivy-jie/comments/83247.html http://www.shnenglu.com/ivy-jie/articles/83247.html#Feedback 0 http://www.shnenglu.com/ivy-jie/comments/commentRss/83247.html http://www.shnenglu.com/ivy-jie/services/trackbacks/83247.html p鏄寚鍚戞煇鍑芥暟鐨勬寚閽堬紝璇ュ嚱鏁版棤杈撳叆鍙傛暟錛岃繑鍥炲肩殑綾誨瀷涓簐oid銆傚乏杈瑰渾鎷姬閲屾槦鍙峰悗鐨勫氨鏄寚閽堝彉閲忓悕銆傛湁浜?jiǎn)鎸囬拡鍙橀噺渚垮彲浠ヨ祴鍊鹼紝鍊肩殑鍐呭鏄講鍚嶅尮閰嶇殑鍑芥暟鍚嶅拰榪斿洖綾誨瀷銆備緥濡傦細(xì) void func() { /* do something */ } p = func; p鐨勮祴鍊煎彲浠ヤ笉鍚岋紝浣嗕竴瀹氳鏄嚱鏁扮殑鍦板潃錛屽茍涓旂講鍚嶅拰榪斿洖綾誨瀷鐩稿悓銆?br> 浼犻掑洖璋冨嚱鏁扮殑鍦板潃緇欒皟鐢ㄨ?br> 鐜板湪鍙互灝唒浼犻掔粰鍙︿竴涓嚱鏁幫紙璋冪敤鑰咃級(jí)- caller()錛屽畠?yōu)畣璋冪敤p鎸囧悜鐨勫嚱鏁幫紝鑰屾鍑芥暟鍚嶆槸鏈煡鐨勶細(xì) void caller(void(*ptr)()) { ptr(); /* 璋冪敤ptr鎸囧悜鐨勫嚱鏁?*/ } void func(); int main() { p = func; caller(p); /* 浼犻掑嚱鏁板湴鍧鍒拌皟鐢ㄨ?*/ } 濡傛灉璧嬩簡(jiǎn)涓嶅悓鐨勫肩粰p錛堜笉鍚屽嚱鏁板湴鍧錛夛紝閭d箞璋冪敤鑰呭皢璋冪敤涓嶅悓鍦板潃鐨勫嚱鏁般傝祴鍊煎彲浠ュ彂鐢熷湪榪愯鏃訛紝榪欐牱浣夸綘鑳藉疄鐜板姩鎬佺粦瀹氥?br> 璋冪敤瑙勮寖 鍒扮洰鍓嶄負(fù)姝紝鎴戜滑鍙璁轟簡(jiǎn)鍑芥暟鎸囬拡鍙?qiáng)鍥炶皟鑰屾病鏈夊幓娉ㄦ剰ANSI C/C++鐨勭紪璇戝櫒瑙勮寖銆傝澶氱紪璇戝櫒鏈夊嚑縐嶈皟鐢ㄨ鑼冦傚鍦╒isual C++涓紝鍙互鍦ㄥ嚱鏁扮被鍨嬪墠鍔燺cdecl錛宊stdcall鎴栬卂pascal鏉ヨ〃紺哄叾璋冪敤瑙勮寖錛堥粯璁や負(fù)_cdecl錛夈侰++ Builder涔熸敮鎸乢fastcall璋冪敤瑙勮寖銆傝皟鐢ㄨ鑼冨獎(jiǎng)鍝嶇紪璇戝櫒浜х敓鐨勭粰瀹氬嚱鏁板悕錛屽弬鏁頒紶閫掔殑欏哄簭錛堜粠鍙沖埌宸︽垨浠庡乏鍒板彸錛夛紝鍫嗘爤娓呯悊璐d換錛堣皟鐢ㄨ呮垨鑰呰璋冪敤鑰咃級(jí)浠ュ強(qiáng)鍙傛暟浼犻掓満鍒訛紙鍫嗘爤錛孋PU瀵勫瓨鍣ㄧ瓑錛夈?br> 灝嗚皟鐢ㄨ鑼冪湅鎴愭槸鍑芥暟綾誨瀷鐨勪竴閮ㄥ垎鏄緢閲嶈鐨勶紱涓嶈兘鐢ㄤ笉鍏煎鐨勮皟鐢ㄨ鑼冨皢鍦板潃璧嬪肩粰鍑芥暟鎸囬拡銆備緥濡傦細(xì) // 琚皟鐢ㄥ嚱鏁版槸浠nt涓哄弬鏁幫紝浠nt涓鴻繑鍥炲?br>__stdcall int callee(int); // 璋冪敤鍑芥暟浠ュ嚱鏁版寚閽堜負(fù)鍙傛暟 void caller( __cdecl int(*ptr)(int)); // 鍦╬涓紒鍥懼瓨鍌ㄨ璋冪敤鍑芥暟鍦板潃鐨勯潪娉曟搷浣?br>__cdecl int(*p)(int) = callee; // 鍑洪敊 鎸囬拡p鍜宑allee()鐨勭被鍨嬩笉鍏煎錛屽洜涓哄畠浠湁涓嶅悓鐨勮皟鐢ㄨ鑼冦傚洜姝や笉鑳藉皢琚皟鐢ㄨ呯殑鍦板潃璧嬪肩粰鎸囬拡p錛屽敖綆′袱鑰呮湁鐩稿悓鐨勮繑鍥炲煎拰鍙傛暟鍒椼?
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
欧美国产大片 |
欧美大色视频 |
亚洲欧美日韩在线一区 |
欧美日韩日日骚 |
一本在线高清不卡dvd
|
欧美jizzhd精品欧美巨大免费 |
先锋影音国产一区 |
揄拍成人国产精品视频 |
欧美性色视频在线 |
欧美国产视频一区二区 |
亚洲欧美日韩中文在线制服 |
亚洲第一成人在线 |
欧美在线观看一区 |
一区二区三区精品久久久 |
国产综合激情 |
国产亚洲一二三区 |
中日韩在线视频 |
在线电影国产精品 |
国语自产精品视频在线看 |
国产精品乱码人人做人人爱 |
久久人人97超碰国产公开结果 |
亚洲午夜精品福利 |
亚洲综合成人在线 |
久久激情五月婷婷 |
亚洲精品三级 |
久久婷婷人人澡人人喊人人爽 |
中文精品视频一区二区在线观看 |
国产精品永久在线 |
欧美日韩国产精品 |
销魂美女一区二区三区视频在线 |
亚洲视频在线一区 |
亚洲影视九九影院在线观看 |
亚洲精品一区二区三 |
99精品热6080yy久久 |
99视频精品免费观看 |
亚洲一区二区日本 |
国产一区视频观看 |
亚洲国产精品嫩草影院 |
亚洲精品乱码久久久久久黑人
|
亚洲欧美亚洲 |
亚洲欧美中文日韩v在线观看 |
亚洲欧美日韩在线不卡 |
久久频这里精品99香蕉 |
国产精品福利在线观看网址 |
极品裸体白嫩激情啪啪国产精品 |
黑人巨大精品欧美一区二区小视频
|
欧美三级韩国三级日本三斤 |
国产精品久久久久三级 |
狠久久av成人天堂 |
久久av一区二区 |
翔田千里一区二区 |
红桃av永久久久 |
久久亚洲综合 |
久久久福利视频 |
一区二区三区在线视频免费观看 |
久久精品理论片 |
久久久久综合网 |
亚洲精品久久久久久久久久久 |
国产日韩亚洲 |
欧美大色视频 |
欧美视频一区在线观看 |
欧美一区二区三区四区在线观看地址 |
中文久久乱码一区二区 |
国产丝袜一区二区 |
欧美aaaaaaaa牛牛影院 |
欧美区亚洲区 |
欧美成人精品福利 |
欧美日本国产视频 |
久久精品中文字幕一区 |
欧美高清一区 |
欧美福利一区二区三区 |
国产农村妇女毛片精品久久麻豆 |
午夜精品在线 |
欧美大片免费观看 |
久久精品国产综合精品 |
欧美成人在线免费观看 |
久久免费视频网站 |
欧美日韩你懂的 |
亚洲国产日韩欧美在线动漫
|
一区二区三区日韩精品视频 |
亚洲欧美在线aaa |
99精品视频一区 |
久久色在线观看 |
免费一区二区三区 |
韩日在线一区 |
欧美11—12娇小xxxx |
久久gogo国模啪啪人体图 |
午夜免费日韩视频 |
国产精品久久久久久亚洲调教
|
在线视频日本亚洲性 |
欧美在线观看视频 |
欧美视频一区在线 |
亚洲在线电影 |
久久久久久9999 |
亚洲高清123 |
欧美日韩国产色综合一二三四 |
日韩视频在线一区 |
亚洲一区二区三区成人在线视频精品 |
欧美精品九九99久久 |
中文精品一区二区三区 |
久久久久一区 |
一区二区高清在线 |
国产偷国产偷亚洲高清97cao |
午夜在线a亚洲v天堂网2018 |
欧美成人精品在线观看 |
亚洲国产日韩欧美 |
国产视频观看一区 |
欧美www视频在线观看 |
亚洲调教视频在线观看 |
久久夜色精品国产 |
亚洲视频在线一区 |
在线欧美亚洲 |
国产婷婷精品 |
午夜激情一区 |
香蕉视频成人在线观看 |
亚洲福利av |
亚洲国产成人av |
国产综合欧美 |
国产精品系列在线 |
国产精品久久77777 |
欧美久久久久免费 |
欧美日韩亚洲精品内裤 |
欧美人妖另类 |
欧美日韩国产精品成人 |
欧美区一区二区三区 |
麻豆成人精品 |
亚洲欧美激情一区二区 |
国产手机视频精品 |
国产精品久久久久高潮 |
欧美极品在线播放 |
老司机成人在线视频 |
欧美一级午夜免费电影 |
欧美在线观看网址综合 |
欧美不卡视频 |
亚洲国产日韩在线 |
亚洲最新在线 |
午夜视频久久久久久 |
久久久久一区二区 |
欧美精品一区二区三区很污很色的 |
欧美大色视频 |
欧美三日本三级少妇三99 |
国产欧美日本一区视频 |
国产在线不卡视频 |
99re66热这里只有精品4 |
中国亚洲黄色 |
久久网站免费 |
在线亚洲观看 |
欧美成人免费在线视频 |
国产精品日日做人人爱 |
亚洲国产日韩欧美综合久久
|
亚洲视频综合在线 |
亚洲图片自拍偷拍 |
你懂的成人av |
影音先锋日韩精品 |
国产精品久久久久9999 |
国产亚洲一区二区在线观看 |
99ri日韩精品视频 |
久久一区二区三区四区五区 |
亚洲永久免费精品 |
欧美日韩亚洲视频 |
亚洲理论在线 |
亚洲电影免费在线观看 |
欧美在线日韩精品 |
国产欧美日韩亚洲 |
欧美一区二区视频免费观看 |
亚洲视频欧洲视频 |
国产精品高清在线 |
午夜在线观看欧美 |
亚洲天堂偷拍 |
国产日韩欧美一区在线 |
欧美一区二区视频网站 |
日韩视频国产视频 |
一本一本久久a久久精品综合麻豆 |
欧美电影免费观看大全 |
136国产福利精品导航网址应用 |
蜜臀久久99精品久久久久久9 |
久久久久网站 |
一本一本久久 |
欧美一区二区视频网站 |
亚洲黄网站在线观看 |
亚洲尤物视频在线 |
亚洲电影av |
亚洲精品视频一区二区三区 |
欧美日韩精品一区二区在线播放
|
午夜精品视频网站 |
久久久久高清 |
亚洲激情网址 |
亚洲精品欧美一区二区三区 |
亚洲黄色一区 |
欧美性色综合 |
欧美国产日产韩国视频 |
国产精品主播 |
亚洲视频一二 |
亚洲国产日本 |
久久综合五月 |
裸体一区二区三区 |
国内精品久久久久影院优 |
一本久久综合亚洲鲁鲁五月天 |
黄色成人小视频 |
午夜精品久久久久久久白皮肤 |