锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
3.2 Quoted printable 緙栫爜 QP 緙栫爜鐢ㄤ簬琛ㄧず鍚湁澶ч噺瀵瑰簲鍙墦鍗板瓧絎︾殑鏁扮粍錛岃繖縐嶇紪鐮佹柟寮忎嬌瀛楃鍗曞厓鍦ㄤ紶杈撹繃紼嬩腑琚洿鏀圭殑鍙兘鎬у緢灝忋傚鏋滄鍦ㄧ紪鐮佺殑鏁版嵁澶ч儴鍒嗘槸ASCII鏂囨湰錛岄偅涔堢紪鐮佸悗鐨勫艦寮忓叿鏈夊緢楂樼殑鍙鎬с備竴涓畬鍏ㄦ槸ASCII鍊肩殑姝f枃鏁版嵁鐢?/span>QP緙栫爜鍚庡彲浠ヤ繚璇佹暟鎹湪瀛楃緲昏瘧鎴栫粡鐢辯綉鍏蟲(chóng)椂鏁版嵁鐨勫畬鏁存с?/span> 緙栫爜瑙勫垯濡備笅錛?/span> 瑙勫垯1錛?/span>(涓鑸?/span>8浣嶇粍鐨勮〃紺烘柟寮?/span>), 浠諱綍鐨勫叓浣嶇粍錛岄兘鍙互鐢?/span>”=”鍚庡姞璇ュ叓浣嶇粍鐨?/span>16榪涘埗鍊兼潵琛ㄧず錛岄櫎浜?jiǎn)閭d簺鏍规嵁鏁版嵁缂栫爜瑙勮寖涓柊琛岀殑鎯緥鏉ユ寚瀹氱煭琛岀殑琛ńC哄崟浣嶃傚繀欏葷敤澶у啓瀛楁瘝銆傛瘮濡傚兼槸12 錛屽垯琛ㄧず涓?/span>”=0C”銆?/span> 瑙勫垯2錛?/span>(鏂囧瓧琛ㄧず)鍊煎湪33-60 錛屼互鍙?/span>62-126鐨勫叓浣嶇粍(鍖呭惈澶村熬鍊?/span>)錛屽彲浠ヨ〃紺烘垚閭d簺鍏綅緇勫搴旂殑ASCII瀛楃銆?/span> 瑙勫垯3錛?/span>(絀烘牸) 鍊兼槸9鍜?/span>32鐨勫叓浣嶇粍鍙互鍒嗗埆琛ㄧず涓?/span>ASCII 鐨?/span>TAB鍜?/span>SPACE鍊鹼紝浣嗘槸涓嶅彲浠ュ嚭鐜板湪緙栫爜琛岀殑鏈熬銆備換浣曞湪緙栫爜琛岀殑TAB鎴?/span>SPACE瀛楃蹇呴』鍚庨潰鏈夊彲鎵撳嵃瀛楃鍑虹幇銆傜壒孌婃儏鍐典笅錛岀紪鐮佽鐨勬湯灝懼嚭鐜扮殑”=”錛岃〃紺烘柇琛岋紝鍏跺墠闈㈠彲鑳芥槸涓涓垨澶氫釜TAB鎴?/span>SPACE銆?/span> 瀹炶榪欐潯瑙勫垯鐨勫師鍥犳槸涓浜?/span>METs(Message Transport Agents-娑堟伅浼犺緭鍗曞厓)浼?xì)鍦ㄦ枃鏈湯灏捐ˉ涓?/span>SPACE錛屽洜姝わ紝瑙g爜鏃訛紝浠諱綍璺熷湪琛屽悗鐨勭┖鏍煎繀欏誨垹闄ゃ?/span> 瑙勫垯4錛?/span>(鏂)鍦ㄥ師鏂囦腑鐨勬柇琛屽繀欏昏〃紺烘垚鍗忚涓殑鏂絎?/span>-CRLF搴忓垪錛?/span>"=0D=0A” 錛?/span>銆傜敱浜庨潪鏂囨湰綾誨瀷鐨勮鑼冭〃紺轟竴鑸笉鍖呮嫭鏂錛屾墍浠ヨ繖縐嶇被鍨嬬殑qp緙栫爜娌℃湁紜崲琛屻傞氬父錛?/span>base64緙栫爜鍦ㄤ簩榪涘埗緙栫爜涓婃洿鍗犱紭鍔褲?/span> 瑙勫垯5錛?/span>(杞崲琛?/span>)QP緙栫爜瑕佹眰緙栫爜鍚庢瘡琛屼笉鑳借秴榪?/span>76涓瓧絎︺傚綋瓚呰繃榪欎釜闄愬埗鏃訛紝灝嗛傜敤杞崲琛岋紝鐢?/span>”=”琛ㄧず緙栫爜琛岀殑鏂錛屽悗鎺?/span>CRLF銆傦紙76鐨勯檺鍒跺寘鎷?/span>”=”錛夈?/span> return *this; CLargeObject& operator = (const CLargeObject& ob); // control variables. Data *m_pData; CLargeObject::CLargeObject(int nVal) CLargeObject::CLargeObject(const CLargeObject &ob) // copy constructor CLargeObject::~CLargeObject() CLargeObject& CLargeObject::operator = (const CLargeObject& ob) // copy assignment return *this; void CLargeObject::SetVal(int nNewVal) int CLargeObject::GetVal() const 鏈枃鍐呭鍖呮嫭: 鎺ヤ笅鏉ョ殑鏂囩珷灝嗕細(xì)瀵瑰浣曞埄鐢≧ational Rose 鐨勯嗗悜杞嚭宸ョ▼鏉ヨ繘琛岀郴緇熷垎鏋愯繘琛屾洿鍔犺緇嗗湴闃愯堪銆?/p>
閫嗗悜宸ョ▼錛圧everse Engineer錛夊氨鏄粠鐜版湁緋葷粺鐨勪唬鐮佹潵鐢熸垚妯″瀷鐨勫姛鑳姐傚垎鏋愬凡鏈夌殑浠g爜鍏朵富瑕佺殑鐩殑灝辨槸浜?jiǎn)瑙d唬鐮伨l撴瀯鍜屾暟鎹粨鏋勶紝榪欎簺瀵瑰簲鍒版ā鍨嬪浘灝辨槸綾誨浘銆佹暟鎹ā鍨嬪浘鍜岀粍浠跺浘錛堝UML鍚勭妯″瀷鍥劇殑鎻忚堪瑙佹敞閲娾憿錛夛紝涔熷氨鏄氳繃Rational Rose鐨勯嗗悜宸ョ▼鎵寰楀埌鐨勭粨鏋溿俁ational Rose鎵鏀寔鐨勯嗗悜宸ョ▼鍔熻兘寰堝己澶э紝鍖呮嫭鐨勭紪紼嬭璦鏈塁++, VB, VC, Java, CORBA錛屼互鍙?qiáng)鏁版嵁搴揇DL鑴氭湰絳夌瓑錛屽茍涓斿彲浠ョ洿鎺ヨ繛鎺B2, SQLServer, Oracle鍜孲ybase絳夋暟鎹簱瀵煎叆Schema騫剁敓鎴愭暟鎹ā鍨嬨?/p>
寰堝澶у瀷鐨凜++寮鍙戠殑浜у搧閮芥秹鍙?qiáng)鍒版暟鎹簱鐨勪娇鐢ㄥQ屽榪欑澶у瀷緋葷粺鐨勫紑鍙戯紝灝ゅ叾鏄仛浜屾寮鍙戠殑鎯呭喌涓嬶紝涓昏鐨勯毦鐐瑰氨鏄婧愮爜鍜屾暟鎹簱緇撴瀯鐨勫垎鏋愩傝屽埄鐢≧ose鐨勯嗗悜宸ョ▼榪欎竴鍔熻兘錛屽氨鍙互瀹屾垚浠g爜'綾誨浘浠ュ強(qiáng)鏁版嵁搴揝chema->鏁版嵁妯″瀷鍥劇殑杞崲錛岃В鍐寵繖涓ゅぇ闅劇偣錛屽彲浠ヤ嬌寮鍙戝拰璁捐浜哄憳鍦ㄥ榪欑澶у瀷緋葷粺鐨勫崌綰с佸垎鏋愬拰寮鍙戜腑錛屾洿涓烘柟渚褲佸揩鎹楓佹湁鏉$悊鍦版帉鎻$郴緇熺粨鏋勶紝涓嶇敤鍐嶄負(fù)鍒嗘瀽搴炲ぇ鐨勭郴緇熺粨鏋勮屽ご鐤箋?/p>
浜岋紟濡備綍鐢≧ational Rose榪涜C++浠g爜鍒嗘瀽 榪欎竴鑺備富瑕佷粙緇嶇敤鎴峰浣曚嬌鐢≧ose鐨勯嗗悜宸ョ▼鐢熸垚UML妯″瀷錛屽茍鐢ㄦ潵榪涜C++浠g爜鐨勭粨鏋勫垎鏋愩?/p>
Rational Rose鍙互鏀寔鏍囧噯C++鍜孷isual C++鐨勬ā鍨嬪埌浠g爜鐨勮漿鎹互鍙?qiáng)閫嗗悜宸ョ▼銆備笅闈㈠皢璇︾粏鍦拌鏄庤繖涓ょC++ project鐨勯嗗悜宸ョ▼鐨勬楠ゅ拰鍏蜂綋鎿嶄綔銆?/p>
1錛?ANSI C++錛堟爣鍑咰++錛夐嗗悜宸ョ▼錛圧everse Engineer錛変嬌鐢ㄦ爣鍑咰++閫嗗悜宸ョ▼錛岄渶瑕佸湪緇勪歡鍥撅紙component view錛変腑鍒涘緩涓涓粍浠訛紙component錛夛紝璁劇疆濂介渶瑕佽繘琛岃漿鎹㈢殑緇勪歡鐨勪俊鎭紝涔熷氨鏄緇勪歡鐨勮璦銆佹墍鍖呭惈鐨勬枃浠躲佹枃浠舵墍鍦ㄧ殑璺緞銆佹枃浠跺悗緙絳夌瓑淇℃伅錛岀劧鍚嶳everse Engineer灝卞彲浠ユ牴鎹粰瀹氱殑淇℃伅灝嗕唬鐮佽漿鎹㈡垚綾誨浘浜?jiǎn)銆?/p>
a) 鍙抽敭鐐瑰嚮緇勪歡瑙嗗浘錛圕omponent View錛夛紝閫夋嫨New->Component錛屽垱寤轟竴涓柊鐨勭粍浠?br>銆 鈶犻変腑鍒涘緩鐨刢omponent錛岀偣鍑誨彸閿紝閫変腑Open Specification 鈶″湪榪欎釜瀵硅瘽妗嗕腑灝嗚component鐨刲anguage璁懼畾涓篈NSI C++ c) 閰嶇疆璇NSI C++ component錛岃緗ソ璇omponent涓寘鍚殑C++浠g爜鏂囦歡錛屽茍榪涜C++璇█鐨勮緇嗚緗?/p>
鈶犻変腑璇omponent錛岀偣鍑誨彸閿紝閫夋嫨ANSI C++->Open ANSI C++ Specification 鈶℃妸Source file root directory璁懼畾涓轟綘鐨凜++婧愮爜鏂囦歡鎵鍦ㄧ殑璺緞錛屽茍涓斿皢闇瑕佽漿鎹㈢殑鏂囦歡娣誨姞鍒癙roject Files涓紝瑙嗕綘鐨勯渶瑕佹潵鍋氬叾瀹冪殑璁懼畾錛屾瘮濡傦細(xì)澶存枃浠舵墿灞曞悕絳夌瓑銆?/p>
d) 灝嗚緗ソ鐨刢omponent杞崲鎴愭ā鍨嬪浘 鈶犻変腑璁劇疆濂界殑component錛岀偣鍑誨彸閿紝閫変腑ANSI C++->Reverse Engineer a) 灝哣C++ Project鐨勪俊鎭祴緇欏垰鍒氬垱寤哄ソ鐨刢omponent銆?/p>
鈶犻夋嫨璇omponent錛岀偣鍑誨彸閿紝閫夋嫨Assign To Project 鈶″湪瀵硅瘽妗嗕腑鎵懼埌鍒氬垰鍒涘緩鐨刢omponent錛屽彸閿偣鍑誨茍閫夋嫨Properties銆?/p>
鈶㈠湪涓嬮潰瀵硅瘽妗嗕腑閫変腑闇瑕佽繘琛岃漿鎹㈢殑Project錛岀偣鍑籵k錛岃component灝變笌闇瑕佽漿鎹㈢殑project鍏寵仈涓婁簡(jiǎn)銆?/p>
閫変腑璁劇疆濂界殑component錛岀偣鍑誨彸閿紝Update Model…錛屽皢浼?xì)寮瑰嚭纭瀵硅瘽妗嗗Q岄変腑闇瑕佽漿鎹㈢殑class錛岀偣鍑籪inish灝卞彲浠ヤ簡(jiǎn)銆?/p>
涓夛紟濡備綍鐢≧ational Rose榪涜鏁版嵁搴撶粨鏋勫垎鏋?/strong> 鍒╃敤Rational Rose鍙互榪涜鍏崇郴鏁版嵁搴撶殑鏁版嵁妯″瀷璁捐騫跺鍑篋DL璇█鑴氭湰錛岀浉鍙嶈繕鍙互瀵煎叆宸叉湁鐨凞DL鑴氭湰鐢熸垚鏁版嵁妯″瀷浠ュ強(qiáng)榪炴帴SQLServer, DB2, Oracle絳夋暟鎹簱騫跺鍏ユ暟鎹簱鐨剆chema鐢熸垚鏁版嵁妯″瀷銆?/p>
涓嬮潰浠QL Server涓轟緥璇存槑涓涓嬮嗗悜杞崲宸ョ▼鐨勬楠ゃ?/p>
a) 棣栧厛錛岄夋嫨Tools->Data Modeler-> Reverse Engineer 杞崲鎿嶄綔浼?xì)鑷姩鍦ňl勪歡鍥撅紙Component View錛変腑娣誨姞鏁版嵁搴撶粍浠訛紝騫跺湪閫昏緫鍥撅紙Logical View錛変腑鐢熸垚浠ャ奡chema銆嬩綔涓哄懡鍚嶅紑澶寸殑鏁版嵁妯″瀷銆?/p>
鍦≧ational Rose涓紝鏈変簺妯″瀷鍥炬槸涓嶄細(xì)鑷姩鐢熸垚鐨勶紝寰堝鏃跺欒繖涓伐浣滈渶瑕佺敤鎴鋒墜宸ユ潵瀹屾垚銆備篃灝辨槸璇達(dá)紝Rational Rose鍙礋璐g敓鎴愭ā鍨嬶紝鍖呮嫭妯″瀷涓殑鍏冪礌銆佸厓绱犵殑灞炴т互鍙?qiáng)鍚勪釜鍏冪礌涔嬮棿鐨勫叧绯诲Q屼絾鏄渶瑕佺敤鎴峰仛涓浜涢澶栫殑宸ヤ綔鏉ュ緱鍒拌鍥俱?/p>
棣栧厛錛岄氳繃閫嗗悜宸ョ▼錛岀敤鎴峰凡緇忓緱鍒頒簡(jiǎn)UML妯″瀷鎴栬呮暟鎹ā鍨嬬殑鍚勪釜緇勪歡浠ュ強(qiáng)瀹冧滑涔嬮棿鐨勫叧緋匯?涓嬩竴姝ラ渶瑕佸湪璇ユā鍨嬩笂鍒涘緩涓涓鍥撅紝瀹冧滑鍙互鏄被鍥撅紙class diagram錛屾弿榪扮郴緇熺殑闈?rùn)鎬佺粨鏋勶級(jí)鎴栬呮暟鎹ā鍨嬪浘錛圖ata model digram錛屾弿榪板叧緋繪暟鎹粨鏋勶級(jí)銆傜劧鍚庯紝鎵嬪姩浠庡乏杈圭殑explorer涓皢鍚勪釜鍏冪礌鎷栬繘瑙嗗浘涓紝鍦ㄨ繖涓繃紼嬩腑錛屽悇涓厓绱犱箣闂寸殑鍏寵仈鍏崇郴浼?xì)鑷姩鍦ㄥ浘涓〃绀哄嚭鏉ュQ岃屼笉闇瑕佺敤鎴峰啀鍋氬叾浠栧伐浣溿?/p>
渚嬪錛氱敓鎴愪竴涓暟鎹ā鍨嬬殑鏁版嵁妯″瀷鍥劇殑榪囩▼ 浠庡乏杈瑰皢鏁版嵁妯″瀷涓殑鏁版嵁鍏冪礌鎷栧埌鍙寵竟鐨勬暟鎹ā鍨嬪浘涓紝琛–ustomerCustomerDemo鍜岃〃CustomerDemographics涔嬮棿鐨勪緷璧栧叧緋葷殑鑿卞艦綆ご鏄嚜鍔ㄧ敓鎴愮殑錛屾棤闇鎵嬪伐鎿嶄綔銆?/p>
涓鑸潵璇達(dá)紝涓涓郴緇熶腑鎵娑夊強(qiáng)鐨勬暟鎹厓绱犻潪甯稿錛屽鑷磋鍥懼緢鎷ユ尋錛屾帓鐗堜篃闈炲父鍥伴毦銆俁ational Rose鎻愪緵鐨勮嚜鍔ㄦ帓鐗堝姛鑳藉彲浠ュ緢鏂逛究鍦板府鍔╃敤鎴瘋В鍐寵繖涓棶棰樸?/p>
閫夋嫨Format->Layout Diagram錛岀郴緇熶細(xì)灝嗗浘涓殑鎵鏈夊厓绱犵敤鏈浼樻柟寮忛噸鏂版帓鍒楋紝緇欑敤鎴蜂竴涓竻鏅扮殑瑙嗗浘銆?/p>
浜?jiǎn)瑙d簡(jiǎn)Rational Rose鐨勯嗗悜宸ョ▼鍔熻兘錛岀敤鎴峰氨鍙互鏂逛究鍦板埄鐢ㄨ繖涓宸ュ叿榪涜澶у瀷鏁版嵁搴撶浉鍏崇殑C++緋葷粺鐨勫垎鏋愬拰鐮旂┒浜?jiǎn)銆?/p>
鈶營(yíng)BM Rational Software Architect鏄竴涓泦鎴愬紡璁捐鍜屽紑鍙戝伐鍏鳳紝浣跨敤鎴峰彲浠ョ敤UML妯″瀷椹卞姩鐨勫紑鍙戞柟寮忓紑鍙戝嚭緇撴瀯娓呮櫚鐨勫簲鐢ㄧ▼搴忓拰鏈嶅姟銆?/p>
鈶BM Rational Software Modeler鏄熀浜嶶ML2.0鐨勫彲瀹氬埗鐨勫彲瑙嗗寲寤烘ā鍜岃璁″伐鍏鳳紝閬靛驚瀹冩墍鎻愪緵鐨勫伐浣滄祦紼嬶紝鍙互浣垮緱緋葷粺璁捐甯堬紝緋葷粺鍒嗘瀽甯堬紝璁捐浜哄憳絳夊啓鍑烘洿涓烘竻鏅扮殑鏂囨。錛屾洿涓烘湁鏁堝湴榪涜娌熼氬拰璁捐宸ヤ綔銆?/p>
鈶ML鎻愪緵鐨勫悇縐嶇被鍨嬬殑妯″瀷鎻忚堪鍥?/p>
鐢ㄤ緥鍥?Use Case Diagram)錛氭弿榪扮郴緇熸彁渚涚殑涓涓姛鑳藉崟鍏冿紝涓昏鐩殑鏄府鍔╁紑鍙戝洟闃熶互涓縐嶅彲瑙嗗寲鐨勬柟寮忕悊瑙g郴緇熺殑鍔熻兘闇姹傦紝鍖呮嫭鍩轟簬鍩烘湰嫻佺▼鐨?瑙掕壊"錛坅ctors錛屼篃灝辨槸涓庣郴緇熶氦浜掔殑鍏朵粬瀹炰綋錛夊叧緋伙紝浠ュ強(qiáng)緋葷粺鍐呯敤渚嬩箣闂寸殑鍏崇郴銆?/p>
搴忓垪鍥?Sequence Diagram)錛氭樉紺哄叿浣撶敤渚嬶紙鎴栬呮槸鐢ㄤ緥鐨勪竴閮ㄥ垎錛夌殑璇︾粏嫻佺▼銆?/p>
鐘舵佸浘(Statechart Diagram)錛氳〃紺烘煇涓被鎵澶勭殑涓嶅悓鐘舵佸拰璇ョ被鐨勭姸鎬佽漿鎹俊鎭?/p>
媧誨姩鍥?Activity Diagram)錛氳〃紺哄湪澶勭悊鏌愪釜媧誨姩鏃訛紝涓や釜鎴栬呮洿澶氱被瀵硅薄涔嬮棿鐨勮繃紼嬫帶鍒舵祦銆?/p>
綾誨浘(Class Diagram)錛氳〃紺轟笉鍚岀殑瀹炰綋錛堜漢銆佷簨鐗╁拰鏁版嵁錛夊浣曞郊姝ょ浉鍏籌紱鎹㈠彞璇濊錛屽畠鏄劇ず浜?jiǎn)绯痪l熺殑闈?rùn)鎬佺粨鏋勩?/p>
緇勪歡鍥?Component Diagram)錛氭彁渚涚郴緇熺殑鐗╃悊瑙嗗浘銆傜粍浠訛紙Component錛夎〃紺烘ā鍨嬩唬鐮佸簱銆佹墽琛屽簱鍜屽叾瀹冪粍浠剁殑淇℃伅銆傜粍浠舵槸浠g爜鐨勫疄闄呮ā鍧楋紝緇勪歡鍥句富瑕佺敤鎴鋒槸璐熻矗鎺у埗浠g爜鍜岀紪璇戦儴緗插簲鐢ㄧ▼搴忕殑浜恒傛湁浜涚粍浠舵槸浠g爜搴擄紝鏈変簺緇勪歡鏄繍琛岀粍浠訛紝濡傛墽琛屾枃浠舵垨鍔ㄦ侀摼鎺ュ簱錛圖LL錛夋枃浠躲傦級(jí) 閮ㄧ講鍥?Deployment View)錛氳〃紺鴻杞歡緋葷粺濡備綍閮ㄧ講鍒扮‖浠剁幆澧冧腑銆?/p>
鏁版嵁妯″瀷鍥?Data Model Diagram)錛氭弿榪板叧緋繪暟鎹粨鏋勩?/p>
QueryInterface鍑芥暟 涓昏鐢ㄤ簬COM鎺ュ彛鐨勬煡璇€傚畠鏄?/span>COM鎺ュ彛瀹氫箟IUnknown鐨勬垚鍛樺嚱鏁幫紝瀹㈡埛鍙互璋冪敤QueryInterface鏉ュ喅瀹氱粍浠舵槸鍚︽敮鎸佹煇涓壒瀹氱殑鎺ュ彛銆?/span> 緇勪歡COM鎺ュ彛閮芥槸浠?/span>IUnkonwn鎺ュ彛緇ф壙鑰屾潵錛屼換浣曚竴涓帴鍙i兘鍙互鐢?/span>IUnknown鐨勬垚鍛?/span>QueryInterface鏉ヨ幏鍙栧畠鎵鏀寔鐨勫叾瀹冩帴鍙c?/span> 1錛夊畾涔夛細(xì) HRESULT
_stdcall QueryInterface(const IID& iid,void ** ppv); 絎竴涓弬鏁板崄鎵闇鎺ュ彛鐨勬爣璇嗭紝鏄竴涓帴鍙f爣璇嗙IID緇撴瀯銆?/span> 絎簩涓弬鏁板瓨鏀炬墍璇鋒眰鎺ュ彛鎸囬拡鐨勫湴鍧銆?/span> 2錛変嬌鐢ㄨ繃紼嬶細(xì) 鍋囧畾宸叉湁涓涓寚鍚?/span>IUnknown鐨勬寚閽?/span>pI錛屼負(fù)鐭ラ亾鐩稿簲鐨勭粍浠舵槸鍚︽敮鎸佹煇涓壒瀹氱殑鎺ュ彛錛岃皟鐢?/span>QueryInterface錛屼紶緇欏畠涓涓帴鍙f爣璇嗙銆傝嫢鎴愬姛榪斿洖錛岄偅灝辨槸鍙互浣跨敤瀹冭繑鍥炵殑鎸囬拡銆?/span> Void
foo(IUnknown * pI) { IX *pIX=NULL; HRESULT hr=pI->QueryInterface(IID_IX,(void **)&pIX); If(SUCCEEDED(hr)) pIX->Fx(); } 璇ュ嚱鏁扮敤浜庢煡璇?/span>pI鏄惁鏀寔鐢?/span>IID_IX鎵鏍囪瘑鐨勬帴鍙c?/span> IUnknown鐨勭戶鎵夸笉鏄櫄鎷熷熀綾匯?/span>COM鎺ュ彛涓嶈兘鎸夌収铏氭嫙鏂瑰紡緇ф壙瀹冦?/span> 3錛夊疄鐜幫細(xì) Interface IX錛?/span>IUnknown{/**/}錛?/span> Interface IY錛?/span>IUnknown{/**/}錛?/span> Class CA錛?/span>public IX,public IY{/**/}; 涓昏閫氳繃鍒ゆ柇鏍囪瘑絎︽槸鍚︿負(fù)CA鐨勬敮鎸佺被鍨嬶紝鏉ュ垽鏂槸鍚︿負(fù)瀛樺湪鍦?/span>CA涓殑COM HRESULT
_stdcall CA:;QueryInterface(const IID &iid,void **ppv) { If(iid==IID_IUnknown) { *ppv=static_cast<IX
*>(this); } Else if(iid==IID_IX) { *ppv=static_cast<IX*>(this); } Else if (iid==IID_IY) { *ppv=static_cast<IY*>(this); } Else { *ppv=NULL; Return E_NOINTERFACE; } Static_cast<IUnknown*>(*ppv)->AddRef(); Return S_OK; } 4錛夊叧浜庡叾涓殑綾誨瀷杞崲 紼嬪簭涓嫢灝?/span>this鎸囬拡鐩存帴杞崲鎴?/span>IUnknown*鏄笉鏄庣‘鐨勩傚洜涓哄瓨鍦ㄤ袱涓熀綾繪帴鍙o紝闇瑕佹寚鏄庢槸杞崲鍚戝摢涓涓帴鍙g殑IUnknown銆?/span> Static_cast<IUnknown*>
(static_cast<IX *>(this)) 鍦ㄧ被鍨嬭漿鎹㈡椂錛?/span>CA鎸夌収欏哄簭瀛樻斁瀹冪殑鍩虹被鎺ュ彛鍙?qiáng)鍏跺疄鐜板Q屽叾this鎸囬拡鍙互鐢?/span>IX浠f浛錛堝湴鍧鍊肩浉鍚岋級(jí)銆?/span> 鑰?/span>IY鍒欓渶瑕?/span>CA鐨勫熀鍧鍔犱笂鍋忕Щ鍧銆?/span>
]]>
]]>
]]>
浠庢錛屽湪鍫嗕笂鐢寵浜?jiǎn)鍐呭瓨蹇樹(shù)簡(jiǎn)閲婃斁銆佹墍閫犳垚鐨勫唴瀛樻硠闇茬殑闂灝變竴鐩村洶鎵扮潃C++紼嬪簭鍛樸備篃璁鎬負(fù)浜?jiǎn)绋嶈遄I琛ユ病鏈夊瀮鍦懼洖鏀跺櫒鎵閫犳垚鐨勫紑鍙戦棬妲涢珮錛屽悇澶у巶鍟嗗紑鍙戠殑C++搴撲腑閮藉儚COM瀛︿範(fàn)寮曞叆鏅鴻兘鎸囬拡璇曞浘瑙e喅閮ㄥ垎鐩墠瀛樺湪鐨勯棶棰樸?br>
鏅鴻兘鎸囬拡鏄瓨鍌ㄦ寚鍚戝姩鎬佸垎閰嶏紙鍫嗭級(jí)瀵硅薄鎸囬拡鐨勭被, 鐢ㄤ簬鐢熷瓨鏈熸帶鍒?
鑳藉紜繚鑷姩姝g‘鐨勯攢姣佸姩鎬佸垎閰嶇殑瀵硅薄錛岄槻姝㈠唴瀛樻硠闇層傚畠鐨勪竴縐嶉氱敤瀹炵幇鎶鏈槸浣跨敤寮曠敤璁℃暟(reference
count)銆傛櫤鑳芥寚閽堢被灝嗕竴涓鏁板櫒涓庣被鎸囧悜鐨勫璞$浉鍏寵仈錛屽紩鐢ㄨ鏁拌窡韙綾繪湁澶氬皯涓璞″叡浜悓涓鎸囬拡銆傛瘡嬈″垱寤虹被鐨勬柊瀵硅薄鏃訛紝鍒濆鍖栨寚閽堝茍灝嗗紩鐢ㄨ鏁?
緗負(fù)1錛涘綋瀵硅薄浣滀負(fù)鍙︿竴瀵硅薄鐨勫壇鏈屽垱寤烘椂錛屾嫹璐濇瀯閫犲嚱鏁版嫹璐濇寚閽堝茍澧炲姞涓庝箣鐩稿簲鐨勫紩鐢ㄨ鏁幫紱瀵逛竴涓璞¤繘琛岃祴鍊兼椂錛岃祴鍊兼搷浣滅鍑忓皯宸︽搷浣滄暟鎵鎸囧璞$殑寮?
鐢ㄨ鏁幫紙濡傛灉寮曠敤璁℃暟涓哄噺鑷?錛屽垯鍒犻櫎瀵硅薄錛夛紝騫跺鍔犲彸鎿嶄綔鏁版墍鎸囧璞$殑寮曠敤璁℃暟錛涜皟鐢ㄦ瀽鏋勫嚱鏁版椂錛屾瀯閫犲嚱鏁板噺灝戝紩鐢ㄨ鏁幫紙濡傛灉寮曠敤璁℃暟鍑忚嚦0錛屽垯鍒犻櫎鍩?
紜瀵硅薄錛夈?br>
璇村埌鏅鴻兘鎸囬拡錛屾垜浠竴瀹氳鐪嬬湅鏍囧噯C++搴撴彁渚涚殑“鎼炵瑧鐨?#8221;鏅鴻兘鎸囬拡:auto_ptr銆?br>
鏍囧噯搴撲腑鎻愪緵浜?jiǎn)C++紼嬪簭鐨勫熀鏈鏂姐傝櫧鐒禖++鏍囧噯搴撻殢鐫C++鏍囧噯鎶樿吘浜?jiǎn)璁稿骞村Q岀洿鍒版爣鍑嗙殑鍑哄彴鎵嶆寮忓畾鍨嬶紝緗戜笂璇勮C++鏍囧噯搴撴椂閮借錛?#8220;鍦ㄦ爣鍑嗗簱
鐨勫疄鐜頒笂鍗村緢浠や漢嬈f叞寰楃湅鍒板縐嶅疄鐜幫紝騫朵笖宸茶瀹炶返璇佹槑涓烘湁宸ヤ笟綰у埆寮哄害鐨勪匠浣溿?#8221;浣嗙洰鍓嶇殑鏍囧噯C++涓紝鍙湁涓縐嶇嫭鑻楁櫤鑳芥寚
閽堬細(xì)std::auto_ptr銆?br>
auto_ptr鎸囬拡鏄竴涓猂AII瀵硅薄,瀹冨垵濮嬪寲鏃惰幏寰楄祫婧?鏋愭瀯鏃惰嚜鍔ㄩ噴鏀捐祫婧?鐢熷懡鏈熺粨鏉?.瀹冪殑緙虹偣鏁頒笉鑳滄暟錛?br> 1銆乤uto_ptr瑕佹眰涓涓璞″彧鑳芥湁涓涓嫢鏈夎咃紝涓ョ涓鐗╀簩涓?br> 2銆佺己灝戝寮曠敤鏁板拰鏁扮粍鐨勬敮鎸併?br> 3銆佷笉鍙皢auto_ptr瀵硅薄浣滀負(fù)STL瀹瑰櫒鐨勫厓绱犮侰++鏍囧噯鏄庣‘紱佹榪欐牱鍋氾紝鍚﹀垯鍙兘浼?xì)纰板堫C笉鍙瑙佺殑緇撴灉銆傦紙榪欎竴鏉℃檿姝諱竴澶х墖錛夈?br>4銆乤uto_ptr鍦ㄨ澶嶅埗鐨勬椂鍊欎細(xì)浼犺緭鎵鏈夋潈
鍙嶆鐢辨鍙錛氭爣鍑嗗簱鐨勬櫤鑳芥寚閽堝氨鏄棤鐢氬ぇ鐢ㄣ?br>
鍦ㄨ繖鏍風(fēng)殑鎯呭喌涓嬶紝C++鏍囧噯濮斿憳?shù)細(xì)鑷剦櫆瑕佽冭檻寮曞叆鏂扮殑鏅鴻兘鎸囬拡銆傜洰鍓嶇敱C++鏍囧噯濮斿憳?shù)細(xì)搴撳伐浣溇l勫彂璧風(fēng)殑Boost 緇勭粐寮鍙戜簡(jiǎn)Boost緋誨垪鏅鴻兘鎸囬拡銆?br>
鍦˙oost涓殑鏅鴻兘鎸囬拡鏈変簲縐嶏細(xì) scoped_ptr錛宻coped_array錛宻hared_ptr錛宻hared_array錛寃eak_ptr.
鍓?縐嶅畬鍏ㄦ槸閽堝鏍囧噯搴撲腑鐨刟uto_ptr鎻愬嚭瑙e喅鏂規(guī)錛屽錛歴cope_ptr鏄拡瀵?#8220;auto_ptr鍦ㄨ澶嶅埗鐨勬椂鍊欎細(xì)浼犺緭鎵鏈夋潈”榪欎竴寮辯偣鎻愬嚭鐨勩傛渶鍚庝竴縐嶆病瑙佽繃錛岀湅鍚嶅瓧鍍忔槸寮卞紩鐢ㄦ櫤鑳芥寚閽堬紝鎴戞鐤?span onclick="sendmsg('pw_ajax.php','action=relatetag&tagname=鏄笉鏄?,this.id)" style="border-bottom: 1px solid #fa891b; cursor: pointer;" id="rlt_3">鏄笉鏄?/span>綾諱技浜嶫AVA涓急寮曠敤涓鏍?鏈夊緟榪涗竴姝ュ涔?fàn)銆?/div>
]]>
1.copy-to-write
褰撶敓鎴愪竴涓?a class="channel_keylink">C++ object鐨勬椂鍊欏鏋滆繖涓猚lass寰堝ぇ錛岃繖涓猳bject浼?xì)鍗犵敤寰堝绌洪棿銆傞偅涔堟瘡鐢熸垚涓涓氨鍗犵敤涓鐗囩┖闂達(dá)紝榪欐牱浼?xì)鍗犵敤寰堝绯痪l熻祫婧愩傚悓鏃墮檷浣庢晥鐜囥備竴涓В鍐蟲(chóng)柟娉曞氨鏄鐢ㄦ嫹璐濇瀯閫?a class="channel_keylink">鍑芥暟鐢熸垚鐨刼bject錛岃浠栦笉瀛樺偍鏁版嵁錛岃屽彧瀛樺偍涓涓寚鍚戝師鏉bject鏁版嵁鐨?a class="channel_keylink">鎸囬拡銆?榪欐牱絀洪棿灝辮妭鐪佷簡(jiǎn)寰堝銆備絾闂鍦ㄤ簬榪欐牱涓や釜object瀹屽叏鑱旂粨鍦ㄤ簡(jiǎn)涓璧楓傚鏋滀慨鏀逛簡(jiǎn)鍏朵腑涓涓紝鍙︿竴涓篃璺熺潃鍙樹(shù)簡(jiǎn)銆傛墍浠ヨ繖縐嶆柟娉曚笉鍙彇銆傝繖閲岃鐨?copy-to-write鎶鏈氨鏄В鍐寵繖綾婚棶棰樼殑鏂規(guī)硶銆傚綋閫氳繃寮曠敤涓涓凡鏈塷bject鍘繪嫹璐濇瀯閫犳柊object鏃訛紝鏂皁bject鍙湁涓涓寚鍚戝凡鏈?object鐨?a class="channel_keylink">鎸囬拡銆?
榪欎袱涓猳bject鍏變韓鏁版嵁銆傜洿鍒板叾涓竴涓渶瑕佷慨鏀規(guī)暟鎹殑鏃跺欙紝鍐嶆妸榪欎袱鍧楁暟鎹垎紱匯傝繖閲屼婦涓涓渶綆鍖栫殑渚嬪瓙銆傚亣璁句竴涓猚lass鍙?
CLargeObject錛岄噷闈㈠瓨鏈夊緢澶氭暟鎹傛垜浠敤涓涓猧nner
class鏉ユ妸鎵鏈夋暟鎹斁鍦ㄤ竴璧鳳紝鍙獵Data銆侰Data閲岄潰瀛樻湁澶ч噺鏁版嵁錛屼緥濡備竴涓?a class="channel_keylink">鏁版嵁搴?/a>銆傝繖閲岀敤鏈綆鍗曠殑妯″瀷鏉ヨ〃紺猴紝鍋囪鍙湁涓涓暣鏁癷nt m_nVal; CData閲岄潰闇瑕佸寘鍚彟涓涓彉閲忋傚彨浣滅儲(chǔ)寮曟暟鐩?reference count)銆傚畠璁板綍浜?jiǎn)鎸囧悜杩欎釜CData object鐨勬潵鑷狢LargetObject綾葷殑鎸囬拡鍚勬暟銆備篃灝辨槸璇達(dá)紝鎬誨叡鏈夊灝慍LargeObject鐨刼bject姝e湪寮曠敤鐫褰撳墠鐨凜Data object銆?br>
class CLargeObject
{
private:
struct CData
{
private:
int m_nVal;
int m_nReferenceCount;
}
};
瀵逛簬姣忎釜CLargeObject鐨刼bject錛屾垜浠敤涓涓狢Data綾葷殑鎸囬拡鏉ユ寚鍚戝叾鏁版嵁銆?br>CData *m_pData;
CLargeObject鑷沖皯鏈変袱涓瀯閫?a class="channel_keylink">鍑芥暟銆傜涓涓槸鏍囧噯鐨勬瀯閫?a class="channel_keylink">鍑芥暟錛屽垵濮嬪寲鍏舵暟鎹傝繖鏃舵暟鎹槸鍞竴鐨勶紝鎵浠ュ繀欏繪柊鐢熸垚涓涓狢Data鐨刼bject鏉ュ瓨鍌ㄦ暟鎹?br>CLargeObject::CLargeObject(int nVal)
{
m_pData = new Data(nVal);
}
鑰屽浜嶤Data綾葷殑鏋勯?a class="channel_keylink">鍑芥暟鑰岃█錛屽垵濮嬪寲浠栫殑CLargeObject鏄涓涓寚鍚戜粬鐨勶紝榪欎竴鏃跺埢绱㈠紩鏁扮洰m_nReferenceCount鏄?銆?br>CLargeObject::Data::Data(int nVal) : m_nVal(nVal), m_nReferenceCount(1) {}
CLargeObject鐨勭浜屼釜鏋勯?a class="channel_keylink">鍑芥暟鏄嫹璐濇瀯閫?copy constructor)銆傝繖鏍風(fēng)敓鎴愮殑object涓嶉渶瑕佹湁鏂扮殑鏁版嵁錛屽拰宸叉湁鐨刼bject鍏變韓鏁版嵁灝卞彲浠ヤ簡(jiǎn)銆傝繖鏄儲(chǔ)寮曟暟鐩渶瑕佸姞1銆傝〃紺哄張鏈変竴涓猳bject鎸囧悜褰撳墠鐨凜Data浜?jiǎn)銆?br>CLargeObject::CLargeObject(const CLargeObject &ob) // copy constructor
{
ob.m_pData->m_nReferenceCount++;
m_pData = ob.m_pData;
}
榪欐牱CLargeObject灝辨瀯閫犲ソ浜?jiǎn)锛屼娇鐢ㄤ簡(jiǎn)鍙兘鐨勬渶灝戠殑鍐呭瓨銆備笅闈㈢湅鐪嬩粬鐨勬瀽澶?a class="channel_keylink">鍑芥暟(destructor)銆傚綋涓涓猳bject琚玠elete鐨勬椂鍊欙紝瀹冪殑鏁版嵁涓嶄竴瀹氭棤鏁堬紝濡傛灉鍒殑object榪樺湪寮曠敤鐫榪欎釜鏁版嵁錛屾暟鎹渶瑕佺暀涓嬫潵銆傚綋鐒?dòng)灱屾暟鎹殑鐑?chǔ)寮曟暟鐩棤璁哄浣曢兘瑕佸噺1銆?br>CLargeObject::~CLargeObject()
{
if (--m_pData->m_nReferenceCount == 0)
delete m_pData;
}
涓嬮潰鐪嬩竴鐪嬭祴鍊兼搷浣溿傚厛璇寸敤宸叉湁鐨凜LargeObject璧嬪肩粰榪欎釜CLargeObject銆傝繖鏃跺綋鍓岰LargeObject閲岄潰鐨勬暟鎹鎸囧悜宸叉湁鐨勮繖涓猳bject錛屽氨鎼炲畾浜?jiǎn)銆?br>CLargeObject& CLargeObject::operator = (const CLargeObject& ob) // copy assignment
{
ob.m_pData->m_nReferenceCount++;
if (--m_pData->m_nReferenceCount == 0)
delete m_pData;
m_pData = ob.m_pData;
}
鍐嶆潵鐪嬬湅濡備綍瀵笴LargeObject閲岄潰鐨勬暟鎹繘琛岀湡姝g殑淇敼銆傝繖鏍峰氨涓瀹氶渶瑕佸褰撳墠鐨刼bject鐙珛鎿嶄綔浜?jiǎn)锛屽惁鍒櫈濯?jiǎng)鍝嶅埌浜?jiǎn)鍏跺畠鎸囧悜鍚屼竴鍧楁暟鎹殑CLargeObject銆傝繖鏍稢Data綾婚渶瑕佷竴涓柊鐨?a class="channel_keylink">鍑芥暟錛岀敓鎴愬彧鐢ㄤ簬褰撳墠CLargetObject鐨勬暟鎹傚鏋滃綋鍓嶇殑寮曠敤鏁扮洰鏄?錛岄偅涔堝綋鐒惰繖涓狢Data灝辨槸鍙敤浜庤繖涓狢LargeObject鐨勪簡(jiǎn)銆傚惁鍒欏氨閲嶆柊new涓涓狢Data榪斿洖銆?br> Data* CLargeObject::CData::get_own_copy() // clone if necessary
{
if (m_nReferenceCount==1)
return this;
m_nReferenceCount--;
return new Data(m_nVal);
}
CLargeObject淇敼鍓嶇敤榪欎釜鍑芥暟寰楀埌鍞竴鐨刼bject錛岀劧鍚庡瀹冭祴鍊箋?br>void CLargeObject::SetVal(int nNewVal)
{
m_pData = m_pData->get_own_copy();
m_pData->m_nVal = nNewVal;
}
瀵逛簬鎵鏈夊彲鑳芥敼鍙楥Data鍊肩殑鎿嶄綔錛岄兘闇瑕佺敤榪欑鏂規(guī)硶銆?br>
涓嬮潰鏄彧璇?a class="channel_keylink">鍑芥暟錛岀畝鍗曘傜洿鎺ヨ繑鍥炲鹼紝浠涔堢壒孌婄殑閮戒笉鐢ㄤ綔銆?br>int CLargeObject::GetVal() const
{
return m_pData->m_nVal;
}
榪欐牱copy-to-write鎶鏈氨瀹炵幇浜?jiǎn)銆備笅闈㈡妸瀹屾暣鐨勭▼搴忓啓涓涓嬶細(xì)
class CLargeObject
{
public:
CLargeObject(int nVal);
CLargeObject(const CLargeObject &ob);
~CLargeObject();
void SetVal(int nNewVal);
int GetVal() const;
private:
struct Data
{
public:
Data(int nVal) : m_nVal(nVal), m_nReferenceCount(1) {}
private:
friend class CLargeObject;
Data* get_own_copy() // clone if necessary
{
if (m_nReferenceCount==1)
return this;
m_nReferenceCount--;
return new Data(m_nVal);
}
int m_nReferenceCount;
// actual data portion
int m_nVal;
};
};
{
m_pData = new Data(nVal);
}
{
ob.m_pData->m_nReferenceCount++;
m_pData = ob.m_pData;
}
{
if (--m_pData->m_nReferenceCount == 0)
delete m_pData;
}
{
ob.m_pData->m_nReferenceCount++;
if (--m_pData->m_nReferenceCount == 0)
delete m_pData;
m_pData = ob.m_pData;
}
{
m_pData = m_pData->get_own_copy();
m_pData->m_nVal = nNewVal;
}
{
return m_pData->m_nVal;
}
寰堝瀛樺偍鏁版嵁鐨勭郴緇焎lass錛屽string錛孋String絳夐兘鏈夎繖縐嶈璁°傛墍浠ヨ浣忚繖涓簲鐢ㄦ槸寰堟湁蹇呰鐨勩?/p>
鍒╃敤Rational Rose榪涜C++浠g爜鍜屾暟鎹簱緇撴瀯鍒嗘瀽
鐢?闇囨澃, IBM 涓浗杞歡寮鍙戜腑蹇?jī)枋Y浠跺伐紼嬪笀
銆涓錛嶳ational Rose閫嗗悜宸ョ▼浠嬬粛
銆浜岋紟濡備綍鐢≧ational Rose榪涜C++浠g爜鍒嗘瀽
銆涓夛紟濡備綍鐢≧ational Rose榪涜鏁版嵁搴撶粨鏋勫垎鏋?/font>
銆鍥涳紟濡備綍寰楀埌閫嗗悜宸ョ▼鐨勬ā鍨嬪浘
銆浜旓紟鎬葷粨
銆娉ㄩ噴
銆Rational Rose鏄埄鐢║ML錛堢粺涓寤烘ā璇█錛夎繘琛屽垎鏋愬拰璁捐闈㈠悜瀵硅薄杞歡緋葷粺鐨勫己澶х殑鍙鍖栧伐鍏鳳紝鍙互榪涜欏圭洰闇姹傚垎鏋愩佺粨鏋勮鍒掑拰鐢熸垚妗嗘灦浠g爜錛岃繕鍙互鏀寔浠庣幇鏈夌郴緇熼嗗悜杞嚭宸ョ▼浠g爜錛岀敓鎴怰ose妯″瀷鐨勫姛鑳姐?br>2004騫?0鏈堬紝IBM鎺ㄥ嚭浜?jiǎn)鏀寔鏈鏂扮殑UML2.0鐨勫彲瑙嗗寲寤烘ā宸ュ叿 Rational Software Architect錛堣娉ㄩ噴鈶狅級(jí) 鍜孖BM Rational Software Modeler錛堣娉ㄩ噴鈶★級(jí)銆傝櫧鐒跺畠浠敮鎸佸湪寤烘ā鍔熻兘涓婃湁浜?jiǎn)鏇村ソ鐨勬敼杩涖佹敮鎸佷簡(jiǎn)鏇存柊鐨勬爣鍑嗭紝浣嗘槸RSA鐨勭簿褰╁姛鑳戒富瑕佹槸闆嗕腑鍦ㄥJava搴旂敤鐨勬敮鎸侊紝鑰孖BM Rational Software Modeler鍒欐槸涓昏鍏蟲(chóng)敞緋葷粺鐨勬ā鍨嬭璁★紝濡傛灉瑕佷粠緇撴瀯涓婂垎鏋怌++緙栧啓鐨勭郴緇熺殑浠g爜錛孯ational Rose榪樻槸棣栭夌殑宸ュ叿銆?/p>
銆b) 灝哻omponent鐨刲anguage灞炴ц瀹氫負(fù)ANSI C++
銆
銆鈶¢変腑闇瑕佽漿鎹㈢殑class錛岀偣鍑籵k錛屼竴涓猚omponent鐨勯嗗悜杞崲灝卞畬鎴愪簡(jiǎn)銆?/p>
銆2錛?Visual C++ 鍦ㄤ嬌鐢ㄨ繖涓姛鑳界殑鏃跺欙紝瑕佹眰鐢ㄦ埛鐨勬満鍣ㄤ笂鍚屾椂瀹夎Visual Studio銆俈isual C++鐨勯嗗悜宸ョ▼涔熼渶瑕侀鍏堝垱寤轟竴涓猚omponent錛屽茍灝嗚component鐨刲anguage灞炴ц緗負(fù)VC++銆俁ational Rose瀵筕C++妯″瀷鐨勮漿鎹㈡槸閫氳繃璇誨彇VC++ Project File鐨勪俊鎭潵瀹炵幇鐨勶紝鐢ㄦ埛鍙渶瑕佸皢瀵瑰簲鐨刾roject file淇℃伅鎸囧畾緇檆omponent灝卞彲浠ヤ簡(jiǎn)銆?/p>
銆b) 灝嗚緗ソ鐨刢omponent杞崲鎴愭ā鍨嬪浘
銆
銆b) 鍦ㄨ繘琛岄嗗悜宸ョ▼杞崲鐨勮繃紼嬩腑鍙互閫夋嫨鏄粠鏁版嵁搴撹繕鏄疍DL鑴氭湰榪涜杞崲錛屽鏋滄槸DDL鑴氭湰杞崲錛屽氨鐩存帴緇欏畾DDL鑴氭湰鏂囦歡浣嶇疆灝卞彲浠ヤ簡(jiǎn)銆傛湰渚嬪瓙緇欏嚭鐨勬槸榪炴帴SQLServer鏁版嵁搴撳皢schema瀵煎叆鐢熸垚鏁版嵁妯″瀷鐨勮繃紼嬶紝鎵浠ラ変腑Database錛岃繘鍏ヤ笅涓姝ャ?/p>
銆c) 濉啓鏁版嵁搴撶浉鍏充俊鎭?/p>
銆d) 閫変腑鎵鏈夐渶瑕佽漿鎹㈢殑schema
銆e) 閫夋嫨闇瑕佸皢鍝簺鏁版嵁搴撲腑鐨勫厓绱犲鍏ュ埌鏁版嵁妯″瀷涓?br>
銆鎵撳紑鏁版嵁妯″瀷錛屽彲浠ョ湅鍒頒粠鏁版嵁搴撲腑杞崲榪囨潵鐨勫悇涓〃鍜岃鍥俱?/p>
銆浠庢暟鎹ā鍨嬪浘涓彲浠ョ湅鍒拌〃鐨勭粨鏋勪互鍙?qiáng)鍚勪釜琛ㄥ拰瑙嗗浘涔嬮棿鐨勯昏緫鍏崇郴銆?/p>
]]>
(1)姝g‘浣跨敤寮曠敤璁℃暟鐨勪笁鏉$畝鍗曞師鍒?
1)鍦ㄨ繑鍥炰箣鍓嶈皟鐢ˋddRef.
2)浣跨敤瀹屾帴鍙e悗璋冪敤Release.
3)鍦ㄨ祴鍊間箣鍚庤皟鐢ˋddRef(鎸囬拡澶嶅埗).
鍩烘湰鍘熷垯鏄伩鍏嶅湪浣跨敤緇勪歡鏃訛紝緇勪歡宸茶鍒犻櫎銆?br> QueryInterface 鍜孋reateInstance涓凡緇忚皟鐢ㄤ簡(jiǎn)AddRef,鍥犳涓嶅繀鍐嶈皟鐢ㄥ畠銆?br> 浣嗕袱鑰呰繑鍥炵殑IUnknow鎺ュ彛鍜屼竴鑸帴鍙o紝鐢ㄥ畬鍚庨兘闇瑕佽皟鐢≧elease鏉ラ噴鏀俱?br> 涓鑸岃█錛屾瘡褰撳鍒朵竴涓帴鍙g殑鎸囬拡鏃訛紝閮藉簲璇ョ浉搴旂殑澧炲姞寮曠敤璁℃暟銆?br> IUnknown* pIUnknown=CreateInstance();
IX * pIX=NULL;
HRESULT hr= pIUnknown->QueryInterface(IID_IX,(void **)&pIX);
pIUnknown->Release();
if(SUCCEEDED(hr))
{
pIX->Fx(); //Fx()涓哄姛鑳藉嚱鏁?br> IX * pIX2=pIX; //澶嶅埗鎸囬拡錛屽嵆澧炲姞浜?jiǎn)涓涓嬌鐢ㄧ粍浠?鐨勬帴鍙?鐨勫彲鑳斤紝
pIX2->AddRef(); //鎵浠ヨ澧炲姞璁℃暟錛屽茍鍦ㄤ嬌鐢ㄥ畬涔嬪悗release
pIX2->Fx();
pIX2->Release(); //
pIX->Release();
}
//涓婇潰浠g爜涓紝浣滀負(fù)澶嶅埗鎸囬拡pIX2錛屽叾鐢熷瓨鍛ㄦ湡涓巔IX鐩稿悓錛屽嵆錛屽湪pIX Release涔嬪墠pIX2灝卞凡緇忎笉鍐嶄嬌鐢ㄤ簡(jiǎn)錛?br> pIX淇濊瘉浜?jiǎn)缁勪欢鋴社敤瀹夊叏鐨勫墠鎻愪笅锛宲IX涓嶇敤AddRef鍜孯elease鏄偗瀹氭病闂鐨勩?br>
浣嗘湁鏃跺緢闅懼垽鏂煇浜涙病鏈夊姞涓夾ddRef鍜孯elease鐨勮皟鐢ㄦ槸涓嶆槸姝g‘錛屾槸浼樺寲榪樻槸紼嬪簭閿欒銆備竴鑸敤鏅鴻兘鏉ュ皝瑁?br> 寮曠敤璁℃暟錛屼粠鑰岃В鍐寵繖涓棶棰樸?鏅鴻兘鎸囬拡)
緇勪歡鍙互瀵瑰叾姣忎竴涓帴鍙e垎鍒淮鎶や竴涓紩鐢ㄨ鏁幫紝涔熷彲浠ュ鏁翠釜緇勪歡緇存姢鍗曚釜鐨勫紩鐢ㄨ鏁般傚師鍒欎笂閫夋嫨浜?jiǎn)湄?fù)姣忎竴涓?br> 鎺ュ彛鍗曠嫭緇存姢涓涓紩鐢ㄨ鏁拌屼笉鏄拡瀵規(guī)暣涓淮鎶よ鏁幫紝鍘熷洜錛屼竴錛屼嬌紼嬪簭璋冭瘯鏇存柟渚匡紝浜岋紝鏀寔緋葷粺璧勬簮鐨勬寜闇鑾峰彇銆?br>
(2)AddRef\Release 瀹炵幇
涓昏鏄敼鍙樻垚鍛樺彉閲弇_cRef鐨勬暟鍊箋侫ddRef澧炲姞鍏舵暟鍊鹼紝Release鍑忓皬鏁板鹼紝騫跺湪姝ゅ間負(fù)0鏃跺皢緇勪歡鍒犻櫎銆?br> 綆鍗曞疄鐜幫細(xì)
ULONG _stdcall AddRef()
{
return ++m_cRef;//return InterlockIncrement(&m_cRef);
}
ULONG _stdcall Release()
{
if(--m_cRef==0)//if(InterlockDecrement(&m_cRef)==0)
{
delete this;
return 0;
}
return m_cRef;
}
涓鑸敤InterlockIncrement鍜孖nterlockDecrement鏉ュ疄鐜癆ddRef\Release; 鍙互紜繚鍚屼竴鏃墮棿鍙湁鍚屼竴綰跨▼鏉ヨ闂垚鍛樺彉閲忋?br> 3)寮曠敤璁℃暟鐨勪紭鍖栧師鍒?br> 灝卞儚(1)涓緥瀛愶紝pIX鑳戒繚闅滃湪pIX2鐢熷懡鍛ㄦ湡鍐咃紝緇勪歡鑲畾浼?xì)鍦ㄥ唴瀛樺唴瀛樼暀銆傚嵆錛岄偅浜涚敓鍛藉懆鏈熷祵濂楀湪寮曠敤鍚屼竴鎺ュ彛鐨勬寚閽堢殑鐢熷懡鍛ㄦ湡涔嬪唴鏃訛紝澶栧眰鐨勫凡鏈夊紩鐢ㄨ鏁幫紝鍐呭眰鐨勫氨鍙互涓嶈浜?jiǎn)銆?br> 娉ㄦ剰閭d簺鐢熷懡鍛ㄦ湡閲嶅彔鐨勬寚閽堛?br> (1)杈撳嚭鍙傛暟鍘熷垯
濡傛灉鎺ュ彛鎸囬拡浠ュ嚱鏁拌繑鍥炲兼垨鑰呬互浼犲嚭鍙傛暟浼犲嚭錛岄偅涔堝湪鍑芥暟鍐呴儴錛岃繑鍥炲弬鏁板墠璋冪敤AddRef.
渚?QueryInterface/CreateInstance;
(2)杈撳叆鍙傛暟鍘熷垯
鑻ユ帴鍙f寚閽堜綔涓哄弬鏁頒紶閫掔粰涓涓嚱鏁幫紝璇ュ嚱鏁頒笉淇敼涔熷皢鍏惰繑鍥炶皟鐢ㄨ咃紝姝ゆ椂鏃犻渶璋冪敤AddRef\Release渚嬶細(xì)
void foo(pIX *pIX)
{
pIX->Fx();
}
鍥犱負(fù)鍑芥暟鐨勭敓鍛藉懆鏈熷祵濂楀湪璋冪敤鑰呯殑鐢熷懡鍛ㄦ湡涔嬪唴鐨勩?br> (3)杈撳叆杈撳嚭鍙傛暟鍘熷垯
瀵逛簬浼犻掕繘鏉ョ殑鎺ュ彛鎸囬拡錛屽繀欏誨湪緇欎粬闄勫彟澶栦竴涓帴鍙f寚閽堜箣鍓嶈皟鐢╮elease錛涜繑鍥炰箣鍓嶏紝榪樺繀欏誨杈撳嚭鍙傛暟鎸囧悜鐨勬柊鎺ュ彛璋冪敤AddRef;
4)灞閮ㄥ彉閲忓師鍒?br> 瀹冧滑鏄湪鍑芥暟鐨勭敓瀛樺懆鏈熷唴鎵嶅瓨鍦紝鍥犳涓嶉渶瑕佽皟鐢ˋddRef\Release
5)鍏ㄥ眬鍙橀噺鍘熷垯
鍦ㄤ紶閫掔粰鍙︿竴涓嚱鏁頒箣鍓嶏紝蹇呴』璋冪敤AddRef.
6)涓嶇‘瀹氱殑鎯呭喌
姝ゆ椂闇瑕佽皟鐢ˋddRef\Release 浠ラ槻涓囦竴
]]>
]]>
緙栧啓瀛楃涓茶漿鎹nt鍨嬬殑鍑芥暟錛宨nt atoi(char* str) 錛屼緥濡傝緭鍏ュ瓧絎?123"杈撳嚭int 鍨嬫暟鎹?br> 1. 瑕佹眰涓嶈兘浣跨敤搴撳嚱鏁?.灝藉彲鑳藉鍦拌冭檻鐗規(guī)畩鎯呭喌
榪欓亾棰樹(shù)富瑕佽冨療浜?jiǎn)瀵瑰悇绉嶆儏鍐佃冭檻鏄惁鍏ㄩ潰錛岃冭檻姝h礋鍙鳳紝闈炴硶瀛楃錛岀┖鏍肩殑澶勭悊錛屽皬鏁扮偣鐨勫鐞嗐傚敖閲忎竴嬈″驚鐜悶瀹氥傚叾涓皬鏁扮偣鍚庣殑闈炴硶瀛楃鎸夌洿鎺ョ暐鎺夊鐞嗐?br> 絎簩棰橈細(xì)
緙栧啓鍑芥暟瀹屾垚瀛楃涓茬殑鍙嶈漿 node * reverse(node * head)
榪欎釜姣旇緝綆鍗曪紝浣嗘敞鎰忓ご鎸囬拡涓嶅湪鍙嶈漿鑼冨洿鍐咃紝榪欎釜鏄湪鎶鏈潰鐨勬椂渚紝闈㈣瘯瀹樻墜鎶婃墜鐨勫憡璇夋垜鐨?)
絎笁棰?br> 瀹屾垚鍑芥暟 char * strtok(char *s ,char delim) 鎶婂瓧絎︿覆浠巇elim澶剆plit.
涔熸瘮杈冪畝鍗?br> 絎洓棰?br> write Regulation expression according to the reference.
1, get all the url from the " 2. write regulation expression for the following url:
http://www.microsoft.com/production/id=123&reviewOid=1985&custom=257
http://www.microsoft.com/production/id=5343&reviewOid=1431
http://www.microsoft.com/production/id=6576&reviewOid=31614&custom=412
http://www.microsoft.com/production/id=234&reviewOid=43134&custom=22
2write regulation expression for the email address.
榪欓亾棰樻湁鍙傝冿紝鎵鏈夌殑鑼冨紡琛ㄨ揪寮忛兘鏈塺eference,鍙渶璇繪噦浜?jiǎn)鏉愭枡姣旇緝绠鍗曘?br> 絎簲棰?br> 鏁版嵁搴撻
design a database for user to borrow or return books from the library.the database should function as follow:
1)the user can borrow several copies of the same book
2)when the book borrowed , the time should be recorded.
3)the user should register in the system to get the authority for the logining in.
write sql sentence for the follow question:
1) insert a new record when a book borrowed/returned.
2) get all the users ,which does not return book.
3) get all the books ,which are never borrowed.
3) get the books which have been borrowed for more than 10 times.
棰樼洰灝辨槸榪欐牱銆?br> 澶ф浣滀簡(jiǎn)涓涓皬鏃訛紝鏉ヤ簡(jiǎn)涓敺闈㈣瘯瀹橈紝鏀惰蛋璇曞嵎錛岃鎴戠瓑銆傛梺杈規(guī)湁淇╁摜浠槸鍚屾潵闈㈣瘯鐨勶紝鑱婁簡(jiǎn)涓ゅ彞錛屼粬淇╃珶鏄井杞埆鐨勯儴闂ㄦ帹鏉ラ潰璇曠殑錛屽睘浜庤祴闂茬瓑寰呭啀灝變笟鐨勩傛鏆楄嚜姣旇緝涓庤繖淇╁摜浠殑宸窛錛岄潰璇曞畼鏉ヤ簡(jiǎn)錛岃鎴戠暀涓嬶紝绔熸妸閭d咯鍝ヤ滑鐩存帴鎷掍簡(jiǎn)錛屾湁浜涘簡(jiǎn)騫革紝璋冩暣蹇?jī)鎬併?br> 榪欎釜闈㈣瘯瀹樹(shù)富瑕侀拡瀵規(guī)墍絳旂殑璇曢闈㈣瘯錛屼笉鏂寚姝f垜璇曞嵎涓婄殑閿欒鍜岄仐婕忕偣錛屽茍涓旂粰鎴戞椂闂存敼姝c傝璁轟簡(jiǎn)涓浼?xì)锛屽厜櫁翠篃闂垜闂銆?br> 鐒跺悗浠栬蛋鍚庯紝鎺ュ緟鎴戠殑閭d釜濂抽潰璇曞畼鎶辯潃絎旇鏈繃鏉ャ?br> 鎴戜咯鍏堣亰浜?jiǎn)涓涓嬶紝鎴戝熸満闂簡(jiǎn)鍑犱釜闂銆傜劧鍚庢垜灝辯粰濂硅鎴戠殑涓浜涚粡鍘嗐?br> 濂圭粰鎴戜竴浠借祫鏂欙紝鏄叧浜庝漢宸ュ緗戦〉榪涜鍒嗙被鐨勮鏄庯紝鍛婅瘔鎴戠湅榪囧悗鍙互闂棶棰橈紝鐒跺悗鎵撳紑絎旇鏈鎴戝鎸囧畾鐨勭綉欏靛垎綾匯傚ぇ姒傛槸鎸夌収緗戦〉鐨勫姛鑳藉垎鎴愪簡(jiǎn)浜旂被錛?br> 鏈鍚庣殑闈㈣瘯瀹樻瘮杈冨勾杞伙紝闂簡(jiǎn)涓叧浜嶩ash 琛ㄧ殑闂錛岀劧鍚庣湅浜?jiǎn)鎴戠殑绠鍘嗭紝闂簡(jiǎn)涓猘jax鐨勯棶棰樸?br> 閭d釜hash table 闂?shù)笉鏄洿鎺ラ棶鐨勫Q?br> 鏂囦歡閲屽瓨鍦ㄥ瓧鍏稿垪琛紝鎵懼嚭瀛楁瘝姝eソ鐩稿弽鐨勫崟璇嶏紝姣斿 dog ,god ;
]]>
鍒嗘不娉曪紝鍗籌紝鍒嗚В錛屾眰瑙o紝緇勫悎 .
鍒嗚В錛?/strong>
鍦?
鏃犲簭鍖篟[low..high]涓換閫変竴涓褰曚綔涓哄熀鍑?閫氬父閫夌涓涓褰曪紝騫惰涓篜ivot,鍏朵笅鏍囦負(fù)pivotpos),浠ユ涓哄熀鍑嗗垝鍒嗘垚涓や釜杈冨皬鐨?
瀛愬尯闂碦[low,pivotpos - 1]鍜孯[pivotpos + 1 ,
high],騫朵嬌宸﹁竟瀛愬尯闂寸殑鎵鏈夎褰曞潎灝忎簬絳変簬鍩哄噯璁板綍,鍙寵竟瀛愬尯闂寸殑鎵鏈夎褰曞潎澶т簬絳変簬鍩哄噯璁板綍,鍩哄噯璁板綍鏃犻渶鍙傚姞鍚庣畫(huà)鐨勬帓搴忋傝屽垝鍒嗙殑鍏抽敭鏄姹傚嚭
鍩哄噯璁板綍鎵鍦ㄧ殑浣嶇疆pivotpos.
姹傝В錛?br>閫氳繃閫掑綊璋冪敤蹇熸帓搴忓宸︺佸彸瀛愬尯闂碦[low..pivotpos-1]鍜孯[pivotpos+1..high]蹇熸帓搴?br>
緇勫悎錛?br>褰?姹傝В"姝ラ涓殑涓や釜閫掑綊璋冪敤緇撴潫鏃訛紝鍏跺乏銆佸彸涓や釜瀛愬尯闂村凡鏈夊簭銆傚蹇熸帓搴忚岃█錛?緇勫悎"姝ラ鏃犻』鍋氫粈涔堬紝鍙湅浣滄槸絀烘搷浣溿?br>
鍏蜂綋榪囩▼錛?/strong>
璁懼簭鍒椾負(fù)R[low,high]錛屼粠鍏朵腑閫夌涓涓負(fù)鍩哄噯錛岃涓簆ivot,鐒跺悗璁句袱涓寚閽坕鍜宩,鍒嗗埆鎸囧悜搴忓垪R[low,high]鐨勮搗濮嬪拰緇撴潫浣嶇疆涓婏細(xì)
1錛夛紝灝唅閫愭笎澧炲ぇ錛岀洿鍒版壘鍒板ぇ浜巔ivot鐨勫叧閿瓧涓烘錛?br> 2錛夛紝灝唈閫愭笎鍑忓皯錛岀洿鍒版壘鍒板皬浜庣瓑浜巔ivot鐨勫叧閿瓧涓烘錛?br> 3錛夛紝濡傛灉i<j錛屽嵆R[i,j]鐨勫厓绱犳暟澶т簬1錛屽垯浜ゆ崲R[i]鍜孯[j]錛?br> 4錛夛紝灝嗗熀鍑嗚褰昿ivot鏀懼埌鍚堥傜殑浣嶇疆涓婏紝鍗砳鍜宩鍚屾椂鎸囧悜鐨勪綅緗?鍒欐浣嶇疆涓烘柊鐨刾ivotpos銆?br>
澶囨敞錛?br>蹇熸帓搴忔槸涓嶇ǔ瀹氭帓搴?/font>,鍗崇浉鍚岀殑鍏抽敭瀛楁帓搴忓悗錛岀浉瀵逛綅緗槸涓嶇‘瀹氱殑銆?br>
紺轟緥浠g爜錛?br>
public class DataStructure_QuickSort
{
//鍒掑垎瀛愬尯闂?璁$畻鍩哄噯浣嶇疆
int Partition(int[] arr , int nLower ,int nUpper)
{
int pivot = arr[nLower] ;//鍙栫涓涓褰曚負(fù)鍩哄噯璁板綍
int nLeft = nLower + 1; //鍔?錛宲ivot鏃犻渶鍜岃嚜韜仛姣旇緝
int nRight = nUpper ;
int temp ;
do{
while (nLeft <= nRight && arr[nLeft] <= pivot) //灝唍Left閫愭笎澧炲ぇ錛岀洿鍒版壘鍒板ぇ浜巔ivot鐨勪笅鏍囦負(fù)姝?/span>
nLeft++ ;
while (nLeft <= nRight && arr[nRight] > pivot) //浠巒Right閫愭笎鍑忓皯錛岀洿鍒版壘鍒板皬浜庣瓑浜巔ivot鐨勪笅鏍囦負(fù)姝?/span>
nRight-- ;
//R[nLeft,nRight]鍖洪棿鐨勯暱搴?鍏冪礌鏁?澶т簬1鏃訛紝浜ゆ崲R[nLeft]鍜孯[nRight]
if (nLeft < nRight)
{
temp = arr[nLeft] ;
arr[nLeft] = arr[nRight] ;
arr[nRight] = temp ;
nLeft++;
nRight--;
}
} while (nLeft < nRight); //褰搉Left == nRight鐨勬椂鍊欏仠姝㈠驚鐜?br>
//鎶婂熀鍑嗚褰昿ivot鏀懼埌姝g‘浣嶇疆錛屽嵆nLeft鍜宯Right鍚屾椂鎸囧悜鐨勪綅緗?/span>
temp = arr[nLower];
arr[nLower] = arr[nRight];
arr[nRight] = temp ;
return nRight ;
}
public void QuickSort(int[] arr, int nLower, int nUpper)
{
int pivotpos; //鍩哄噯涓嬫爣
if (nLower < nUpper) //浠呭綋鍖洪棿鑼冨洿闀垮害澶т簬1鏃舵墠欏繪帓搴?/span>
{
pivotpos = Partition(arr, nLower, nUpper);//鍒掑垎瀛愬尯闂?鐭ラ亾鍩哄噯涓嬫爣(QuickSort鐨勫叧閿?
QuickSort(arr, nLower, pivotpos - 1); //瀵瑰乏鍖洪棿閫掑綊鎺掑簭
QuickSort(arr, pivotpos + 1, nUpper); //瀵瑰彸鍖洪棿閫掑綊鎺掑簭
}
}
}
]]>
銆銆鍔ㄦ佸鎬佹э細(xì)榪愯榪囩▼涓墠鍔ㄦ佸湴紜畾鎿嶄綔鎸囬拡鎵鎸囩殑瀵硅薄銆備富瑕侀氳繃铏氬嚱鏁板拰閲嶅啓鏉ュ疄鐜般?br>
]]>
2.鍏充簬杞崲鏋勯犲嚱鏁?br> 鏋勯犲嚱鏁扮殑涓縐嶏紝涓昏鐢ㄤ簬綾誨瀷杞崲錛屾牸寮忎弗鏍艱瀹氫負(fù)鍗曞弬鏁版瀯閫犲嚱鏁般?br> 渚嬶細(xì)Complex綾?br> Complex(double r){Real=r;imag=0;} int(double r);
Complex a;
a=2.4; 鐩稿綋浜巃=Complex(2.4);
緙栬瘧鍣ㄥ鏋滃彂鐜拌娉曟湁闂錛屼細(xì)媯(gè)鏌ユ槸鍚﹀瓨鍦ㄨ漿鎹㈡瀯閫犲嚱鏁幫紝鏈夛紝鍒欓殣寮忚漿鎹€?br> 3.鍏充簬綾誨瀷杞崲鍑芥暟
杞崲鏋勯犲嚱鏁版槸灝嗕竴縐嶆暟鎹被鍨嬭漿鎹㈡垚綾誨璞°傚鏋滅紪璇戝櫒鍙戠幇闇瑕佸皢綾昏漿鎹㈡垚鏌愮鏁版嵁綾誨瀷錛岄偅璇ユ庝箞鍔烇紵
綾誨瀷杞崲鍑芥暟鐨勪竴鑸艦寮忥細(xì)operator 綾誨瀷鍚嶏紙錛墈杞崲鍑芥暟鐨勫疄鐜皚
娌℃湁鍑芥暟綾誨瀷錛屾病鏈夊弬鏁般?br> 渚嬶細(xì)
#include<iostream>
using namespace std;
class Complex
{
public :
Complex(){real=0;imag=0;}
Complex(double r,double i){real=r;imag=i;}
operator double(){return real;}
private:
double real;
double imag;
};
int main()
{
Complex c1(3,4),c2(5,-10),c3;
double d;
d=2.5+c1;
cout<<d<<end1;
return0;
}
d=2.5+c1;
鐢變簬綾繪垚鍛樻病鏈夊榪愮畻絎?閲嶈澆錛屾墍浠?.5涓巆1鏃犳硶鐩存帴鍚戝姞銆傜紪璇戝櫒鍙戠幇瀛樺湪綾誨瀷杞崲鍑芥暟錛屾晠灝?闅愬紡璋冪敤double(), c1杞崲涓?double 鍨?錛屽茍灝嗚緇撴灉瀛樻斁鍦ㄤ復(fù)鏃跺彉閲忛噷銆傝繍綆梔=2.5+3寰楀埌緇撴灉銆?br>銆鑻ヤ富鍑芥暟涓湁c3=2.5+c1;濡傛灉娌℃湁榪愮畻絎︼紜鐨勯噸杞斤紝緙栬瘧鍣ㄤ細(xì)鍑洪敊銆傚綋銆榪愮畻絎﹂噸杞藉嚱鏁頒綔涓虹被鎴愬憳鍑虹幇鏃訛紝緙栬瘧鍣ㄤ細(xì)鐞嗚В涓篶3=2.5.operator +(c1);鐢變簬2.5闈瀋omplex綾伙紝榪欑瑙f瀽緙栬瘧鍣ㄤ篃浼?xì)鍑洪敊銆傚浜巆3=c1+2.5鐨勬牸寮忥紝緙栬瘧鍣ㄤ細(xì)姝g‘澶勭悊銆?br>銆榪欑鎯呭喌浣跨敤鎴蜂笉鑳芥柟渚跨殑浣跨敤浜ゆ崲鐜囷紝涓轟簡(jiǎn)鏀瑰彉榪欎竴涓嶄究錛岄渶瑕佸皢閲嶈澆鍑芥暟浣滀負(fù)鍙嬪厓鍑芥暟鑰屼笉鏄被鎴愬憳鍑芥暟銆?鍙岀洰榪愮畻絎︾殑閲嶈澆涓鑸兘閲囩敤鍙嬪厓鍑芥暟鐨勬柟寮?
銆friend Complex operator +(Complex c1,complex c2);
鍦ㄥ嚱鏁頒綋澶栧畾涔夛細(xì)
銆Complex operator +(Complex c1,complex c2);
銆銆{return Complex (c1.real +c2.real,c1.imag+c2.imag);}
榪欐牱錛屽浜巆3=2.5+c1;錛堥渶瑕佸鍔犺漿鎹㈡瀯閫犲嚱鏁幫級(jí)緙栬瘧鍣ㄥ湪閬囧埌錛嬪彿鏃訛紝浼?xì)鎼滅储锛嬩袱绔殑鏁版嵁迤堝紩鐢ㄥ弸鍏冪殑杩惤帡绗﹂噸铦插嚱鏁板Q屽叾褰㈠紡鍙樹(shù)負(fù)錛歝3=operator+(2.5,c1); 鑰屽弬鏁板畾涔夐兘鏄疌omplex瀵硅薄錛屽洜姝わ紝闅愬紡璋冪敤杞崲鏋勯犲嚱鏁幫紝褰㈠紡鍙樹(shù)負(fù)錛歝3=operator+(Complex (2.5),c1);
]]>
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
璇烽棶榪愯Test 鍑芥暟浼?xì)鏈変粈涔堟牱鐨勭粨鏋滐紵
絳旓細(xì)紼嬪簭宕╂簝銆?/span>
鍥犱負(fù)GetMemory 騫朵笉鑳戒紶閫掑姩鎬佸唴瀛橈紝
Test 鍑芥暟涓殑 str 涓鐩撮兘鏄?/span> NULL銆?/span>
strcpy(str, "hello world");灝嗕嬌紼嬪簭宕?/span>
婧冦?/span>
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
璇烽棶榪愯Test 鍑芥暟浼?xì)鏈変粈涔堟牱鐨勭粨鏋滐紵
絳旓細(xì)鍙兘鏄貢鐮併?/span>
鍥犱負(fù)GetMemory 榪斿洖鐨勬槸鎸囧悜“鏍堝唴瀛?#8221;
鐨勬寚閽堬紝璇ユ寚閽堢殑鍦板潃涓嶆槸 NULL錛屼絾鍏跺師
鐜扮殑鍐呭宸茬粡琚竻闄わ紝鏂板唴瀹逛笉鍙煡銆?/span>
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
璇烽棶榪愯Test 鍑芥暟浼?xì)鏈変粈涔堟牱鐨勭粨鏋滐紵
絳旓細(xì)
錛?/span>1錛夎兘澶熻緭鍑?/span>hello
錛?/span>2錛夊唴瀛樻硠婕?/span>
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
璇烽棶榪愯Test 鍑芥暟浼?xì)鏈変粈涔堟牱鐨勭粨鏋滐紵
絳旓細(xì)綃℃敼鍔ㄦ佸唴瀛樺尯鐨勫唴瀹癸紝鍚庢灉闅句互棰?/span>
鏂欙紝闈炲父鍗遍櫓銆?/span>
鍥犱負(fù)free(str);涔嬪悗錛?/span>str 鎴愪負(fù)閲庢寚閽堬紝
if(str != NULL)璇彞涓嶈搗浣滅敤銆?/span>
2.鍏充簬鍐呭瓨娉勯湶
鍦ㄨ綆楁満縐戝涓紝鍐呭瓨娉勬紡鎸囩敱浜庣枏蹇芥垨閿欒閫犳垚紼嬪簭鏈兘閲婃斁宸茬粡涓嶅啀浣跨敤鐨勫唴瀛樼殑鎯呭喌銆傚唴瀛樻硠婕忓茍闈炴寚鍐呭瓨鍦ㄧ墿鐞嗕笂鐨勬秷澶憋紝鑰屾槸搴旂敤紼嬪簭鍒嗛厤鏌愭鍐呭瓨鍚庯紝
鐢變簬璁捐閿欒錛屽け鍘諱簡(jiǎn)瀵硅孌靛唴瀛樼殑鎺у埗錛屽洜鑰岄犳垚浜?jiǎn)鍐呭瓨鐨剫躬璐广傚唴瀛樻硠婕忎笌璁稿鍏朵粬闂鏈夌潃鐩鎬技鐨勭棁鐘訛紝騫朵笖閫氬父鎯呭喌涓嬪彧鑳界敱閭d簺鍙互鑾峰緱紼嬪簭婧愪唬鐮佺殑紼?
搴忓憳鎵嶅彲浠ュ垎鏋愬嚭鏉ャ傜劧鑰岋紝鏈変笉灝戜漢涔?fàn)鎯簬鎶婁恢M綍涓嶉渶瑕佺殑鍐呭瓨?shù)娇鐢ㄧ殑澧炲姞鎻彉q頒負(fù)鍐呭瓨娉勬紡錛屽嵆浣夸弗鏍兼剰涔変笂鏉ヨ榪欐槸涓嶅噯紜殑銆?br>
涓鑸垜浠父璇寸殑鍐呭瓨娉勬紡鏄寚鍫嗗唴瀛樼殑娉勬紡銆傚爢鍐呭瓨鏄寚紼嬪簭浠庡爢涓垎閰嶇殑錛屽ぇ灝忎換鎰忕殑錛堝唴瀛樺潡鐨勫ぇ灝忓彲浠ュ湪紼嬪簭榪愯鏈熷喅瀹氾級(jí)錛屼嬌鐢ㄥ畬鍚庡繀欏繪樉紺洪噴鏀劇殑鍐呭瓨銆?
搴旂敤紼嬪簭涓鑸嬌鐢╩alloc錛宺ealloc錛宯ew絳夊嚱鏁頒粠鍫嗕腑鍒嗛厤鍒頒竴鍧楀唴瀛橈紝浣跨敤瀹屽悗錛岀▼搴忓繀欏昏礋璐g浉搴旂殑璋冪敤free鎴杁elete閲婃斁璇ュ唴瀛?
鍧楋紝鍚﹀垯錛岃繖鍧楀唴瀛樺氨涓嶈兘琚啀嬈′嬌鐢紝鎴戜滑灝辮榪欏潡鍐呭瓨娉勬紡浜?jiǎn)銆?/p>
a/=k+m*k+m/k+m*k+m
=>a /= 2+1*2+1/2+1*2+1
=>a = a/7;
=>a = 1;
--------------------------------------------------------------------------
5.
const 絎﹀彿甯擱噺錛?br>(1)const char *p
(2)char const *p
(3)char * const p
璇存槑涓婇潰涓夌鎻忚堪鐨勫尯鍒紱
濡傛灉const浣嶄簬鏄熷彿鐨勫乏渚э紝鍒檆onst灝辨槸鐢ㄦ潵淇グ鎸囬拡鎵鎸囧悜鐨勫彉閲忥紝鍗蟲(chóng)寚閽堟寚鍚戜負(fù)甯擱噺錛?br>濡傛灉const浣嶄簬鏄熷彿鐨勫彸渚э紝const灝辨槸淇グ鎸囬拡鏈韓錛屽嵆鎸囬拡鏈韓鏄父閲忋?br>
(1)const char *p
涓涓寚鍚慶har綾誨瀷鐨刢onst瀵硅薄鎸囬拡錛宲涓嶆槸甯擱噺,鎴戜滑鍙互淇敼p鐨勫鹼紝浣垮叾鎸囧悜涓嶅悓鐨刢har錛屼絾鏄笉鑳芥敼鍙樺畠鎸囧悜闈瀋har瀵硅薄錛屽錛?br>const char *p;
char c1='a';
char c2='b';
p=&c1;//ok
p=&c2;//ok
*p=c1;//error
(2)char const *p
(3)char * const p
榪欎袱涓ソ璞℃槸涓鏍風(fēng)殑錛屾鏃?p鍙互淇敼錛岃宲涓嶈兘淇敼銆?br>
(4)const char * const p
榪欑鏄湴鍧鍙?qiáng)鎸囧悜瀵硅薄閮戒笉鑳戒慨鏀广?br>
--------------------------------------------------------------------------
6.涓嬮潰鏄疌璇█涓袱縐峣f璇彞鍒ゆ柇鏂瑰紡銆傝闂摢縐嶅啓娉曟洿濂斤紵涓轟粈涔堬紵
int n;
if (n == 10) // 絎竴縐嶅垽鏂柟寮?br> if (10 == n) // 絎簩縐嶅垽鏂柟寮?br>
濡傛灉灝戜簡(jiǎn)涓?鍙?緙栬瘧鏃跺氨浼?xì)鎶ラ?鍑忓皯浜?jiǎn)鍑洪敊鐨勫彲鑳借?鍙互媯(gè)嫻嬪嚭鏄惁灝戜簡(jiǎn)=
--------------------------------------------------------------------------
7.涓嬮潰鐨勪唬鐮佹湁浠涔堥棶棰橈紵
void DoSomeThing(...)
{
char* p;
...
p = malloc(1024); // 鍒嗛厤1K鐨勭┖闂?br> if (NULL == p)
return;
...
p = realloc(p, 2048); // 絀洪棿涓嶅錛岄噸鏂板垎閰嶅埌2K
if (NULL == p)
return;
...
}
A:
p = malloc(1024); 搴旇鍐欐垚錛?nbsp;p = (char *) malloc(1024);
娌℃湁閲婃斁p鐨勭┖闂達(dá)紝閫犳垚鍐呭瓨娉勬紡銆?br>
--------------------------------------------------------------------------
8.涓嬮潰鐨勪唬鐮佹湁浠涔堥棶棰橈紵騫惰緇欏嚭姝g‘鐨勫啓娉曘?br>void DoSomeThing(char* p)
{
char str[16];
int n;
assert(NULL != p);
sscanf(p, "%s%d", str, n);
if (0 == strcmp(str, "something"))
{
...
}
}
A:
sscanf(p, "%s%d", str, n); 榪欏彞璇ュ啓鎴愶細(xì) sscanf(p, "%s%d", str, &n);
--------------------------------------------------------------------------
9.涓嬮潰浠g爜鏈変粈涔堥敊璇?
Void test1()
{
char string[10];
char *str1="0123456789";
strcpy(string, str1);
}
鏁扮粍瓚婄晫
--------------------------------------------------------------------------
10.涓嬮潰浠g爜鏈変粈涔堥棶棰?
Void test2()
{
char string[10], str1[10];
for(i=0; i<10;i++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
鏁扮粍瓚婄晫
--------------------------------------------------------------------------
11.涓嬮潰浠g爜鏈変粈涔堥棶棰?
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
==鏁扮粍瓚婄晫
==strcpy鎷瘋礉鐨勭粨鏉熸爣蹇楁槸鏌ユ壘瀛楃涓蹭腑鐨刓0 鍥犳濡傛灉瀛楃涓蹭腑娌℃湁閬囧埌\0鐨勮瘽 浼?xì)涓鐩村鍒訛紝鐩村埌閬囧埌\0,涓婇潰鐨?23閮藉洜姝や駭鐢熻秺鐣岀殑鎯呭喌
寤鴻浣跨敤 strncpy 鍜?nbsp;memcpy
--------------------------------------------------------------------------
12.涓嬮潰浠g爜鏈変粈涔堥棶棰?
#define MAX_SRM 256
DSN get_SRM_no()
{
static int SRM_no; //鏄笉鏄繖閲屾病璧嬪垵鍊鹼紵
int I;
for(I=0;I<MAX_SRM;I++,SRM_no++)
{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
緋葷粺浼?xì)鍒濆鍖杝tatic int鍙橀噺涓?,浣嗚鍊間細(xì)涓鐩翠繚瀛?鎵璋撶殑涓嶅彲閲嶅叆...
--------------------------------------------------------------------------
13.鍐欏嚭榪愯緇撴灉:
{// test1
char str[] = "world"; cout << sizeof(str) << ": ";
char *p = str; cout << sizeof(p) << ": ";
char i = 10; cout << sizeof(i) << ": ";
void *pp = malloc(10); cout << sizeof(p) << endl;
}
6錛?錛?錛?
--------------------------------------------------------------------------
14.鍐欏嚭榪愯緇撴灉:
{// test2
union V {
struct X {
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
v.c = 100;
printf("%d", v.x.s3);
}
3
--------------------------------------------------------------------------
15.鐢–++鍐欎釜紼嬪簭錛屽浣曞垽鏂竴涓搷浣滅郴緇熸槸16浣嶈繕鏄?2浣嶇殑錛熶笉鑳界敤sizeof()鍑芥暟
A1:
16浣嶇殑緋葷粺涓嬶紝
int i = 65536;
cout << i; // 杈撳嚭0錛?br>int i = 65535;
cout << i; // 杈撳嚭-1錛?br>
32浣嶇殑緋葷粺涓嬶紝
int i = 65536;
cout << i; // 杈撳嚭65536錛?br>int i = 65535;
cout << i; // 杈撳嚭65535錛?br>
A2:
int a = ~0;
if( a>65536 )
{
cout<<"32 bit"<<endl;
}
else
{
cout<<"16 bit"<<endl;
}
--------------------------------------------------------------------------
16.C鍜孋++鏈変粈涔堜笉鍚?
浠庢満鍒朵笂錛歝鏄潰鍚戣繃紼嬬殑錛堜絾c涔熷彲浠ョ紪鍐欓潰鍚戝璞$殑紼嬪簭錛夛紱c++鏄潰鍚戝璞$殑錛屾彁渚涗簡(jiǎn)綾匯備絾鏄紝
c++緙栧啓闈㈠悜瀵硅薄鐨勭▼搴忔瘮c瀹規(guī)槗
浠庨傜敤鐨勬柟鍚戯細(xì)c閫傚悎瑕佹眰浠g爜浣撶Н灝忕殑錛屾晥鐜囬珮鐨勫満鍚堬紝濡傚祵鍏ュ紡錛沜++閫傚悎鏇翠笂灞傜殑錛屽鏉傜殑錛?nbsp; llinux鏍稿績(jī)澶ч儴鍒嗘槸c鍐欑殑錛屽洜涓哄畠鏄郴緇熻蔣浠訛紝鏁堢巼瑕佹眰鏋侀珮銆?br>
浠庡悕縐頒笂涔熷彲浠ョ湅鍑猴紝c++姣攃澶氫簡(jiǎn)+錛岃鏄巆++鏄痗鐨勮秴闆嗭紱閭d負(fù)浠涔堜笉鍙玞+鑰屽彨c++鍛紝鏄洜涓篶++姣?br>c鏉ヨ鎵╁厖鐨勪笢瑗垮お澶氫簡(jiǎn)錛屾墍浠ュ氨鍦╟鍚庨潰鏀句笂涓や釜+錛涗簬鏄氨鎴愪簡(jiǎn)c++
C璇█鏄粨鏋勫寲緙栫▼璇█錛孋++鏄潰鍚戝璞$紪紼嬭璦銆?br>C++渚ч噸浜庡璞¤屼笉鏄繃紼嬶紝渚ч噸浜庣被鐨勮璁¤屼笉鏄昏緫鐨勮璁°?br>
--------------------------------------------------------------------------
17.鍦ㄤ笉鐢ㄧ涓夋柟鍙傛暟鐨勬儏鍐典笅錛屼氦鎹袱涓弬鏁扮殑鍊?br>#include <stdio.h>
void main()
{
int i=60;
int j=50;
i=i+j;
j=i-j;
i=i-j;
printf("i=%d\n",i);
printf("j=%d\n",j);
}
鏂規(guī)硶浜岋細(xì)
i^=j;
j^=i;
i^=j;
鏂規(guī)硶涓夛細(xì)
// 鐢ㄥ姞鍑忓疄鐜幫紝鑰屼笖涓嶄細(xì)婧㈠嚭
a = a+b-(b=a)
--------------------------------------------------------------------------
18.鏈夊叧浣嶅煙鐨勯潰璇曢錛堜負(fù)浠涔堣緭鍑虹殑鏄竴涓鎬殑瀛楃錛?br>
a.t = 'b';鏁堟灉鐩稿綋浜?nbsp;a.t= 'b' & 0xf;
'b' --> 01100010
'b' & 0xf -->>00000010
鎵浠ヨ緭鍑篈scii鐮佷負(fù)2鐨勭壒孌婂瓧絎?br>
char t:4;灝辨槸4bit鐨勫瓧絎﹀彉閲忥紝鍚屾牱
unsigned short i:8;灝辨槸8bit鐨勬棤絎﹀彿鐭暣褰㈠彉閲?br>
--------------------------------------------------------------------------
19.int i=10, j=10, k=3; k*=i+j; k鏈鍚庣殑鍊兼槸?
60
--------------------------------------------------------------------------
20.榪涚▼闂撮氫俊鐨勬柟寮忔湁?
榪涚▼闂撮氫俊鐨勬柟寮忔湁 鍏變韓鍐呭瓨錛?nbsp;綆¢亾 錛孲ocket 錛屾秷鎭槦鍒?nbsp;, DDE絳?br>
--------------------------------------------------------------------------
21.
struct A
{
char t:4;
char k:4;
unsigned short i:8;
unsigned long m;
}
sizeof(A)=?錛堜笉鑰冭檻杈圭晫瀵歸綈錛?br>
7
struct CELL // Declare CELL bit field
{
unsigned character : 8; // 00000000 ????????
unsigned foreground : 3; // 00000??? 00000000
unsigned intensity : 1; // 0000?000 00000000
unsigned background : 3; // 0???0000 00000000
unsigned blink : 1; // ?0000000 00000000
} screen[25][80]; // Array of bit fields
浜屻佷綅緇撴瀯
浣嶇粨鏋勬槸涓縐嶇壒孌婄殑緇撴瀯, 鍦ㄩ渶鎸変綅璁塊棶涓涓瓧鑺傛垨瀛楃殑澶氫釜浣嶆椂, 浣嶇粨鏋?nbsp;
姣旀寜浣嶈繍綆楃鏇村姞鏂逛究銆?nbsp;
浣嶇粨鏋勫畾涔夌殑涓鑸艦寮忎負(fù):
struct浣嶇粨鏋勫悕{
鏁版嵁綾誨瀷 鍙橀噺鍚? 鏁村瀷甯告暟;
鏁版嵁綾誨瀷 鍙橀噺鍚? 鏁村瀷甯告暟;
} 浣嶇粨鏋勫彉閲?
鍏朵腑: 鏁版嵁綾誨瀷蹇呴』鏄痠nt(unsigned鎴杝igned)銆?nbsp;鏁村瀷甯告暟蹇呴』鏄潪璐熺殑鏁?nbsp;
鏁? 鑼冨洿鏄?~15, 琛ㄧず浜岃繘鍒朵綅鐨勪釜鏁? 鍗寵〃紺烘湁澶氬皯浣嶃?nbsp;
鍙橀噺鍚嶆槸閫夋嫨欏? 鍙互涓嶅懡鍚? 榪欐牱瑙勫畾鏄負(fù)浜?jiǎn)鎺掑垪闇瑕併?nbsp;
渚嬪: 涓嬮潰瀹氫箟浜?jiǎn)涓涓綅緇撴瀯銆?nbsp;
struct{
unsigned incon: 8; /*incon鍗犵敤浣庡瓧鑺傜殑0~7鍏?浣?/
unsigned txcolor: 4;/*txcolor鍗犵敤楂樺瓧鑺傜殑0~3浣嶅叡4浣?/
unsigned bgcolor: 3;/*bgcolor鍗犵敤楂樺瓧鑺傜殑4~6浣嶅叡3浣?/
unsigned blink: 1; /*blink鍗犵敤楂樺瓧鑺傜殑絎?浣?/
}ch;
浣嶇粨鏋勬垚鍛樼殑璁塊棶涓庣粨鏋勬垚鍛樼殑璁塊棶鐩稿悓銆?nbsp;
渚嬪: 璁塊棶涓婁緥浣嶇粨鏋勪腑鐨刡gcolor鎴愬憳鍙啓鎴?
ch.bgcolor
娉ㄦ剰:
1. 浣嶇粨鏋勪腑鐨勬垚鍛樺彲浠ュ畾涔変負(fù)unsigned, 涔熷彲瀹氫箟涓簊igned, 浣嗗綋鎴愬憳闀?nbsp;
搴︿負(fù)1鏃? 浼?xì)琚湄?fù)鏄痷nsigned綾誨瀷銆傚洜涓哄崟涓綅涓嶅彲鑳藉叿鏈夌鍙楓?nbsp;
2. 浣嶇粨鏋勪腑鐨勬垚鍛樹(shù)笉鑳戒嬌鐢ㄦ暟緇勫拰鎸囬拡, 浣嗕綅緇撴瀯鍙橀噺鍙互鏄暟緇勫拰鎸囬拡,
濡傛灉鏄寚閽? 鍏舵垚鍛樿闂柟寮忓悓緇撴瀯鎸囬拡銆?nbsp;
3. 浣嶇粨鏋勬婚暱搴?浣嶆暟), 鏄悇涓綅鎴愬憳瀹氫箟鐨勪綅鏁頒箣鍜? 鍙互瓚呰繃涓や釜瀛?nbsp;
鑺傘?nbsp;
4. 浣嶇粨鏋勬垚鍛樺彲浠ヤ笌鍏跺畠緇撴瀯鎴愬憳?shù)竴璧蜂嬌鐢ㄣ?nbsp;
渚嬪:
struct info{
char name[8];
int age;
struct addr address;
float pay;
unsigned state: 1;
unsigned pay: 1;
}workers;
涓婁緥鐨勭粨鏋勫畾涔変簡(jiǎn)鍏充簬涓涓伐浜虹殑淇℃伅銆傚叾涓湁涓や釜浣嶇粨鏋勬垚鍛? 姣忎釜浣嶇粨
鏋勬垚鍛樺彧鏈変竴浣? 鍥犳鍙崰涓涓瓧鑺備絾淇濆瓨?shù)簡(jiǎn)涓や釜淇℃? 璇ュ瓧鑺備腑絎竴浣嶈〃紺哄伐
浜虹殑鐘舵? 絎簩浣嶈〃紺哄伐璧勬槸鍚﹀凡鍙戞斁銆傜敱姝ゅ彲瑙佷嬌鐢ㄤ綅緇撴瀯鍙互鑺傜渷瀛樿串絀洪棿銆?br>
--------------------------------------------------------------------------
22.涓嬮潰鐨勫嚱鏁板疄鐜板湪涓涓浐瀹氱殑鏁頒笂鍔犱笂涓涓暟錛屾湁浠涔堥敊璇紝鏀規(guī)
int add_n(int n)
{
static int i=100;
i+=n;
return i;
}
絳?
鍥犱負(fù)static浣垮緱i鐨勫間細(xì)淇濈暀涓婃鐨勫箋?br>鍘繪帀static灝卞彲浜?br>
--------------------------------------------------------------------------
23.涓嬮潰鐨勪唬鐮佹湁浠涔堥棶棰?
class A
{
public:
A() { p=this; }
~A() { if(p!=NULL) { delete p; p=NULL; } }
A* p;
};
絳?
浼?xì)寮曡典h棤闄愰掑綊
--------------------------------------------------------------------------
24.
union a {
int a_int1;
double a_double;
int a_int2;
};
typedef struct
{
a a1;
char y;
} b;
class c
{
double c_double;
b b1;
a a2;
};
杈撳嚭cout<<sizeof(c)<<endl;鐨勭粨鏋?
絳?
VC6鐜涓嬪緱鍑虹殑緇撴灉鏄?2
鍙?
鎴?sun)鍦╒C6.0+win2k涓嬪仛榪囪瘯楠?
short - 2
int-4
float-4
double-8
鎸囬拡-4
sizeof(union)錛屼互緇撴瀯閲岄潰size鏈澶х殑涓簎nion鐨剆ize
瑙f瀽C璇█涓殑sizeof
涓銆乻izeof鐨勬蹇點(diǎn)
銆銆sizeof鏄疌璇█鐨勪竴縐嶅崟鐩搷浣滅錛屽C璇█鐨勫叾浠栨搷浣滅++銆?-絳夈傚畠騫朵笉鏄嚱鏁般俿izeof鎿嶄綔絎︿互瀛楄妭褰㈠紡緇欏嚭浜?jiǎn)鍏舵搷浣滄暟鐨勫瓨鍌ㄥぇ灏忋傛搷浣滄暟鍙互鏄竴涓〃杈懼紡鎴栨嫭鍦ㄦ嫭鍙峰唴鐨勭被鍨嬪悕銆傛搷浣滄暟鐨勫瓨鍌ㄥぇ灝忕敱鎿嶄綔鏁扮殑綾誨瀷鍐沖畾銆傘
浜屻乻izeof鐨勪嬌鐢ㄦ柟娉曘
銆銆1銆佺敤浜庢暟鎹被鍨嬨
銆銆sizeof浣跨敤褰㈠紡錛歴izeof錛坱ype錛夈
銆銆鏁版嵁綾誨瀷蹇呴』鐢ㄦ嫭鍙鋒嫭浣忋傚sizeof錛坕nt錛夈傘
銆銆2銆佺敤浜庡彉閲忋
銆銆sizeof浣跨敤褰㈠紡錛歴izeof錛坴ar_name錛夋垨sizeof銆var_name銆
銆銆鍙橀噺鍚嶅彲浠ヤ笉鐢ㄦ嫭鍙鋒嫭浣忋傚sizeof銆(var_name)錛宻izeof銆var_name絳夐兘鏄紜艦寮忋傚甫鎷彿鐨勭敤娉曟洿鏅亶錛屽ぇ澶氭暟紼嬪簭鍛橀噰鐢ㄨ繖縐嶅艦寮忋傘
銆銆娉ㄦ剰錛歴izeof鎿嶄綔絎︿笉鑳界敤浜庡嚱鏁扮被鍨嬶紝涓嶅畬鍏ㄧ被鍨嬫垨浣嶅瓧孌點(diǎn)備笉瀹屽叏綾誨瀷鎸囧叿鏈夋湭鐭ュ瓨鍌ㄥぇ灝忕殑鏁版嵁綾誨瀷錛屽鏈煡瀛樺偍澶у皬鐨勬暟緇勭被鍨嬨佹湭鐭ュ唴瀹圭殑緇撴瀯鎴栬仈鍚堢被鍨嬨乿oid綾誨瀷絳夈傘
銆銆濡俿izeof(max)鑻ユ鏃跺彉閲弇ax瀹氫箟涓篿nt銆max(),sizeof(char_v)銆鑻ユ鏃禼har_v瀹氫箟涓篶har銆char_v銆[MAX]涓擬AX鏈煡錛宻izeof(void)閮戒笉鏄紜艦寮忋傘
涓夈乻izeof鐨勭粨鏋溿
銆銆sizeof鎿嶄綔絎︾殑緇撴灉綾誨瀷鏄痵ize_t錛屽畠鍦ㄥご鏂囦歡
涓璽ypedef涓簎nsigned銆int綾誨瀷銆傝綾誨瀷淇濊瘉鑳藉綰沖疄鐜版墍寤虹珛鐨勬渶澶у璞$殑瀛楄妭澶у皬銆傘
銆銆1銆佽嫢鎿嶄綔鏁板叿鏈夌被鍨媍har銆乽nsigned銆char鎴杝igned銆char錛屽叾緇撴灉絳変簬1銆傘
銆銆ANSI銆C姝e紡瑙勫畾瀛楃綾誨瀷涓?瀛楄妭銆傘
銆銆2銆乮nt銆乽nsigned銆int銆銆乻hort銆int銆乽nsigned銆short銆銆乴ong銆int銆銆乽nsigned銆long銆銆?nbsp;float銆乨ouble銆乴ong銆double綾誨瀷鐨剆izeof銆鍦ˋNSI銆C涓病鏈夊叿浣撹瀹氾紝澶у皬渚濊禆浜庡疄鐜幫紝涓鑸彲鑳藉垎鍒負(fù)2銆?銆?銆?銆?nbsp;4銆?銆?銆?銆?0銆傘
銆銆3銆佸綋鎿嶄綔鏁版槸鎸囬拡鏃訛紝sizeof渚濊禆浜庣紪璇戝櫒銆備緥濡侻icrosoft銆C/C++7.0涓紝near綾繪寚閽堝瓧鑺傛暟涓?錛宖ar銆乭uge綾繪寚閽堝瓧鑺傛暟涓?銆備竴鑸琔nix鐨勬寚閽堝瓧鑺傛暟涓?銆傘
銆銆4銆佸綋鎿嶄綔鏁板叿鏈夋暟緇勭被鍨嬫椂錛屽叾緇撴灉鏄暟緇勭殑鎬誨瓧鑺傛暟銆傘
銆銆5銆佽仈鍚堢被鍨嬫搷浣滄暟鐨剆izeof鏄叾鏈澶у瓧鑺傛垚鍛樼殑瀛楄妭鏁般傜粨鏋勭被鍨嬫搷浣滄暟鐨剆izeof鏄繖縐嶇被鍨嬪璞$殑鎬誨瓧鑺傛暟錛屽寘鎷換浣曞灚琛ュ湪鍐呫傘
銆銆璁╂垜浠湅濡備笅緇撴瀯錛氥
銆銆struct銆{char銆b;銆double銆x;}銆a;銆
銆銆鍦ㄦ煇浜涙満鍣ㄤ笂sizeof錛坅錛?12錛岃屼竴鑸瑂izeof錛坈har錛?銆sizeof錛坉ouble錛?9銆傘
銆銆榪欐槸鍥犱負(fù)緙栬瘧鍣ㄥ湪鑰冭檻瀵歸綈闂鏃訛紝鍦ㄧ粨鏋勪腑鎻掑叆絀轟綅浠ユ帶鍒跺悇鎴愬憳瀵硅薄鐨勫湴鍧瀵歸綈銆傚double綾誨瀷鐨勭粨鏋勬垚鍛榵瑕佹斁鍦ㄨ4鏁撮櫎鐨勫湴鍧銆傘
銆銆6銆佸鏋滄搷浣滄暟鏄嚱鏁頒腑鐨勬暟緇勫艦鍙傛垨鍑芥暟綾誨瀷鐨勫艦鍙傦紝sizeof緇欏嚭鍏舵寚閽堢殑澶у皬銆傘
鍥涖乻izeof涓庡叾浠栨搷浣滅鐨勫叧緋匯
銆銆sizeof鐨勪紭鍏堢駭涓?綰э紝姣?銆?絳?綰ц繍綆楃浼樺厛綰ч珮銆傚畠鍙互涓庡叾浠栨搷浣滅涓璧風(fēng)粍鎴愯〃杈懼紡銆傚i*sizeof錛坕nt錛夛紱鍏朵腑i涓篿nt綾誨瀷鍙橀噺銆傘
浜斻乻izeof鐨勪富瑕佺敤閫斻
銆銆1銆乻izeof鎿嶄綔絎︾殑涓涓富瑕佺敤閫旀槸涓庡瓨鍌ㄥ垎閰嶅拰I/O緋葷粺閭f牱鐨勪緥紼嬭繘琛岄氫俊銆備緥濡傦細(xì)銆
銆銆void銆*malloc錛坰ize_t銆size錛?銆
銆銆size_t銆fread(void銆*銆ptr,size_t銆size,size_t銆nmemb,FILE銆*銆stream)銆傘
銆銆2銆乻izeof鐨勫彟涓涓殑涓昏鐢ㄩ旀槸璁$畻鏁扮粍涓厓绱犵殑涓暟銆備緥濡傦細(xì)銆
銆銆void銆*銆memset錛坴oid銆*銆s,int銆c,sizeof(s)錛夈傘
鍏佸緩璁
銆銆鐢變簬鎿嶄綔鏁扮殑瀛楄妭鏁板湪瀹炵幇鏃跺彲鑳藉嚭鐜板彉鍖栵紝寤鴻鍦ㄦ秹鍙?qiáng)鍒版搷浣滄暟瀛楄妭澶畯鏃剁敤sizeof鏉ヤ唬鏇垮父閲忚綆椼?br>
=============================================================
鏈枃涓昏鍖呮嫭浜屼釜閮ㄥ垎錛岀涓閮ㄥ垎閲嶇偣浠嬬粛鍦╒C涓紝鎬庝箞鏍烽噰鐢╯izeof鏉ユ眰緇撴瀯鐨勫ぇ灝忥紝浠ュ強(qiáng)瀹規(guī)槗鍑虹幇鐨勯棶棰橈紝騫剁粰鍑?guó)櫑e喅闂鐨勬栆?guī)硶錛岀浜岄儴鍒嗘葷粨鍑篤C涓璼izeof鐨勪富瑕佺敤娉曘?nbsp;
1銆?nbsp;sizeof搴旂敤鍦ㄧ粨鏋勪笂鐨勬儏鍐?nbsp;
璇風(fēng)湅涓嬮潰鐨勭粨鏋勶細(xì)
struct MyStruct
{
double dda1;
char dda;
int type
};
瀵圭粨鏋凪yStruct閲囩敤sizeof浼?xì)鍑虹庮C粈涔堢粨鏋滃憿錛焥izeof(MyStruct)涓哄灝戝憿錛熶篃璁鎬綘浼?xì)杩欐犱h眰錛?nbsp;
sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13
浣嗘槸褰撳湪VC涓祴璇曚笂闈㈢粨鏋勭殑澶у皬鏃訛紝浣犱細(xì)鍙戠幇sizeof(MyStruct)涓?6銆備綘鐭ラ亾涓轟粈涔堝湪VC涓細(xì)寰楀嚭榪欐牱涓涓粨鏋滃悧錛?nbsp;
鍏跺疄錛岃繖鏄疺C瀵瑰彉閲忓瓨鍌ㄧ殑涓涓壒孌婂鐞嗐備負(fù)浜?jiǎn)鎻愰珮CPU鐨勫瓨鍌ㄩ熷害錛孷C瀵逛竴浜涘彉閲忕殑璧峰鍦板潃鍋氫簡(jiǎn)"瀵歸綈"澶勭悊銆傚湪榛樿鎯呭喌涓嬶紝VC瑙勫畾鍚勬垚鍛樺彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺蹇呴』涓鴻鍙橀噺鐨勭被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟鐨勫嶆暟銆備笅闈㈠垪鍑哄父鐢ㄧ被鍨嬬殑瀵歸綈鏂瑰紡(vc6.0,32浣嶇郴緇?銆?nbsp;
綾誨瀷
瀵歸綈鏂瑰紡錛堝彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺錛?nbsp;
Char
鍋忕Щ閲忓繀欏諱負(fù)sizeof(char)鍗?鐨勫嶆暟
int
鍋忕Щ閲忓繀欏諱負(fù)sizeof(int)鍗?鐨勫嶆暟
float
鍋忕Щ閲忓繀欏諱負(fù)sizeof(float)鍗?鐨勫嶆暟
double
鍋忕Щ閲忓繀欏諱負(fù)sizeof(double)鍗?鐨勫嶆暟
Short
鍋忕Щ閲忓繀欏諱負(fù)sizeof(short)鍗?鐨勫嶆暟
鍚勬垚鍛樺彉閲忓湪瀛樻斁鐨勬椂鍊欐牴鎹湪緇撴瀯涓嚭鐜扮殑欏哄簭渚濇鐢寵絀洪棿錛屽悓鏃舵寜鐓т笂闈㈢殑瀵歸綈鏂瑰紡璋冩暣浣嶇疆錛岀┖緙虹殑瀛楄妭VC浼?xì)鑷姩濉厖銆傚悓鏃禫C涓轟簡(jiǎn)紜繚緇撴瀯鐨勫ぇ灝忎負(fù)緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆璇ョ粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛夌殑鍊嶆暟錛屾墍浠ュ湪涓烘渶鍚庝竴涓垚鍛樺彉閲忕敵璇風(fēng)┖闂村悗錛岃繕?shù)細(xì)鏍规嵁闇瑕佽嚜鍔ㄥ~鍏呯┖緙虹殑瀛楄妭銆?nbsp;
涓嬮潰鐢ㄥ墠闈㈢殑渚嬪瓙鏉ヨ鏄嶸C鍒板簳鎬庝箞鏍鋒潵瀛樻斁緇撴瀯鐨勩?nbsp;
struct MyStruct
{
double dda1;
char dda;
int type
}錛?nbsp;
涓轟笂闈㈢殑緇撴瀯鍒嗛厤絀洪棿鐨勬椂鍊欙紝VC鏍規(guī)嵁鎴愬憳鍙橀噺鍑虹幇鐨勯『搴忓拰瀵歸綈鏂瑰紡錛屽厛涓虹涓涓垚鍛榙da1鍒嗛厤絀洪棿錛屽叾璧峰鍦板潃璺熺粨鏋勭殑璧峰鍦板潃鐩稿悓錛堝垰濂藉亸縐婚噺0鍒氬ソ涓簊izeof(double)鐨勫嶆暟錛夛紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof(double)=8涓瓧鑺傦紱鎺ヤ笅鏉ヤ負(fù)絎簩涓垚鍛榙da鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屾槸sizeof(char)鐨勫嶆暟錛屾墍浠ユ妸dda瀛樻斁鍦ㄥ亸縐婚噺涓?鐨勫湴鏂規(guī)弧瓚沖榻愭柟寮忥紝璇ユ垚鍛樺彉閲忓崰鐢?nbsp;sizeof(char)=1涓瓧鑺傦紱鎺ヤ笅鏉ヤ負(fù)絎笁涓垚鍛榯ype鍒嗛厤絀洪棿錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?錛屼笉鏄痵izeof (int)=4鐨勫嶆暟錛屼負(fù)浜?jiǎn)婊…憶_榻愭柟寮忓鍋忕Щ閲忕殑綰︽潫闂錛孷C鑷姩濉厖3涓瓧鑺傦紙榪欎笁涓瓧鑺傛病鏈夋斁浠涔堜笢瑗匡級(jí)錛岃繖鏃朵笅涓涓彲浠ュ垎閰嶇殑鍦板潃瀵逛簬緇撴瀯鐨勮搗濮嬪湴鍧鐨勫亸縐婚噺涓?2錛屽垰濂芥槸sizeof(int)=4鐨勫嶆暟錛屾墍浠ユ妸type瀛樻斁鍦ㄥ亸縐婚噺涓?2鐨勫湴鏂癸紝璇ユ垚鍛樺彉閲忓崰鐢╯izeof(int)=4涓瓧鑺傦紱榪欐椂鏁翠釜緇撴瀯鐨勬垚鍛樺彉閲忓凡緇忛兘鍒嗛厤浜?jiǎn)绌洪椷_(dá)紝鎬葷殑鍗犵敤鐨勭┖闂村ぇ灝忎負(fù)錛?+1+3+4=16錛屽垰濂戒負(fù)緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆緇撴瀯涓崰鐢ㄦ渶澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟sizeof(double)=8錛夌殑鍊嶆暟錛屾墍浠ユ病鏈夌┖緙虹殑瀛楄妭闇瑕佸~鍏呫傛墍浠ユ暣涓粨鏋勭殑澶у皬涓猴細(xì)sizeof(MyStruct)=8+1+ 3+4=16錛屽叾涓湁3涓瓧鑺傛槸VC鑷姩濉厖鐨勶紝娌℃湁鏀句換浣曟湁鎰忎箟鐨勪笢瑗褲?nbsp;
涓嬮潰鍐嶄婦涓緥瀛愶紝浜ゆ崲涓涓嬩笂闈㈢殑MyStruct鐨勬垚鍛樺彉閲忕殑浣嶇疆錛屼嬌瀹冨彉鎴愪笅闈㈢殑鎯呭喌錛?nbsp;
struct MyStruct
{
char dda;
double dda1;
int type
}錛?nbsp;
榪欎釜緇撴瀯鍗犵敤鐨勭┖闂翠負(fù)澶氬ぇ鍛紵鍦╒C6.0鐜涓嬶紝鍙互寰楀埌sizeof(MyStruc)涓?4銆傜粨鍚堜笂闈㈡彁鍒扮殑鍒嗛厤絀洪棿鐨勪竴浜涘師鍒欙紝鍒嗘瀽涓媀C鎬庝箞鏍蜂負(fù)涓婇潰鐨勭粨鏋勫垎閰嶇┖闂寸殑銆傦紙綆鍗曡鏄庯級(jí)
struct MyStruct
{
char dda;//鍋忕Щ閲忎負(fù)0錛屾弧瓚沖榻愭柟寮忥紝dda鍗犵敤1涓瓧鑺傦紱
double dda1;//涓嬩竴涓彲鐢ㄧ殑鍦板潃鐨勫亸縐婚噺涓?錛屼笉鏄痵izeof(double)=8
//鐨勫嶆暟錛岄渶瑕佽ˉ瓚?涓瓧鑺傛墠鑳戒嬌鍋忕Щ閲忓彉?shù)?錛堟弧瓚沖榻?nbsp;
//鏂瑰紡錛夛紝鍥犳VC鑷姩濉厖7涓瓧鑺傦紝dda1瀛樻斁鍦ㄥ亸縐婚噺涓?
//鐨勫湴鍧涓婏紝瀹冨崰鐢?涓瓧鑺傘?nbsp;
int type錛?/涓嬩竴涓彲鐢ㄧ殑鍦板潃鐨勫亸縐婚噺涓?6錛屾槸sizeof(int)=4鐨勫?nbsp;
//鏁幫紝婊¤凍int鐨勫榻愭柟寮忥紝鎵浠ヤ笉闇瑕乂C鑷姩濉厖錛宼ype瀛?nbsp;
//鏀懼湪鍋忕Щ閲忎負(fù)16鐨勫湴鍧涓婏紝瀹冨崰鐢?涓瓧鑺傘?nbsp;
}錛?/鎵鏈夋垚鍛樺彉閲忛兘鍒嗛厤浜?jiǎn)绌洪椷_(dá)紝絀洪棿鎬葷殑澶у皬涓?+7+8+4=20錛屼笉鏄粨鏋?nbsp;
//鐨勮妭杈圭晫鏁幫紙鍗崇粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟sizeof
//(double)=8錛夌殑鍊嶆暟錛屾墍浠ラ渶瑕佸~鍏?涓瓧鑺傦紝浠ユ弧瓚崇粨鏋勭殑澶у皬涓?nbsp;
//sizeof(double)=8鐨勫嶆暟銆?nbsp;
鎵浠ヨ緇撴瀯鎬葷殑澶у皬涓猴細(xì)sizeof(MyStruc)涓?+7+8+4+4=24銆傚叾涓葷殑鏈?+4=11涓瓧鑺傛槸VC鑷姩濉厖鐨勶紝娌℃湁鏀句換浣曟湁鎰忎箟鐨勪笢瑗褲?nbsp;
VC瀵圭粨鏋勭殑瀛樺偍鐨勭壒孌婂鐞嗙‘瀹炴彁楂楥PU瀛樺偍鍙橀噺鐨勯熷害錛屼絾鏄湁鏃跺欎篃甯︽潵浜?jiǎn)涓浜涢夯鐑?chǔ)锛屾垜浠篃灞忚斀鎺夊彉閲忛粯璁ょ殑瀵归綈鏂瑰紡锛岃嚜宸卞彲浠ヨ畱之氬彉閲忕殑瀵归綈鏂瑰紡銆?nbsp;
VC 涓彁渚涗簡(jiǎn)#pragma pack(n)鏉ヨ瀹氬彉閲忎互n瀛楄妭瀵歸綈鏂瑰紡銆俷瀛楄妭瀵歸綈灝辨槸璇村彉閲忓瓨鏀劇殑璧峰鍦板潃鐨勫亸縐婚噺鏈変袱縐嶆儏鍐碉細(xì)絎竴銆佸鏋渘澶т簬絳変簬璇ュ彉閲忔墍鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堝亸縐婚噺蹇呴』婊¤凍榛樿鐨勫榻愭柟寮忥紝絎簩銆佸鏋渘灝忎簬璇ュ彉閲忕殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堝亸縐婚噺涓簄鐨勫嶆暟錛屼笉鐢ㄦ弧瓚抽粯璁ょ殑瀵歸綈鏂瑰紡銆傜粨鏋勭殑鎬誨ぇ灝忎篃鏈変釜綰︽潫鏉′歡錛屽垎涓嬮潰涓ょ鎯呭喌錛氬鏋渘澶т簬鎵鏈夋垚鍛樺彉閲忕被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟錛岄偅涔堢粨鏋勭殑鎬誨ぇ灝忓繀欏諱負(fù)鍗犵敤絀洪棿鏈澶х殑鍙橀噺鍗犵敤鐨勭┖闂存暟鐨勫嶆暟錛?nbsp;
鍚﹀垯蹇呴』涓簄鐨勫嶆暟銆備笅闈婦渚嬭鏄庡叾鐢ㄦ硶銆?nbsp;
#pragma pack(push) //淇濆瓨瀵歸綈鐘舵?nbsp;
#pragma pack(4)//璁懼畾涓?瀛楄妭瀵歸綈
struct test
{
char m1;
double m4;
int m3;
};
#pragma pack(pop)//鎭㈠瀵歸綈鐘舵?nbsp;
浠ヤ笂緇撴瀯鐨勫ぇ灝忎負(fù)16錛屼笅闈㈠垎鏋愬叾瀛樺偍鎯呭喌錛岄鍏堜負(fù)m1鍒嗛厤絀洪棿錛屽叾鍋忕Щ閲忎負(fù)0錛屾弧瓚蟲(chóng)垜浠嚜宸辮瀹氱殑瀵歸綈鏂瑰紡錛?瀛楄妭瀵歸綈錛夛紝m1鍗犵敤1涓瓧鑺傘傛帴鐫寮濮嬩負(fù) m4鍒嗛厤絀洪棿錛岃繖鏃跺叾鍋忕Щ閲忎負(fù)1錛岄渶瑕佽ˉ瓚?涓瓧鑺傦紝榪欐牱浣垮亸縐婚噺婊¤凍涓簄=4鐨勫嶆暟錛堝洜涓簊izeof(double)澶т簬n錛?m4鍗犵敤8涓瓧鑺傘傛帴鐫涓簃3鍒嗛厤絀洪棿錛岃繖鏃跺叾鍋忕Щ閲忎負(fù)12錛屾弧瓚充負(fù)4鐨勫嶆暟錛宮3鍗犵敤4涓瓧鑺傘傝繖鏃跺凡緇忎負(fù)鎵鏈夋垚鍛樺彉閲忓垎閰嶄簡(jiǎn)絀洪棿錛屽叡鍒嗛厤浜?6涓瓧鑺傦紝婊¤凍涓簄鐨勫嶆暟銆傚鏋滄妸涓婇潰鐨?pragma pack(4)鏀逛負(fù)#pragma pack(16)錛岄偅涔堟垜浠彲浠ュ緱鍒扮粨鏋勭殑澶у皬涓?4銆傦紙璇瘋鑰呰嚜宸卞垎鏋愶級(jí)
2銆?nbsp;sizeof鐢ㄦ硶鎬葷粨
鍦╒C涓紝sizeof鏈夌潃璁稿鐨勭敤娉曪紝鑰屼笖寰堝鏄撳紩璧蜂竴浜涢敊璇備笅闈㈡牴鎹畇izeof鍚庨潰鐨勫弬鏁板sizeof鐨勭敤娉曞仛涓葷粨銆?nbsp;
A錛?nbsp; 鍙傛暟涓烘暟鎹被鍨嬫垨鑰呬負(fù)涓鑸彉閲忋備緥濡俿izeof(int),sizeof(long)絳夌瓑銆傝繖縐嶆儏鍐佃娉ㄦ剰鐨勬槸涓嶅悓緋葷粺緋葷粺鎴栬呬笉鍚岀紪璇戝櫒寰楀埌鐨勭粨鏋滃彲鑳芥槸涓嶅悓鐨勩備緥濡俰nt綾誨瀷鍦?6浣嶇郴緇熶腑鍗?涓瓧鑺傦紝鍦?2浣嶇郴緇熶腑鍗?涓瓧鑺傘?nbsp;
B錛?nbsp; 鍙傛暟涓烘暟緇勬垨鎸囬拡銆備笅闈婦渚嬭鏄?
int a[50]; //sizeof(a)=4*50=200; 姹傛暟緇勬墍鍗犵殑絀洪棿澶у皬
int *a=new int[50];// sizeof(a)=4; a涓轟竴涓寚閽堬紝sizeof(a)鏄眰鎸囬拡
//鐨勫ぇ灝?鍦?2浣嶇郴緇熶腑錛屽綋鐒舵槸鍗?涓瓧鑺傘?nbsp;
C錛?nbsp; 鍙傛暟涓虹粨鏋勬垨綾匯係izeof搴旂敤鍦ㄧ被鍜岀粨鏋勭殑澶勭悊鎯呭喌鏄浉鍚岀殑銆備絾鏈変袱鐐歸渶瑕佹敞鎰忥紝絎竴銆佺粨鏋勬垨鑰呯被涓殑闈?rùn)鎬佹垚鍛樹(shù)笉瀵圭粨鏋勬垨鑰呯被鐨勫ぇ灝忎駭鐢熷獎(jiǎng)鍝嶏紝鍥犱負(fù)闈?rùn)鎬佸彉閲忕殑瀛樺偍浣嶇疆涓庣粨鏋勬垨鑰呯被鐨勫疄渚嬪湴鍧鏃犲叧銆?nbsp;
絎簩銆佹病鏈夋垚鍛樺彉閲忕殑緇撴瀯鎴栫被鐨勫ぇ灝忎負(fù)1錛屽洜涓哄繀欏諱繚璇佺粨鏋勬垨綾葷殑姣忎竴
涓疄渚嬪湪鍐呭瓨?shù)腑閮芥湁鍞竴鐨勫湴鍧銆?nbsp;
涓嬮潰涓句緥璇存槑錛?nbsp;
Class Test{int a;static double c};//sizeof(Test)=4.
Test *s;//sizeof(s)=4,s涓轟竴涓寚閽堛?nbsp;
Class test1{ };//sizeof(test1)=1;
D錛?nbsp; 鍙傛暟涓哄叾浠栥備笅闈婦渚嬭鏄庛?nbsp;
int func(char s[5]);
{
cout<<sizeof(s);//榪欓噷灝嗚緭鍑?錛屾湰鏉涓轟竴涓暟緇勶紝浣嗙敱浜庡仛涓哄嚱
//鏁扮殑鍙傛暟鍦ㄤ紶閫掔殑鏃跺欑郴緇熷鐞嗕負(fù)涓涓寚閽堬紝鎵
//浠izeof(s)瀹為檯涓婁負(fù)姹傛寚閽堢殑澶у皬銆?nbsp;
return 1;
}
sizeof(func("1234"))=4//鍥犱負(fù)func鐨勮繑鍥炵被鍨嬩負(fù)int錛屾墍浠ョ浉褰撲簬
//姹俿izeof(int).
浠ヤ笂涓簊izeof鐨勫熀鏈敤娉曪紝鍦ㄥ疄闄呯殑浣跨敤涓娉ㄦ剰鍒嗘瀽VC鐨勫垎閰嶅彉閲忕殑鍒嗛厤絳栫暐錛岃繖鏍風(fēng)殑璇濆彲浠ラ伩鍏嶄竴浜涢敊璇?nbsp;
--------------------------------------------------------------------------
25.i鏈鍚庣瓑浜庡灝?
int i = 1;
int j = i++;
if((i>j++) && (i++ == j)) i+=j;
絳?
i = 5
--------------------------------------------------------------------------
26.
unsigned short array[]={1,2,3,4,5,6,7};
int i = 3;
*(array + i) = ?
絳?
4
--------------------------------------------------------------------------
27.
class A
{
virtual void func1()錛?br> void func2();
}
Class B: class A
{
void func1(){cout << "fun1 in class B" << endl;}
virtual void func2(){cout << "fun2 in class B" << endl;}
}
A, A涓殑func1鍜孊涓殑func2閮芥槸铏氬嚱鏁?
B, A涓殑func1鍜孊涓殑func2閮戒笉鏄櫄鍑芥暟.
C, A涓殑func2鏄櫄鍑芥暟.錛孊涓殑func1涓嶆槸铏氬嚱鏁?
D, A涓殑func2涓嶆槸铏氬嚱鏁幫紝B涓殑func1鏄櫄鍑芥暟.
絳?
A
--------------------------------------------------------------------------
28.
鏁版嵁搴擄細(xì)鎶藉嚭閮ㄩ棬錛屽鉤鍧囧伐璧勶紝瑕佹眰鎸夐儴闂ㄧ殑瀛楃涓查『搴忔帓搴忥紝涓嶈兘鍚湁"human resource"閮ㄩ棬錛?br>
employee緇撴瀯濡備笅錛歟mployee_id, employee_name, depart_id,depart_name,wage
絳?
select depart_name, avg(wage)
from employee
where depart_name <> 'human resource'
group by depart_name
order by depart_name
--------------------------------------------------------------------------
29.
緇欏畾濡備笅SQL鏁版嵁搴擄細(xì)Test(num INT(4)) 璇風(fēng)敤涓鏉QL璇彞榪斿洖num鐨勬渶灝忓鹼紝浣嗕笉璁鎬嬌鐢ㄧ粺璁″姛鑳斤紝濡侻IN錛孧AX絳?br>
絳?
select top 1 num
from Test
order by num desc
--------------------------------------------------------------------------
30.
杈撳嚭涓嬮潰紼嬪簭緇撴灉銆?nbsp;
#include <iostream.h>
class A
{
public:
virtual void print(void)
{
cout<<"A::print()"<<endl;
}
};
class B:public A
{
public:
virtual void print(void)
{
cout<<"B::print()"<<endl;
};
};
class C:public B
{
public:
virtual void print(void)
{
cout<<"C::print()"<<endl;
}
};
void print(A a)
{
a.print();
}
void main(void)
{
A a, *pa,*pb,*pc;
B b;
C c;
pa=&a;
pb=&b;
pc=&c;
a.print();
b.print();
c.print();
pa->print();
pb->print();
pc->print();
print(a);
print(b);
print(c);
}
A:
A::print()
B::print()
C::print()
A::print()
B::print()
C::print()
A::print()
A::print()
A::print()
--------------------------------------------------------------------------
31.
璇曠紪鍐欏嚱鏁板垽鏂綆楁満鐨勫瓧鑺傚瓨鍌ㄩ『搴忔槸寮搴?little endian)榪樻槸闄嶅簭(bigendian)
絳?
bool IsBigendian()
{
unsigned short usData = 0x1122;
unsigned char *pucData = (unsigned char*)&usData;
return (*pucData == 0x22);
}
--------------------------------------------------------------------------
32.綆榪癈ritical Section鍜孧utex鐨勪笉鍚岀偣
絳?
瀵瑰嚑縐嶅悓姝ュ璞$殑鎬葷粨
1.Critical Section
A.閫熷害蹇?br>B.涓嶈兘鐢ㄤ簬涓嶅悓榪涚▼
C.涓嶈兘榪涜璧勬簮緇熻(姣忔鍙彲浠ユ湁涓涓嚎紼嬪鍏變韓璧勬簮榪涜瀛樺彇)
2.Mutex
A.閫熷害鎱?br>B.鍙敤浜庝笉鍚岃繘紼?br>C.涓嶈兘榪涜璧勬簮緇熻
3.Semaphore
A.閫熷害鎱?br>B.鍙敤浜庝笉鍚岃繘紼?br>C.鍙繘琛岃祫婧愮粺璁?鍙互璁╀竴涓垨瓚呰繃涓涓嚎紼嬪鍏變韓璧勬簮榪涜瀛樺彇)
4.Event
A.閫熷害鎱?br>B.鍙敤浜庝笉鍚岃繘紼?br>C.鍙繘琛岃祫婧愮粺璁?br>
--------------------------------------------------------------------------
33.涓涓暟鎹簱涓湁涓や釜琛?
涓寮犺〃涓篊ustomer錛屽惈瀛楁ID,Name;
涓寮犺〃涓篛rder錛屽惈瀛楁ID,CustomerID錛堣繛鍚慍ustomer涓璉D鐨勫閿級(jí),Revenue錛?br>鍐欏嚭姹傛瘡涓狢ustomer鐨凴evenue鎬誨拰鐨凷QL璇彞銆?br>
寤鴻〃
create table customer
(
ID int primary key,Name char(10)
)
go
create table [order]
(
ID int primary key,CustomerID int foreign key references customer(id) , Revenue float
)
go
--鏌ヨ
select Customer.ID, sum( isnull([Order].Revenue,0) )
from customer full join [order]
on( [order].customerid=customer.id )
group by customer.id
--------------------------------------------------------------------------
34.璇鋒寚鍑轟笅鍒楃▼搴忎腑鐨勯敊璇茍涓斾慨鏀?br>void GetMemory(char *p){
p=(char *)malloc(100);
}
void Test(void){
char *str=NULL;
GetMemory=(str);
strcpy(str,"hello world");
printf(str);
}
A:閿欒--鍙傛暟鐨勫兼敼鍙樺悗錛屼笉浼?xì)浼犲?br>GetMemory騫朵笉鑳戒紶閫掑姩鎬佸唴瀛橈紝Test鍑芥暟涓殑 str涓鐩撮兘鏄?nbsp;NULL銆?br>strcpy(str, "hello world");灝嗕嬌紼嬪簭宕╂簝銆?br>
淇敼濡備笅:
char *GetMemory(){
char *p=(char *)malloc(100);
return p;
}
void Test(void){
char *str=NULL;
str=GetMemory(){
strcpy(str,"hello world");
printf(str);
}
鏂規(guī)硶浜?void GetMemory2(char **p)鍙樹(shù)負(fù)浜岀駭鎸囬拡.
void GetMemory2(char **p, int num)
{
*p = (char *)malloc(sizeof(char) * num);
}
--------------------------------------------------------------------------
35.紼嬪簭鏀歸敊
class mml
{
private:
static unsigned int x;
public:
mml(){ x++; }
mml(static unsigned int &) {x++;}
~mml{x--;}
pulic:
virtual mon() {} = 0;
static unsigned int mmc(){return x;}
......
};
class nnl:public mml
{
private:
static unsigned int y;
public:
nnl(){ x++; }
nnl(static unsigned int &) {x++;}
~nnl{x--;}
public:
virtual mon() {};
static unsigned int nnc(){return y;}
......
};
浠g爜鐗囨柇:
mml* pp = new nnl;
..........
delete pp;
A:
鍩虹被鐨勬瀽鏋勫嚱鏁板簲璇ヤ負(fù)铏氬嚱鏁?br>virtual ~mml{x--;}
--------------------------------------------------------------------------
36.101涓‖甯?00鐪熴?鍋囷紝鐪熷亣鍖哄埆鍦ㄤ簬閲嶉噺銆傝鐢ㄦ棤鐮濈爜澶╁鉤縐頒袱嬈$粰鍑虹湡甯侀噸榪樻槸鍋囧竵閲嶇殑緇撹銆?br>
絳?
101涓厛鍙栧嚭2鍫?
33,33
絎竴嬈$О,濡傛灉涓嶇浉絳?璇存槑鏈変竴鍫嗛噸鎴栬交
閭d箞鎶婇噸鐨勯偅鍫嗘嬁涓嬫潵,鍐嶆斁鍙﹀35涓腑鐨?3
濡傛灉鐩哥瓑,璇存槑鍋囩殑閲?濡傛灉涓嶇浉絳?鏂版斁涓婂幓鐨勮繕鏄噸鐨勮瘽,璇存槑鍋囩殑杞?涓嶅彲鑳芥柊鏀句笂鍘葷殑杞?
絎竴嬈$О,濡傛灉鐩哥瓑鐨勮瘽錛岃繖66涓偗瀹氶兘鏄湡鐨?浠庤繖66涓腑鍙栧嚭35涓潵,涓庡墿涓嬬殑娌$О榪囩殑35涓瘮
涓嬮潰灝變笉鐢ㄨ浜?br>
鏂規(guī)硶浜?
絎?棰樹(shù)篃鍙互鎷緼(50),B(50)姣斾竴涓嬶紝涓鏍風(fēng)殑璇濇嬁鍓╀笅鐨勪竴涓拰鐪熺殑姣斾竴涓嬨?br>濡傛灉涓嶄竴鏍鳳紝灝辨嬁鍏朵腑鐨勪竴鍫嗐傛瘮濡侫(50)鍐嶅垎鎴愪袱鍫?5姣斾竴涓嬶紝涓鏍風(fēng)殑璇濆氨鍦?br>B(50)涓紝涓嶄竴鏍峰氨鍦ˋ(50)涓紝緇撳悎絎竴嬈$殑緇撴灉灝辯煡閬撲簡(jiǎn)銆?br>
--------------------------------------------------------------------------
37.static鍙橀噺鍜宻tatic 鍑芥暟鍚勬湁浠涔堢壒鐐癸紵
絳?
static鍙橀噺錛氬湪紼嬪簭榪愯鏈熷唴涓鐩存湁鏁堬紝濡傛灉瀹氫箟鍦ㄥ嚱鏁板錛屽垯鍦ㄧ紪璇戝崟鍏冨唴鍙錛屽鏋滃湪鍑芥暟鍐咃紝鍦ㄥ湪瀹氫箟鐨刡lock鍐呭彲瑙侊紱
static鍑芥暟錛氬湪緙栬瘧鍗曞厓鍐呭彲瑙侊紱
--------------------------------------------------------------------------
38.鐢– 鍐欎竴涓緭鍏ョ殑鏁存暟,鍊掔潃杈撳嚭鏁存暟鐨勫嚱鏁?瑕佹眰鐢ㄩ掑綊鏂規(guī)硶 ;
絳?
void fun( int a )
{
printf( "%d", a%10 );
a /= 10;
if( a <=0 )return;
fun( a );
}
--------------------------------------------------------------------------
39.鍐欏嚭紼嬪簭緇撴灉:
void Func(char str[100])
{
printf("%d\n", sizeof(str));
}
絳?
4
鍒嗘瀽:
鎸囬拡闀垮害
--------------------------------------------------------------------------
40.int id[sizeof(unsigned long)];
榪欎釜瀵瑰悧錛熶負(fù)浠涔??
絳?
瀵?br>榪欎釜 sizeof鏄紪璇戞椂榪愮畻絎︼紝緙栬瘧鏃跺氨紜畾浜?br>鍙互鐪嬫垚鍜屾満鍣ㄦ湁鍏崇殑甯擱噺銆?br>
鏈枃涓昏鍖呮嫭浜屼釜閮ㄥ垎錛岀涓閮ㄥ垎閲嶇偣浠嬬粛鍦╒C涓紝鎬庝箞鏍烽噰鐢╯izeof鏉ユ眰緇撴瀯鐨勫ぇ灝忥紝浠ュ強(qiáng)瀹規(guī)槗鍑虹幇鐨勯棶棰橈紝騫剁粰鍑?guó)櫑e喅闂鐨勬栆?guī)硶錛岀浜岄儴鍒嗘葷粨鍑篤C涓璼izeof鐨勪富瑕佺敤娉曘?nbsp;
1銆?nbsp;sizeof搴旂敤鍦ㄧ粨鏋勪笂鐨勬儏鍐?nbsp;
璇風(fēng)湅涓嬮潰鐨勭粨鏋勶細(xì)
struct MyStruct
{
double dda1;
char dda;
int type
};
瀵圭粨鏋凪yStruct閲囩敤sizeof浼?xì)鍑虹庮C粈涔堢粨鏋滃憿錛焥izeof(MyStruct)涓哄灝戝憿錛熶篃璁鎬綘浼?xì)杩欐犱h眰錛?nbsp;
sizeof(MyStruct)=sizeof(double)+sizeof(char)+sizeof(int)=13
浣嗘槸褰撳湪VC涓祴璇曚笂闈㈢粨鏋勭殑澶у皬鏃訛紝浣犱細(xì)鍙戠幇sizeof(MyStruct)涓?6銆備綘鐭ラ亾涓轟粈涔堝湪VC涓細(xì)寰楀嚭榪欐牱涓涓粨鏋滃悧錛?nbsp;
鍏跺疄錛岃繖鏄疺C瀵瑰彉閲忓瓨鍌ㄧ殑涓涓壒孌婂鐞嗐備負(fù)浜?jiǎn)鎻愰珮CPU鐨勫瓨鍌ㄩ熷害錛孷C瀵逛竴浜涘彉閲忕殑璧峰鍦板潃鍋氫簡(jiǎn)"瀵歸綈"澶勭悊銆傚湪榛樿鎯呭喌涓嬶紝VC瑙勫畾鍚勬垚鍛樺彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺蹇呴』涓鴻鍙橀噺鐨勭被鍨嬫墍鍗犵敤鐨勫瓧鑺傛暟鐨勫嶆暟銆備笅闈㈠垪鍑哄父鐢ㄧ被鍨嬬殑瀵歸綈鏂瑰紡(vc6.0,32浣嶇郴緇?銆?nbsp;
綾誨瀷
瀵歸綈鏂瑰紡錛堝彉閲忓瓨鏀劇殑璧峰鍦板潃鐩稿浜庣粨鏋勭殑璧峰鍦板潃鐨勫亸縐婚噺錛?nbsp;
Char
鍋忕Щ閲忓繀欏諱負(fù)sizeof(char)鍗?鐨勫嶆暟
int
鍋忕Щ閲忓繀欏諱負(fù)sizeof(int)鍗?鐨勫嶆暟
float
鍋忕Щ閲忓繀欏諱負(fù)sizeof(float)鍗?鐨勫嶆暟
double
鍋忕Щ閲忓繀欏諱負(fù)sizeof(double)鍗?鐨勫嶆暟
Short
鍋忕Щ閲忓繀欏諱負(fù)sizeof(short)鍗?鐨勫嶆暟
鍚勬垚鍛樺彉閲忓湪瀛樻斁鐨勬椂鍊欐牴鎹湪緇撴瀯涓嚭鐜扮殑欏哄簭渚濇鐢寵絀洪棿錛屽悓鏃舵寜鐓т笂闈㈢殑瀵歸綈鏂瑰紡璋冩暣浣嶇疆錛岀┖緙虹殑瀛楄妭VC浼?xì)鑷姩濉厖銆傚悓鏃禫C涓轟簡(jiǎn)紜繚緇撴瀯鐨勫ぇ灝忎負(fù)緇撴瀯鐨勫瓧鑺傝竟鐣屾暟錛堝嵆璇ョ粨鏋勪腑鍗犵敤鏈澶х┖闂寸殑綾誨瀷鎵鍗犵敤鐨勫瓧鑺傛暟錛夌殑鍊?/textarea>