锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鍦–++涓垜浠簲璇ュ皯鐢ㄦ寚閽堬紝澶氱敤寮曠敤錛屽師鍥犺澶у鑷鎼滅儲銆傚湪浼犻掓暟緇勭殑鏃跺欐垜浠渶瑕佹牸澶栨敞鎰忥紝鍏堣鎴戜滑鐪嬩竴涓畝鍗曠殑鑼冧緥銆?/p> 棣栧厛榪欎釜鑼冧緥鏃犳硶緙栬瘧閫氳繃錛?/p>
鍘熷洜灝卞嚭鍦ㄧ被鍨嬫帹鏂笂銆傛牴鎹畾涔夛紝Func2鐨勭被鍨嬪繀欏繪槸T&錛屼篃灝辨槸璇翠紶閫掑疄鍙傜殑鏃跺欙紝涓や釜褰㈠弬蹇呴』鏄浉鍚岀殑錛岃岃繖涓鐐瑰湪妯℃澘緙栫▼涓氨浼氱敱緙栬瘧鍣ㄦ潵璐熻矗鎺ㄦ柇銆?/p>
Func1錛?/p>
璋冪敤Func1(a, b)鍒欐帹鏂殑綾誨瀷鍒嗗埆鏄疐unc1(int*, int*)錛岃皟鐢ㄥ嚱鏁板皢浼氳嚜鍔ㄥ皢鏁扮粍鐨勯鍦板潃鎸囬拡浣滀負瀹炲弬榪涜浼犻掞紝鍥犳綾誨瀷鎺ㄦ柇涓ゅ艦鍙傜浉鍚岋紝緙栬瘧閫氳繃錛?/p>
Func2錛?/p>
璋冪敤Func2(a, b)鍥犱負鎴戜滑甯屾湜鎸夊紩鐢ㄧ殑鏂瑰紡榪涜瀹炲弬浼犻掞紝鍥犳闇瑕侀伒寰繖鏍風殑瑙勫緥錛?/p>
錛圥208錛夊鏋滃艦鍙傛槸鏁扮粍鐨勫紩鐢紝緙栬瘧鍣ㄥ皢涓嶄細灝嗘暟緇勫疄鍙傝漿鍖栦負鎸囬拡錛岃屾槸浼犻掓暟緇勫紩鐢ㄧ殑鏈韓銆傚湪榪欑鎯呭喌涓嬶紝鏁扮粍澶у皬鎴愪負褰㈠弬鍜屽疄鍙傜被鍨嬬殑涓閮ㄥ垎銆?/p>
鎵浠ユ帹鏂被鍨嬪垎鍒槸Func2(int (&)[10], int (&)[12])錛屽洜涓篿nt (&)[10] != int (&)[12]錛屾墍浠ヤ笌T == T鐩告?zhèn)栧Q佽嚜鐒朵篃灝辯紪璇戜笉榪囦簡錛?/p>
Func3錛?/p>
璇ュ嚱鏁版槸Func2鐨勪竴涓潤鎬佽〃紺猴紝閫氳繃涓婇潰鐨勮В閲婂簲璇ュ緢瀹規(guī)槗鐞嗚В榪欎釜浠g爜浜嗐?/p> 51銆乻tatic鎴愬憳鍑芥暟 鍥犱負static鎴愬憳涓嶆槸浠諱綍瀵硅薄鐨勭粍鎴愰儴鍒嗭紝鎵浠tatic鎴愬憳鍑芥暟涓嶈兘琚0鏄庝負const銆傛瘯绔燂紝灝嗘垚鍛樺嚱鏁板0鏄庝負const灝辨槸鎵胯涓嶄細淇敼璇ュ嚱鏁版墍灞炵殑瀵硅薄銆傛渶鍚庯紝static鎴愬憳鍑芥暟涔熶笉鑳借澹版槑涓鴻櫄鍑芥暟銆?/p> 52銆佺壒孌婄殑鏁村瀷const static鎴愬憳錛圥401錛?/p> const static鏁版嵁鎴愬憳鍦ㄧ被鐨勫畾涔変綋涓垵濮嬪寲鏃訛紝璇ユ暟鎹垚鍛樹粛蹇呴』鍦ㄧ被鐨勫畾涔変綋涔嬪榪涜瀹氫箟銆?/p> class Accout{ public: static double rate() { return interestRate;} static void rate(double); //sets a new rate private: static const int period = 30; //interest posted every 30 days double daily_tbl[period]; // ok: period is constant expression } //definition of static member with no initializer; //the initial value is specified inside the class definition const int Accout::period; 浣嗗湪gcc鍜孧S vc++緙栬瘧鍣ㄤ笅浼間箮鍧囦笉闇瑕佸啀嬈″畾涔夛紝涔熷氨鏄璁劇殑“蹇呴』”浜屽瓧鍦ㄦ澶辨晥銆?/p> 53銆佹搷浣滅閲嶈澆錛圥435錛?/p> 涓嬮潰鏄竴浜涙寚瀵煎師鍒欙紝鏈夊姪浜庡喅瀹氬皢鎿嶄綔絎﹁緗負綾繪垚鍛樿繕鏄櫘閫氶潪鎴愬憳鍑芥暟 54銆佸尯鍒搷浣滅鐨勫墠緙鍜屽悗緙褰㈠紡錛圥447錛?/p> 鍚屾椂瀹氫箟鍓嶇紑寮忔搷浣滅鍜屽悗緙寮忔搷浣滅瀛樺湪涓涓棶棰橈細瀹冧滑鐨勫艦鍙傛暟鐩拰綾誨瀷鐩稿悓錛屾櫘閫氶噸杞戒笉鑳藉尯鍒墍瀹氫箟鐨勬槸鍓嶇紑寮忔搷浣滅榪樻槸鍚庣紑寮忔搷浣滅銆?/p> 涓鴻В鍐寵繖涓闂錛屽悗緙寮忔搷浣滅鍑芥暟鎺ュ彈涓涓澶栫殑錛堝嵆錛屾棤鐢ㄧ殑錛塱nt鍨嬪艦鍙傘備嬌鐢ㄥ悗緙鎿嶄綔絎︽椂錛岀紪璇戝櫒鎻愪緵0浣滀負榪欎釜褰㈠弬鐨勫疄鍙傘傚敖綆℃垜浠殑鍓嶇紑寮忔搷浣滅鍑芥暟鍙互浣跨敤榪欎釜棰濆鐨勫艦鍙傦紝浣嗛氬父涓嶅簲璇ヨ繖鏍峰仛銆傞偅涓艦鍙備笉鏄悗緙寮忔搷浣滅鐨勬甯稿伐浣滄墍闇瑕佺殑錛屽畠鐨勫敮涓鐩殑鏄嬌鍚庣紑鍑芥暟涓庡墠緙鍑芥暟鍖哄埆寮鏉ャ?/p> 55銆佹樉寮忚皟鐢ㄥ墠緙寮忔搷浣滅 CheckedPtr parr(ia, ia+size); //ia points to an array of ints parr.operator(0); //call postfix operator++ parr.operator(); //call prefix operator++ 56銆佸嚱鏁板璞★紙P450錛?/p> struct absInt { int operator() (int val){ return val<0 ? –val : val; } }; int i = –42; absInt absObj; //object that defines function call operator unsigned int ui = absObj(i); //calls absInt::operator(int) 灝界absObj鏄竴涓璞¤屼笉鏄嚱鏁幫紝鎴戜滑浠嶇劧鍙互“璋冪敤”璇ュ璞★紝鏁堟灉鏄繍琛岀敱absObj瀵硅薄瀹氫箟鐨勯噸杞借皟鐢ㄦ搷浣滅錛岃鎿嶄綔絎︽帴鍙椾竴涓猧nt鍊煎茍榪斿洖瀹冪殑緇濆鍊箋?/p> 鍑芥暟瀵硅薄緇忓父鐢ㄤ綔閫氱敤綆楁硶鐨勫疄鍙傘傦紙璇﹁P450錛?/p> 57銆佸嚱鏁板璞$殑鍑芥暟閫傞厤鍣紙P453錛?/p> 鏍囧噯搴撴彁渚涗簡涓緇勫嚱鏁伴傞厤鍣紙function adapter錛夛紝鐢ㄤ簬鐗瑰寲鍜屾墿灞曚竴鍏冨拰浜屽厓鍑芥暟瀵硅薄銆傚嚱鏁伴傞厤鍣ㄥ垎涓哄涓嬩袱綾伙細 錛?錛夌粦瀹氬櫒錛坆inder錛夛紝鏄竴縐嶅嚱鏁伴傞厤鍣紝瀹冮氳繃灝嗕竴涓搷浣滄暟緇戝畾鍒扮粰瀹氬艱屽皢浜屽厓鍑芥暟瀵硅薄杞崲涓轟竴鍏冨嚱鏁板璞°傦紙bind1st鍜?a >bind2nd 鏇村錛?/p> 錛?錛夋眰鍙嶅櫒錛坣egator錛夛紝鏄竴縐嶅嚱鏁伴傞厤鍣紝瀹冨皢璋撹瘝鍑芥暟瀵硅薄鐨勭湡鍊兼眰鍙嶃傦紙not1鍜?a target="_blank">not2 鏇村錛?/p> 58銆佽漿鎹㈡搷浣滅錛圥455錛?/p> 杞崲涓轟粈涔堟湁鐢紵錛堣瑙丳454錛?/p> 杞崲鍑芥暟閲囩敤濡備笅閫氱敤褰㈠紡錛?/p> operator type(); 榪欓噷錛宼ype琛ㄧず鍐呯疆綾誨瀷鍚嶃佺被綾誨瀷鍚嶆垨鐢辯被鍨嬪埆鍚嶆墍瀹氫箟鐨勫悕瀛椼傚浠諱綍鍙綔涓哄嚱鏁拌繑鍥炵被鍨嬬殑綾誨瀷錛堥櫎浜唙oid涔嬪錛夐兘鍙互瀹氫箟杞崲鍑芥暟銆備竴鑸岃█錛屼笉鍏佽杞崲涓烘暟緇勬垨鍑芥暟綾誨瀷錛岃漿鎹負鎸囬拡錛堟暟鎹垨鍑芥暟鎸囬拡錛変互鍙婂紩鐢ㄧ被鍨嬫槸鍙互鐨勩?/p> 杞崲鍑芥暟蹇呴』鏄垚鍛樺嚱鏁幫紝涓嶈兘鎸囧畾榪斿洖綾誨瀷錛屽茍涓斿艦鍙傝〃蹇呴』涓虹┖銆?/p> 杞崲鍑芥暟涓鑸笉搴旇鏀瑰彉琚漿鎹㈢殑瀵硅薄銆傚洜姝わ紝杞崲鎿嶄綔絎﹂氬父搴斿畾涔変負const鎴愬憳銆?/p> 59銆佸彧鑳藉簲鐢ㄤ竴涓被綾誨瀷杞崲 綾葷被鍨嬭漿鎹箣鍚庝笉鑳藉啀璺熷彟涓涓被綾誨瀷杞崲銆傚鏋滈渶瑕佸涓被綾誨瀷杞崲錛屽垯浠g爜灝嗗嚭閿欍?/p> 鍋囪鏈塈ntegral=>SmallInt=>int錛屼絾鏄鏋滄湁涓涓嚱鏁癱al(int)錛岄偅涔堝浜嶴mallInt si錛屽彲浠ヤ嬌鐢╟al(si)錛屼絾瀵逛簬Integral intVal;鍒欎笉鑳戒嬌鐢╟al(intVal)銆傝璦鍙厑璁鎬竴嬈$被綾誨瀷杞崲錛屾墍浠ヨ璋冪敤鍑洪敊銆?/p> 60銆乿irtual涓庡叾浠栨垚鍛樺嚱鏁幫紙P479錛?/p> C++涓殑鍑芥暟璋冪敤榛樿涓嶄嬌鐢ㄥ姩鎬佺粦瀹氥傝瑙﹀彂鍔ㄦ佺粦瀹氾紝蹇呴』婊¤凍涓や釜鏉′歡錛氱涓錛屽彧鏈夋寚瀹氫負铏氬嚱鏁扮殑鎴愬憳鍑芥暟鎵嶈兘榪涜鍔ㄦ佺粦瀹氾紝鎴愬憳鍑芥暟榛樿涓洪潪铏氬嚱鏁幫紝闈炶櫄鍑芥暟涓嶈繘琛屽姩鎬佺粦瀹氾紱絎簩錛屽繀欏婚氳繃鍩虹被綾誨瀷鐨勫紩鐢ㄦ垨鎸囬拡榪涜鍑芥暟璋冪敤銆?/p> 鍩虹被綾誨瀷寮曠敤鍜屾寚閽堢殑鍏抽敭鐐瑰湪浜庨潤鎬佺被鍨嬶紙static type錛屽湪緙栬瘧鏃跺彲鐭ョ殑寮曠敤綾誨瀷鎴栨寚閽堢被鍨嬶級鍜屽姩鎬佺被鍨嬶紙dynamic type錛屾寚閽堟垨寮曠敤鎵緇戝畾鐨勫璞$殑綾誨瀷錛岃繖鏄粎鍦ㄨ繍琛屾椂鍙煡鐨勶級鍙兘涓嶅悓銆?/p> 41銆乿ector銆乴ist銆乨eque鐨勬ц兘鍒濈 鐢ㄤ簨瀹炶璇濇渶鏈夎鏈嶅姏錛?/p> 鍙互鐪嬪嚭澶ц嚧鏃墮棿姣斾緥涓?/19/12銆傝櫧鐒朵笉瓚充互浣愯瘉瀹冧滑鐨勬ц兘宸窛錛屼絾vector鐨勫父鐢ㄤ技涔庢湁浜嗘洿鍏呭垎鐨勭悊鐢便?/p>
榪欓噷浣跨敤浜嗕竴涓畝鍗曠殑鏃墮棿鍑芥暟澶ц嚧濡備笅錛?/p> 42銆佸鍣ㄨ嚜澧為暱錛圥286錛?/p>
姣忕瀹炵幇閮借姹傞伒寰互涓嬪師鍒欙細紜繚push_back鎿嶄綔楂樻晥鍦板湪vector涓坊鍔犲厓绱犮備粠鎶鏈笂鏉ヨ錛屽湪鍘熸潵涓虹┖鐨剉ector瀹瑰櫒涓妌嬈¤皟鐢╬ush_back鍑芥暟錛屼粠鑰屽垱寤烘嫢鏈塶涓厓绱犵殑vector瀹瑰櫒錛屽叾鎵ц鏃墮棿姘歌繙涓嶈兘瓚呰繃n鐨勫父閲忓嶃?/p>
43銆佺被瀹氫箟涓負浣曚笉鑳藉叿鏈夎嚜韜殑鏁版嵁鎴愬憳錛圥375錛?/p>
鍥犱負鍙湁褰撶被瀹氫箟浣撳畬鎴愬悗鎵嶈兘瀹氫箟綾伙紝鍥犳綾諱笉鑳藉叿鏈夎嚜韜被鍨嬬殑鏁版嵁鎴愬憳銆傜劧鑰岋紝鍙綾誨悕涓鍑虹幇灝卞彲浠ヨ涓鴻綾誨凡澹版槑銆傚洜姝わ紝綾葷殑鏁版嵁鎴愬憳鍙互鏄寚鍚戣嚜韜被鍨嬬殑鎸囬拡鎴栧紩鐢細 class LinkScreen { Screen window; LinkScreen *next; LinkScreen *prev; }; 44銆佷袱縐嶅紩鐢ㄧ被綾誨瀷鐨勬柟娉曪紙P376錛?/p>
Sales_item item1; //default initialized object of type Sales_item class Sales_item item1; //equivalent definition of item1 涓ょ寮曠敤綾葷被鍨嬬殑鏂規(guī)硶鏄瓑浠風殑銆傜浜岀鏂規(guī)硶鏄粠C緇ф壙鑰屾潵鐨勶紝鍦–++涓粛鐒舵湁鏁堛傜涓縐嶆洿涓虹畝緇冿紝鐢盋++璇█寮曞叆錛屼嬌寰楃被綾誨瀷鏇村鏄撲嬌鐢ㄣ?/p>
45銆佷負浠涔堢被鐨勫畾涔変互鍒嗗彿緇撴潫錛圥376錛?/p>
鍒嗗彿鏄繀欏葷殑錛屽洜涓哄湪綾誨畾涔変箣鍚庡彲浠ユ帴涓涓璞″畾涔夊垪琛ㄣ傚畾涔夊繀欏諱互鍒嗗彿緇撴潫錛?/p>
class Sales_item {/* … */}; class Sales_item {/* … */} accum, trans; 46銆佸艦鍙傝〃鍜屽嚱鏁頒綋澶勪簬綾諱綔鐢ㄥ煙涓紝鍑芥暟榪斿洖綾誨瀷涓嶄竴瀹氬湪綾諱綔鐢ㄥ煙涓?/p>
鍦ㄥ畾涔変簬綾誨閮ㄧ殑鎴愬憳鍑芥暟涓紝褰㈠弬琛ㄥ拰鎴愬憳鍑芥暟浣撻兘鍑虹幇鍦ㄦ垚鍛樺悕涔嬪悗銆傝繖浜涢兘鏄湪綾諱綔鐢ㄥ煙涓畾涔夛紝鎵浠ュ彲浠ヤ笉鐢ㄩ檺瀹氳屽紩鐢ㄥ叾浠栨垚鍛樸傚洜涓哄艦鍙傝〃鏄湪Screen綾諱綔鐢ㄥ煙鍐咃紝鎵浠ヤ笉蹇呯煡鍚嶆垜浠兂瑕佺殑鏄疭creen::index銆?/p>
濡傛灉榪斿洖綾誨瀷浣跨敤鐢辯被瀹氫箟鐨勭被鍨嬶紝鍒欏繀欏諱嬌鐢ㄥ畬鍏ㄩ檺瀹氬悕銆?/p> 47銆佹瀯閫犲嚱鏁板垵濮嬪寲寮忥紙P387錛?/p>
涓庝換鎰忕殑鎴愬憳鍑芥暟涓鏍鳳紝鏋勯犲嚱鏁板彲浠ュ畾涔夊湪綾葷殑鍐呴儴鎴栧閮ㄣ傛瀯閫犲嚱鏁板垵濮嬪寲寮忓彧鍦ㄦ瀯閫犲嚱鏁扮殑瀹氫箟涓屼笉鏄0鏄庝腑鎸囧畾銆?/p>
鏋勯犲嚱鏁板垵濮嬪寲鍒楄〃闅句互鐞嗚В鐨勪竴涓師鍥犲湪浜庯紝鐪佺暐鍒濆鍖栧垪琛ㄥ茍鍦ㄦ瀯閫犲嚱鏁扮殑鍑芥暟浣撳唴瀵規(guī)暟鎹垚鍛樿祴鍊兼槸鍚堟硶鐨勩?/p>
鍦ㄦ瀯閫犲嚱鏁板垵濮嬪寲鍒楄〃涓病鏈夋樉寮忔彁鍙婄殑姣忎釜鎴愬憳錛屼嬌鐢ㄤ笌鍒濆鍖栧彉閲忕浉鍚岀殑瑙勫垯鏉ヨ繘琛屽垵濮嬪寲銆傝繍琛岃綾誨瀷鐨勯粯璁ゆ瀯閫犲嚱鏁幫紝鏉ュ垵濮嬪寲綾葷被鍨嬬殑鏁版嵁鎴愬憳銆傚唴緗垨澶嶅悎綾誨瀷鐨勬垚鍛樼殑鍒濆鍊間緷璧栦簬瀵硅薄鐨勪綔鐢ㄥ煙錛氬湪灞閮ㄤ綔鐢ㄥ煙涓繖浜涙垚鍛樹笉琚垵濮嬪寲錛岃屽湪鍏ㄥ眬浣滅敤鍩熶腑瀹冧滑琚垵濮嬪寲涓?銆?/p>
濡傛灉閭d釜綾繪病鏈夐粯璁ゆ瀯閫犲嚱鏁幫紝鍒欑紪璇戝櫒灝濊瘯浣跨敤榛樿鏋勯犲嚱鏁板皢浼氬け璐ャ傚湪榪欑鎯呭喌涓嬶紝涓轟簡鍒濆鍖栨暟鎹垚鍛橈紝蹇呴』鎻愪緵鍒濆鍖栧紡銆?/p>
瀵逛簬榪欐牱鐨勬垚鍛橈紝鍦ㄦ瀯閫犲嚱鏁板嚱鏁頒綋涓瀹冧滑璧嬪間笉璧蜂綔鐢ㄣ傛病鏈夐粯璁ゆ瀯閫犲嚱鏁扮殑綾葷被鍨嬫垚鍛橈紝浠ュ強const鎴栧紩鐢ㄧ被鍨嬬殑鎴愬憳錛屼笉綆℃槸鍝綾誨瀷錛岄兘蹇呴』鍦ㄦ瀯閫犲嚱鏁板垵濮嬪寲鍒楄〃涓繘琛屽垵濮嬪寲銆?/p>
鍥犱負鍐呯疆綾誨瀷鐨勬垚鍛樹笉榪涜闅愬紡鍒濆鍖栵紝鎵浠ュ榪欎簺鎴愬憳鏄繘琛屽垵濮嬪寲榪樻槸璧嬪間技涔庨兘鏃犲叧绱ц銆傞櫎浜嗕袱涓緥澶栵紝瀵歸潪綾葷被鍨嬬殑鏁版嵁鎴愬憳榪涜璧嬪兼垨浣跨敤鍒濆鍖栧紡鍦ㄧ粨鏋滃拰鎬ц兘涓婇兘鏄瓑浠風殑銆?/p>
48銆佹垚鍛樺垵濮嬪寲鐨勬搴?/p>
鏋勯犲嚱鏁板垵濮嬪寲鍒楄〃浠呮寚瀹氱敤浜庡垵濮嬪寲鎴愬憳鐨勫鹼紝騫朵笉鎸囧畾榪欎簺鍒濆鍖栨墽琛岀殑嬈″簭銆傛垚鍛樿鍒濆鍖栫殑嬈″簭灝辨槸瀹氫箟鎴愬憳鐨勬搴忋?/p>
class X{ int i; int j; public: //run-time error: i is initialized before j X(int val): j(val), i(j) {} } 鍦ㄨ繖縐嶆儏鍐典笅錛屾瀯閫犲嚱鏁板垵濮嬪寲鍒楄〃鐪嬭搗鏉ヤ技涔庢槸鐢╲al鍒濆鍖杍錛岀劧鍚庡啀鐢╦鏉ュ垵濮嬪寲i銆傜劧鑰宨棣栧厛琚垵濮嬪寲銆傝繖涓垵濮嬪寲鍒楄〃鐨勬晥鏋滄槸鐢ㄥ皻鏈垵濮嬪寲鐨刯鍊兼潵鍒濆鍖杋錛?/p>
49銆佷嬌鐢ㄩ粯璁ゆ瀯閫犲嚱鏁幫紙P393錛?/p>
甯哥姱鐨勪竴涓敊璇槸閲囩敤浠ヤ笅鏂瑰紡澹版槑涓涓敤榛樿鏋勯犲嚱鏁板垵濮嬪寲鐨勫璞★細 Sales_item myobj(); Sales_item myobj(); //ok: but defines a function, not an object if(myobj.same_isbn(Primer_3rd_ed)) // error: myobj is a function 姝g‘鐨勬柟寮忓簲璇ユ槸鍘繪帀鐩稿簲鐨勬嫭鍙鳳細 Sales_item myobj; 鎴栬?/p>
Sales_item myobj = Sales_item(); 50銆佹樉寮忔垨闅愬紡鍒濆鍖?/p> 鍥犱負鍏鋒湁浠td::string涓哄艦鍙傜殑鏋勯犲嚱鏁幫紝鍥犳鍦ㄨ皟鐢ㄩ渶瑕丮yClass瀵硅薄鐨剆ame_object鎴愬憳鍑芥暟鏃訛紝浼氳嚜鍔ㄩ殣寮忚皟鐢ㄨ鏋勯犲嚱鏁版瀯寤篗yClass瀵硅薄錛岀敤浜庢搷浣溿備絾鐢熸垚鐨凪yClass瀵硅薄鏄復鏃跺璞★紝鍦╯ame_object鍑芥暟璋冪敤瀹屾垚鍚庨攢姣併傚鏋滀負浜嗛伩鍏嶄駭鐢熼殣寮忚漿鎹㈠彲浠ヤ嬌鐢╡xplicit鍏抽敭瀛楁潵鎶戝埗鐢辨瀯閫犲嚱鏁板畾涔夌殑闅愬紡杞崲錛?/p>
31銆佸姩鎬佺┖闂寸殑閲婃斁錛圥119錛?/p> 鍔ㄦ佺┖闂寸殑閲婃斁浣跨敤delete [] pia;錛堝叾涓璸ia涓烘寚鍚戝姩鎬佸垎閰嶇殑鏁扮粍鐨勭涓涓厓绱犵殑鎸囬拡錛夈傚湪鍏抽敭瀛梔elete鍜屾寚閽堜箣闂寸殑鏂規(guī)嫭鍙峰鏄繀涓嶅彲灝戠殑錛氬畠鍛婅瘔緙栬瘧鍣ㄨ鎸囬拡鎸囧悜鐨勬槸鑷敱瀛樺偍鍖轟腑鐨勬暟緇勶紝鑰屽茍闈炲崟涓璞°?/p> 濡傛灉閬楁紡浜嗙┖鏂規(guī)嫭鍙峰錛岃繖鏄竴涓紪璇戝櫒鏃犳硶鍙戠幇鐨勯敊璇紝灝嗗鑷寸▼搴忓湪榪愯鏃跺嚭閿欍?/p> 浣跨敤std::string鍚庡垯浼氳嚜鍔ㄨ繘琛岄噴鏀撅紝鏃犻渶delete錛?/p> 32銆乧_str榪斿洖鐨勬暟緇勫茍涓嶄繚璇佷竴瀹氭槸鏈夋晥鐨勨︹?/p> c_str榪斿洖鐨勬暟緇勫茍涓嶄繚璇佷竴瀹氭槸鏈夋晥鐨勶紝鎺ヤ笅鏉ュst1鐨勬搷浣滄湁鍙兘浼氭敼鍙榮t1鐨勫鹼紝浣垮垰鎵嶈繑鍥炵殑鏁扮粍澶辨晥銆傚紼嬪簭闇瑕佹寔緇闂鏁版嵁錛屽垯搴旇澶嶅埗c_str鍑芥暟榪斿洖鐨勬暟緇勩?/p>
33銆佹寚鍚戝嚱鏁扮殑鎸囬拡 璇﹁銆?a href="http://m.shnenglu.com/mymsdn/archive/2009/02/01/pointer-to-function.html">鎸囧悜鍑芥暟鐨勬寚閽堢殑涓鐐圭悊瑙?/a>銆?/p>
34銆佸鍣ㄥ垵濮嬪寲 鍦ㄥぇ澶氭暟鐨勭▼搴忎腑錛屼嬌鐢ㄩ粯璁ゆ瀯閫犲嚱鏁拌兘杈懼埌鏈浣寵繍琛屾椂鎬ц兘錛屽茍涓斾嬌瀹瑰櫒鏇村鏄撲嬌鐢ㄣ?/p>
35銆佸鍣ㄥご鏂囦歡 #include <vector> #include <list> #include <deque> //鍙岀闃熷垪鈥渄ouble-ended queue鈥濓紝鍙戦煶涓衡渄eck鈥?/p>
鏍囧噯搴撳畾涔変簡浠ヤ笂涓夌欏哄簭瀹瑰櫒綾誨瀷銆?/p>
36銆佸鍣ㄧ殑瀹瑰櫒 蹇呴』鐢ㄧ┖鏍奸殧寮涓や釜鐩擱偦鐨?gt;絎﹀彿錛屼互紺鴻繖鏄袱涓垎寮鐨勭鍙鳳紝鍚﹀垯錛岀郴緇熶細璁や負>>鏄崟涓鍙鳳紝涓哄彸縐繪搷浣滅錛屽茍瀵艱嚧緙栬瘧鏃墮敊璇?/p> 37銆佽凱浠e櫒鑼冨洿錛圥269錛?/p>
C++瀹氫箟鐨勫鍣ㄧ被鍨嬩腑錛屽彧鏈塿ector鍜宒eque瀹瑰櫒鎻愪緵涓嬮潰涓ょ閲嶈鐨勮繍綆楅泦鍚堬細榪唬鍣ㄧ畻鏈繍綆楋紝浠ュ強浣跨敤闄や簡==鍜?=涔嬪鐨勫叧緋繪搷浣滅鏉ユ瘮杈冧袱涓凱浠e櫒錛?=鍜?=榪欎袱縐嶅叧緋昏繍綆楅傜敤浜庢墍鏈夊鍣級銆?/p>
list瀹瑰櫒鐨勮凱浠e櫒鏃笉鏀寔綆楁湳榪愮畻錛堝噺娉曟垨鍔犳硶錛夛紝涔熶笉鏀寔鍏崇郴榪愮畻錛?lt;=,<,>=,>錛夊畠鍙彁渚涘墠緗拰鍚庣疆鐨勮嚜澧炪佽嚜鍑忎互鍙婄浉鍚岋紙涓嶇瓑錛夎繍綆椼?/p>
38銆佸鍣ㄥ厓绱犻兘鏄壇鏈?/p>
鍦ㄥ鍣ㄤ腑娣誨姞鍏冪礌鏃訛紝緋葷粺鏄皢鍏冪礌鍊煎鍒跺埌瀹瑰櫒閲岀殑銆傜被浼煎湴錛屼嬌鐢ㄤ竴孌靛厓绱犲垵濮嬪寲鏂板鍣ㄦ椂錛屾柊瀹瑰櫒瀛樻斁鐨勬槸鍘熷鍏冪礌鐨勫壇鏈傝澶嶅埗鐨勫師濮嬪間笌鏂板鍣ㄤ腑鐨勫厓绱犲悇涓嶇浉鍏籌紝姝ゅ悗瀹瑰櫒鍐呭厓绱犲煎彂鐢熷彉鍖栨椂錛岃澶嶅埗鐨勫師鍊間笉浼氬彈鍒板獎鍝嶏紝鍙嶄箣浜︾劧銆?/p>
39銆佷笅鏍囨搷浣滃拰.at(n)鐨勫尯鍒?/p>
vector<string> svec; //empty vector; cout << svec[0]; //run-time error:There are no elements in svec! cout << svec.at(0); //throws out_of_range exception 40銆佸鍣ㄧ殑璧嬪鹼紙P283錛?/p>
assign鎿嶄綔棣栧厛鍒犻櫎瀹瑰櫒涓墍鏈夌殑鍏冪礌錛岀劧鍚庡皢鍏跺弬鏁版墍鎸囧畾鐨勬柊鍏冪礌鎻掑叆鍒拌瀹瑰櫒涓備笌澶嶅埗瀹瑰櫒鍏冪礌鐨勬瀯閫犲嚱鏁頒竴鏍鳳紝濡傛灉涓や釜瀹瑰櫒綾誨瀷鐩稿悓錛屽叾鍏冪礌綾誨瀷涔熺浉鍚岋紝灝卞彲浠ヤ嬌鐢ㄨ祴鍊兼搷浣滅錛?錛夊皢涓涓鍣ㄨ祴鍊肩粰鍙︿竴涓鍣ㄣ傚鏋滃湪涓嶅悓錛堟垨鐩稿悓錛夌被鍨嬬殑瀹瑰櫒鍐咃紝鍏冪礌綾誨瀷涓嶇浉鍚屼絾鏄浉浜掑吋瀹癸紝鍒欏叾璧嬪艱繍綆楀繀欏諱嬌鐢╝ssign鍑芥暟銆備緥濡傦紝鍙氳繃assign鎿嶄綔瀹炵幇灝唙ector瀹瑰櫒涓竴孌礳har*綾誨瀷鐨勫厓绱犺祴緇檚tring綾誨瀷鐨刲ist瀹瑰櫒銆?/p>
鐢變簬assign鎿嶄綔棣栧厛鍒犻櫎瀹瑰櫒涓師鏉ュ瓨鍌ㄧ殑鎵鏈夊厓绱狅紝鍥犳錛屼紶閫掔粰assign鍑芥暟鐨勮凱浠e櫒涓嶈兘鎸囧悜璋冪敤璇ュ嚱鏁扮殑瀹瑰櫒鍐呯殑鍏冪礌銆?/p> 21銆乿ector鐨勫姩鎬佸闀夸紭浜庨鍏堝垎閰嶅唴瀛樸?/p> 浣跨敤vector鐨勬椂鍊欐渶濂藉姩鎬佸湴娣誨姞鍏冪礌銆傚畠涓嶅悓浜嶤鍜孞ava鎴栧叾浠栬璦鐨勬暟鎹被鍨嬶紝涓轟簡杈懼埌榪炵畫鎬э紝鏇存湁鏁堢殑鏂規(guī)硶鏄厛鍒濆鍖栦竴涓┖vector瀵硅薄錛岀劧鍚庡啀鍔ㄦ佹坊鍔犲厓绱狅紝鑰屼笉鏄鍏堝垎閰嶅唴瀛樸?/p> 22銆乿ector鍊煎垵濮嬪寲 鍐呯疆->0 鏈夐粯璁ゆ瀯閫?>璋冪敤榛樿鏋勯?/p> 鏃犻粯璁ゆ瀯閫狅紝鏈夊叾浠栨瀯閫?>紼嬪簭鍛樻墜鍔ㄦ彁渚涘垵濮嬪?/p> 鏃犻粯璁ゆ瀯閫狅紝涔熸棤鍏朵粬鏋勯?>鏍囧噯搴撲駭鐢熶竴涓甫鍒濆肩殑瀵硅薄 23銆佹暟緇勪笅鏍囩殑綾誨瀷 C++涓紝鏁扮粍涓嬫爣鐨勬紜被鍨嬫槸size_t鑰屼笉鏄痠nt錛宻ize_t鏄竴涓笌鏈哄櫒鐩稿叧鐨剈nsigned綾誨瀷銆?/p> 24銆佸湪澹版槑鎸囬拡鐨勬椂鍊欙紝鍙互鐢ㄧ┖鏍煎皢絎﹀彿*涓庡叾鍚庣殑鏍囪瘑絎﹀垎闅斿紑鏉ワ紝string *ps涓巗tring* ps閮芥槸鍙互鐨勶紝浣嗗悗鑰呭鏄撲駭鐢熻瑙o紝濡傦細 string* ps1,ps2; //ps1鏄寚閽堬紝鑰宲s2鏄竴涓猻tring瀵硅薄 涔熷氨鏄錛屼漢浠彲鑳借鎶妔tring鍜宻tring*褰撲綔涓や釜綾誨瀷錛屾垨鑰呰string*琚綋浣滀竴縐嶆柊綾誨瀷鏉ョ湅寰咃紝浣嗚繖鏄敊鐨?/u>錛?/p> 25銆佷竴涓湁鏁堢殑鎸囬拡蹇呯劧鏄互涓嬩笁縐嶇姸鎬佷箣涓錛?/p> 鍏朵腑int *pi=0;涓巌nt *pi;鏄笉鍚岀殑銆傚墠鑰呮槸鍒濆鍖栨寚閽堟寚鍚?鍦板潃鐨勫璞★紙鍗充負NULL錛夛紙pi initialized to address to no object錛夛紝鍚庤呭嵈鏄湭鍒濆鍖栫殑錛坥k, but dangerous, pi is uninitialized錛夈?/p> 緙栬瘧鍣ㄥ彲浠ユ嫻嬪嚭0鍊肩殑鎸囬拡錛岀▼搴忓彲鍒ゆ柇璇ユ寚閽堝茍鏈寚鍚戜竴涓璞★紝鑰屾湭鍒濆鍖栫殑鎸囬拡鐨勪嬌鐢ㄦ爣鍑嗗茍鏈畾涔夛紝瀵瑰ぇ澶氭暟緙栬瘧鍣ㄦ潵璇達紝濡傛灉浣跨敤鏈垵濮嬪寲鐨勬寚閽堜細灝嗘寚閽堜腑瀛樻斁鐨勪笉紜畾鍊艱涓哄湴鍧錛岀劧鍚庢搷綰佃鍐呭瓨鍦板潃涓瓨鏀劇殑浣嶅唴瀹癸紝浣跨敤鏈垵濮嬪寲鐨勬寚閽堢浉褰撲簬鎿嶇旱榪欎釜涓嶇‘瀹氱殑鍦板潃涓瓨鍌ㄧ殑鍩虹鏁版嵁錛屽洜姝ゅ鏈垵濮嬪寲鐨勬寚閽堣繘琛岃В寮曠敤鏃訛紝閫氬父浼氬鑷寸▼搴忓穿婧冦?/p> 26銆乿oid*鎸囬拡 void*鎸囬拡鍙敮鎸佸嚑縐嶆湁闄愮殑鎿嶄綔錛?/p> 涓嶅厑璁鎬嬌鐢╲oid*鎸囬拡鎿嶇旱瀹冩墍鎸囧悜鐨勫璞°?/p> 27銆佹寚閽堝拰寮曠敤鐨勬瘮杈冿紙P105錛?/p> 铏界劧浣跨敤寮曠敤錛坮eference錛夊拰鎸囬拡閮藉彲闂存帴璁塊棶鍙︿竴涓鹼紝浣嗗畠浠箣闂存湁涓や釜閲嶈鍖哄埆銆傜涓涓尯鍒湪浜庡紩鐢ㄦ繪槸鎸囧悜鏌愪釜瀵硅薄錛氬畾涔夊紩鐢ㄦ椂娌℃湁鍒濆鍖栨槸閿欒鐨勩傜浜屼釜閲嶈鍖哄埆鍒欐槸璧嬪艱涓虹殑宸紓錛氱粰寮曠敤璧嬪間慨鏀圭殑鏄寮曠敤鎵鍏寵仈鐨勫璞$殑鍊鹼紝鑰屽茍涓嶆槸浣垮紩鐢ㄤ笌鍙︿竴涓璞″叧鑱斻傚紩鐢ㄤ竴緇忓垵濮嬪寲錛屽氨濮嬬粓鎸囧悜鍚屼竴涓壒瀹氬璞★紙榪欏氨鏄負浠涔堝紩鐢ㄥ繀欏誨湪瀹氫箟鏃跺垵濮嬪寲鐨勫師鍥狅級銆?/p> 28銆佹寚閽堜笌typedef錛圥112錛?/p> const鏀懼湪綾誨瀷鍓嶅拰鏀懼湪綾誨瀷鍚庨兘鍙互琛ㄧず鍚屾牱鐨勬剰鎬濓細 s1鍜宻2鍧囪〃紺哄父閲忓瓧絎︿覆瀵硅薄銆?/p>
浣嗗洜姝ゅ氨瀵艱嚧浜嗕笅闈㈢殑鍙ュ瓙鍙兘浜х敓璇В錛?/p> 瀹規(guī)槗閿欐妸typedef褰撴垚鏂囨湰鎵╁睍鑰屼駭鐢熶笅闈㈢殑鐞嗚В錛?/p> 搴旇浠庡0鏄庣殑鍙ュ瓙鐪嬶紝涔熷氨鏄鍙湅const pstring cstr;錛屽湪榪欓噷pstring鏄竴縐嶆寚閽堢被鍨嬶紝const淇グ鐨勬槸榪欎釜綾誨瀷錛屽洜姝ゆ紜殑鐞嗚В搴旇鏄細 鑰宑onst pstring cstr;鍏跺疄鍙互琛ㄧず涓簆string const cstr;錛岃繖鏍風殑鍐欐硶鍒欎笉瀹規(guī)槗浜х敓璇В銆備粠鍙沖悜宸﹂槄璇葷殑鎰忔濆氨鏄細cstr鏄痗onst pstring綾誨瀷錛屽嵆鎸囧悜string瀵硅薄鐨刢onst鎸囬拡銆?/p>
29銆佸垱寤哄姩鎬佹暟緇勶紙娉ㄦ剰鐐硅浠g爜娉ㄩ噴錛?/p> 浣嗘槸涓嬮潰鐨勭粨鏋滃嵈涓庢蹇典笂鐨勪笉鍚岋細 鐪嬫潵涓嶅悓鐨勭紪璇戝櫒瀵規(guī)鐨勫畾涔夎繕鏄湁鎵涓嶅悓錛屾敞鎰忕湅*piArray2鐨勫鹼紝鎸夌収璇存槑搴旇鏄垵濮嬪寲涓?錛屼絾榪欓噷鍗翠粛鐒惰〃鐜板嚭涓?piArray1涓鏍風殑鍊鹼紝璇存槑騫舵病鏈夊彂鐢熷垵濮嬪寲銆?/p>
瀵逛簬鍔ㄦ佸垎閰嶇殑鏁扮粍錛屽叾鍏冪礌鍙兘鍒濆鍖栦負鍏冪礌綾誨瀷鐨勯粯璁ゅ鹼紝鑰屼笉鑳藉儚鏁扮粍鍙橀噺涓鏍鳳紝鐢ㄥ垵濮嬪寲鍒楄〃涓烘暟緇勫厓绱犳彁渚涘悇涓嶇浉鍚岀殑鍒濆箋?/p>
30銆乧onst瀵硅薄鐨勫姩鎬佹暟緇?/p> 涓婇潰鐨勭ず渚嬬殑娉ㄩ噴鏉ヨ嚜涔︿腑錛屼絾鍦╒C++緙栬瘧鍣ㄥ拰G++緙栬瘧鍣ㄤ笅鍗翠笉鍚岋紝鍏蜂綋琛ㄧ幇涓猴細 鐪嬫潵涓や釜緙栬瘧鍣ㄥ榪欎竴闂鐨勭湅娉曚笉澶竴鑷淬?/p> 11銆佹灇涓?/p> 杈撳嚭錛?/p> 12銆佺被錛屾垚鍛樺彉閲忓垵濮嬪寲 瀹氫箟鍙橀噺鍜屽畾涔夋暟鎹垚鍛樺瓨鍦ㄧ潃闈炲父閲嶈鐨勫尯鍒細涓鑸笉鑳芥妸綾繪垚鍛樼殑鍒濆鍖栦綔涓哄叾瀹氫箟鐨勪竴閮ㄥ垎銆傚綋瀹氫箟鏁版嵁鎴愬憳鏃訛紝鍙兘鎸囧畾璇ユ暟鎹垚鍛樼殑鍚嶅瓧鍜岀被鍨嬨傜被涓嶆槸鍦ㄧ被瀹氫箟閲屽畾涔夋暟鎹垚鍛樻椂鍒濆鍖栨暟鎹垚鍛橈紝鑰屾槸閫氳繃鎴愪負鏋勯犲嚱鏁扮殑鐗規(guī)畩鎴愬憳鍑芥暟鎺у埗鍒濆鍖栥?/p> 13銆乻truct鍏抽敭瀛?/p>
C++鏀寔鍙︿竴涓叧閿瓧struct錛屽畠涔熷彲浠ュ畾涔夌被綾誨瀷銆俿truct鍏抽敭瀛楁槸浠嶤璇█涓戶鎵胯繃鏉ョ殑銆?/p>
濡傛灉浣跨敤class鍏抽敭瀛楁潵瀹氫箟綾伙紝閭d箞瀹氫箟鍦ㄧ涓涓闂爣鍙峰墠鐨勪換浣曟垚鍛橀兘闅愬紡鎸囧畾涓簆rivate錛涘鏋滀嬌鐢╯truct鍏抽敭瀛楋紝閭d箞榪欎簺鎴愬憳閮芥槸public錛岄櫎闈炴湁鍏朵粬鐗規(guī)畩鐨勫0鏄庯紝濡傛坊鍔犱簡private鎵嶄負private錛屽惁鍒欓兘鏄痯ublic錛屽洜姝ゆ病蹇呰娣誨姞public鍏抽敭瀛椼?/p>
鐢╟lass鍜宻truct鍏抽敭瀛楀畾涔夌被鐨勫敮涓宸埆鍦ㄤ簬榛樿璁塊棶綰у埆錛氶粯璁ゆ儏鍐典笅錛宻truct鐨勬垚鍛樹負public錛岃宑lass鐨勬垚鍛樹負private銆?/p>
14銆侀緙栬瘧澶存枃浠?/p>
涓銆?u>浠涔堟槸棰勭紪璇戝ご鏂囦歡? VC++紼嬪簭涓鑸寘鍚殑澶存枃浠墮兘姣旇緝澶嶆潅錛屽鏋滄瘡嬈¢兘閫愯鍒嗘瀽鍙兘浼氳姳寰堝鏃墮棿錛屾墍浠C++榛樿璁劇疆鏄涓嬈$紪璇戞椂鍒嗘瀽鎵鏈夊ご鏂囦歡錛岀敓鎴?pch鏂囦歡錛岃繖涓枃浠跺緢澶э紝浣嗕互鍚庢瘡嬈$紪璇戞椂灝卞彲浠ヨ妭鐪佸緢澶氭椂闂淬傚鏋滃垹闄や簡榪欎釜鏂囦歡錛屼笅嬈$紪璇戞椂VC++浼氳嚜鍔ㄧ敓鎴愬畠銆?/p>
浜屻?u>浠涔堟椂鍊欎嬌鐢ㄩ緙栬瘧澶? 15 銆佸湪澶存枃浠朵腑蹇呴』鎬繪槸浣跨敤瀹屽叏闄愬畾鐨勬爣鍑嗗簱鍚嶅瓧銆?/p>
鍥犱負棰勫鐞嗗櫒浼氬皢澶存枃浠跺鍒跺埌浣跨敤瀹冪殑浠諱綍鍦版柟錛屼袱縐嶅彲鑳斤紝涓縐嶆槸濡傛灉鍦ㄥご鏂囦歡涓嬌鐢╱sing錛屼細浣跨浉鍏充唬鐮佷笉璁烘槸鍚﹂渶瑕佽using閮藉繀灝嗘斁緗竴涓猽sing錛屽彟涓縐嶆槸錛屽亣璁炬湁鍙︿竴涓簱鍙兘涔熷寘鍚簡鐩稿簲鐨勬柟娉曞鏈夋柟娉晄td::cout浠ュ強my::cout錛屽鏋滀嬌鐢ㄤ簡using錛屾湁鍙兘瀵艱嚧琚紩鍏ョ殑紼嬪簭鍋忕鍘熸湰鐨勪嬌鐢ㄦ剰鍥撅紝鎴栬呭鑷寸紪璇戦敊璇?/p>
16銆佸瓧絎︿覆瀛楅潰鍊煎拰鏍囧噯搴搒tring涓嶆槸鍚屼竴縐嶇被鍨?/p>
鍥犱負鍘嗗彶鍘熷洜浠ュ強涓轟簡涓嶤璇█鍏煎錛屽瓧絎︿覆瀛楅潰鍊間笌鏍囧噯搴搒tring綾誨瀷涓嶆槸鍚屼竴縐嶇被鍨嬨傝繖涓鐐瑰緢瀹規(guī)槗寮曡搗娣蜂貢錛岀紪紼嬫椂涓瀹氳娉ㄦ剰鍖哄垎瀛楃涓插瓧闈㈠煎拰string鏁版嵁綾誨瀷鐨勪嬌鐢紝榪欏緢閲嶈銆?/p>
17銆乬etline鍑芥暟杈撳叆鐨勬椂鍊欎涪寮冩湯灝劇殑鎹㈣絎︼紝騫跺皢鏁磋榪斿洖錛岃屼笖涓嶄涪寮冪涓涓崲琛岀錛屼篃灝辨槸鍗充究浣犱竴寮濮嬪氨杈撳叆浜嗘崲琛岀錛屽畠浠嶇劧浼氳繑鍥烇紝鍙笉榪囪繑鍥炵殑鏄竴涓┖瀛楃涓茶屽凡銆?/p>
緙栧啓紼嬪簭瀹炵幇浠庢爣鍑嗚緭鍏ユ瘡嬈¤鍙栦竴琛屾枃鏈傜劧鍚庢敼鍐欑▼搴忥紝姣忔璇誨叆涓涓崟璇? 鍏朵腑WriteLine鍑芥暟錛?/p> 18銆乻td::string瀵硅薄鐨勫姞娉?/p>
濡傛灉涓涓插瓧絎︿覆鍜宻tring瀵硅薄娣峰悎鐩稿姞錛屽垯瑕佹眰+鎿嶄綔絎﹀乏鍙蟲搷浣滄暟蹇呴』鑷沖皯鏈変竴涓槸string綾誨瀷鐨勩?/p>
鎺ㄨ錛氫竴涓插瓧絎︿覆鍜宻tring瀵硅薄娣峰悎鐩稿姞錛屽墠涓や釜鎿嶄綔鏁頒腑鑷沖皯鏈変竴涓槸string瀵硅薄銆?/p> 19銆丆鏍囧噯搴撳ご鏂囦歡鍜孋++鐗堟湰 C++鏍囧噯搴撲篃鍖呮嫭C鏍囧噯搴擄紝鍛藉悕涓婂垯鍦–鏍囧噯搴撶殑鍚嶅瓧鍓嶅姞涓涓猚騫剁渷鍘誨悗緙.h錛屾瘮濡侰鏍囧噯搴撲腑鐨刢type.h錛屽湪C++涓氨鏈夌浉搴旂殑鏍囧噯搴揷ctype錛堟敞鎰忔病鏈?h錛夈侰++鍜孋鏍囧噯搴撴枃浠剁殑鍐呭鏄竴鏍風殑錛屽彧鏄噰鐢ㄤ簡鏇撮傚悎C++鐨勫艦寮忋傝屼笖閫氬父cname澶存枃浠朵腑瀹氫箟鐨勫悕瀛楅兘瀹氫箟鍦ㄥ懡鍚嶇┖闂磗td鍐咃紝鑰?h鐗堟湰鐨勫悕瀛楀嵈涓嶆槸榪欐牱銆?/p>
20銆佸叧浜庝腑鏂囩紪鐮佺殑鐩稿叧闂 鎴戜滑鐭ラ亾澶ч儴鍒嗙殑緙栬瘧鍣ㄤ互鍙婅В鍐蟲柟妗堥兘鐢卞鍥戒漢鍙戞槑鍒涢狅紝鐗瑰埆鏄編鍥戒漢銆傚洜姝ゅ緢澶氱▼搴忛粯璁や笉鏀寔涓枃銆傝櫧鐒墮殢鐫Unicode鐨勬櫘鍙婅繖閮ㄥ垎闂寰楀埌浜嗗緢澶х殑鏀瑰杽錛堟瘮濡侰#灝卞彲浠ュ畬緹庡湴鏀寔涓枃錛夛紝浣嗘槸綾諱技C++榪欐牱鐨勮璦錛屼粛鐒墮潰涓寸潃涓枃緙栫爜鐨勯棶棰樸傚叧浜庣紪鐮侊紝鏈変竴綃囧煎緱鎺ㄨ崘鐨勬枃绔狅細鍦板潃1錛?a target="_blank" >澶囩敤鍦板潃錛?a target="_blank" >涓嬭澆鍚庢墦鍗?/a>錛坉ocx錛?0.7KB錛?a target="_blank" >鏌ユ壘鏇村 鏍囪瘑絎︿笉鑳藉寘鍚袱涓繛緇殑涓嬪垝綰匡紝涔熶笉鑳戒互涓嬪垝綰垮紑澶村悗闈㈢揣璺熶竴涓ぇ鍐欏瓧姣嶃傛湁浜涙爣璇嗙錛堝湪鍑芥暟澶栧畾涔夌殑鏍囪瘑絎︼級涓嶈兘浠ヤ笅鍒掔嚎寮澶淬?/p>
浣嗘槸鍦℅++緙栬瘧鍣ㄥ拰VC緙栬瘧鍣ㄤ笅錛屼簩鑰呭潎鍙紜紪璇戯紒 2銆佽法騫沖彴緙栬瘧紼嬪簭錛?/p>
榪欓噷涓嶆槸瑕佽瑙e浣曡法騫沖彴緙栬瘧紼嬪簭錛屼篃涓嶆槸鍛婅瘔浣犲浣曟洿濂藉湴緙栧啓閫氱敤騫沖彴鐨勭▼搴忚鍒欙紝閭e彲鑳芥秹鍙婂埌寰堝鐨勫畯瀹氫箟浠ュ強紜歡鐩稿叧鐗規(guī)с傝繖閲屼粎涓轟嬌鐢ㄧず渚嬩唬鐮佹彁渚涗竴縐嶇簿綆鐨勬柟寮忋?/p>
鐢‥clipse+MinGW鐨勬柟寮忛粯璁や細寰堢簿綆錛屾墍浠ユ妸瀹冨綋浣滀竴縐嶇洰鏍囷紒 鐢╒isual Studio 2008鍒涘緩鐨勭▼搴忎細璁╀綘寮曞叆棰勭紪璇戝ごstdafx.h錛堣繖閫氬父鍙戠敓鍦ㄤ嬌鐢╒isual Studio鍒涘緩Win32鎺у埗鍙板簲鐢ㄧ▼搴忥紝騫剁洿鎺ョ偣鍑?#8220;瀹屾垚”鍚庯級錛岃繖灝嗗鑷翠綘鏃犳硶灝嗗湪Eclipse涓婄紪鍐欑殑紼嬪簭鐩存帴榪愯鍦╒isual Studio涓娿傝繖鏃朵綘搴旇閫氳繃淇敼欏圭洰灞炴ф潵鑾峰緱榪欑綺劇畝鐨勬柟寮忥細錛堥夋嫨欏圭洰錛屽彸閿睘鎬э紝閫夋嫨閰嶇疆灞炴?>C/C++->棰勭紪璇戝ご->鍒涘緩/浣跨敤棰勭紪璇戝ご錛岄夋嫨“涓嶄嬌鐢ㄩ緙栬瘧澶?#8221;->“紜畾”鍚庡啀嬈$紪璇戝嵆鍙紒錛?/p>
3銆佸彉閲忓懡鍚嶄範棰?/p>
4銆佸湪C++涓紝“鍒濆鍖栦笉鏄祴鍊?#8221; 鍒濆鍖栨寚鍒涘緩鍙橀噺騫剁粰瀹冭祴鍒濆鍊鹼紝鑰岃祴鍊煎垯鏄摝闄ゅ璞$殑褰撳墠鍊煎茍鐢ㄦ柊鍊間唬鏇褲?/p>
鐩存帴鍒濆鍖栬娉曟洿鐏墊椿錛屾晥鐜囨洿楂橈紒 瀵瑰唴緗被鍨嬫潵璇達紝澶嶅埗鍒濆鍖栧拰鐩存帴鍒濆鍖栧嚑涔庢病鏈夊樊鍒?/p>
瀵圭被綾誨瀷鏉ヨ錛屾湁浜涘垵濮嬪寲浠呰兘鐢ㄧ洿鎺ュ垵濮嬪寲瀹屾垚銆傝鎯崇悊瑙e叾涓紭鐢憋紝闇瑕佸垵姝ヤ簡瑙g被鏄浣曟帶鍒跺垵濮嬪寲鐨勩?/p>
渚嬪錛?/p>
涔熷彲浠ラ氳繃涓涓鏁板櫒鍜屼竴涓瓧絎﹀垵濮嬪寲string瀵硅薄銆傝繖鏍峰垱寤虹殑瀵硅薄鍖呭惈閲嶅澶氭鐨勬寚瀹氬瓧絎︼紝閲嶅嬈℃暟鐢辮鏁板櫒鎸囧畾錛?/p>
std::string all_nines(10, ‘9’); //all_nines = “9999999999”; 鏈緥涓紝鍒濆鍖朼ll_nines鐨勫敮涓鏂規(guī)硶鏄洿鎺ュ垵濮嬪寲銆傛湁澶氫釜鍒濆鍖栧紡鏃朵笉鑳戒嬌鐢ㄥ鍒跺垵濮嬪寲銆傦紙V娉細榪欓噷鐨勫垵濮嬪寲寮忓嵆涓烘瀯閫犲嚱鏁扮殑澶氫釜閲嶈澆錛涜繖閲屾墍璋撶殑“涓嶈兘浣跨敤”搴旇鏄?#8220;鍔熻兘鏈夋墍涓嶅強”鐨勬剰鎬濓紒錛?/p>
5銆佸彉閲忓垵濮嬪寲瑙勫垯 浣跨敤鏈垵濮嬪寲鐨勫彉閲忕粡甯稿鑷撮敊璇紝鑰屼笖鍗佸垎闅愯斀銆傞棶棰樺嚭鍦ㄦ湭鍒濆鍖栫殑鍙橀噺浜嬪疄涓婇兘鏈変竴涓箋傜紪璇戝櫒鎶婅鍙橀噺鏀懼埌鍐呭瓨涓殑鏌愪釜浣嶇疆錛岃屾妸榪欎釜浣嶇疆鐨勬棤璁哄摢縐嶄綅妯″紡閮藉綋鎴愭槸鍙橀噺鍒濆鐨勭姸鎬併傚綋琚В閲婃垚鏁村瀷鍊兼椂錛屼換浣曚綅妯″紡閮芥槸鍚堟硶鐨勫尖斺旇櫧鐒惰繖涓間笉鍙兘鏄▼搴忓憳鎯寵鐨勩傚洜涓鴻繖涓煎悎娉曪紝鎵浠ヤ嬌鐢ㄥ畠涔熶笉鍙兘瀵艱嚧紼嬪簭宕╂簝銆傚彲鑳界殑緇撴灉鏄鑷寸▼搴忛敊璇墽琛屽拰/鎴栭敊璇綆椼?/p>
6銆佸0鏄庡拰瀹氫箟 涓轟簡鑳借澶氫釜鏂囦歡璁塊棶鐩稿悓鐨勫彉閲忥紝C++鍖哄垎浜嗗0鏄庡拰瀹氫箟銆傜畝鍗曞湴璇村氨鏄彲浠ョ敤extern鍏抽敭瀛楁潵澹版槑錛屼換浣曟湁鍒嗛厤鍐呭瓨琛屼負鐨勫0鏄庨兘鏄畾涔夈傚畾涔変篃鏄0鏄庛傚0鏄庯細鏍囨槑鍙橀噺鐨勭被鍨嬪拰鍚嶅瓧錛涘畾涔夛細涓哄彉閲忓垎閰嶅瓨鍌ㄧ┖闂達紝榪樺彲浠ヤ負鍙橀噺鎸囧畾鍒濆鍊箋?/p>
涓句緥璇存槑錛?/p>
7銆佸彉閲忕殑闅愯棌錛?/p>
鎻愮ず錛氬湪Visual Studio 2008涓嬌鐢╯td::string瀹氫箟涓涓彉閲忥紝鍐嶉氳繃std::cout灝嗗叾杈撳嚭錛屽皢浼氬緱鍒?#8220;error C2679: 浜岃繘鍒?#8220;<<”: 娌℃湁鎵懼埌鎺ュ彈“std::string”綾誨瀷鐨勫彸鎿嶄綔鏁扮殑榪愮畻絎?鎴栨病鏈夊彲鎺ュ彈鐨勮漿鎹?”閿欒淇℃伅錛岃繖鏃惰媯鏌ュご鏂囦歡涓槸鍚﹀寘鍚?include <string>銆傝屽湪Eclipse涓垯涓嶇敤濡傛璁劇疆錛堝叿浣撶湅緙栬瘧鍣ㄧ増鏈級銆傝繖涓庢爣鍑嗗簱瀹炵幇鐨勫叿浣撶粏鑺傛湁鍏籌紝鍦∕SVC涓紝瀹冨湪鏂囦歡Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\string涓瀹炵幇錛屽湪GNU涓紝瀹冨湪base_string.h涓瀹炵幇銆傚湪浣跨敤std::string鏃訛紝鎬繪槸鍖呭惈#include <string>鏄竴涓ソ涔犳儻錛?/p>
8銆乧onst瀵硅薄榛樿涓烘枃浠剁殑灞閮ㄥ彉閲?/p>
涓鑸0鏄庡彉閲忓悗鍙互鍦ㄥ叾瀹冩枃浠朵腑閫氳繃extern鍏抽敭瀛楀0鏄庡茍浣跨敤璇ュ彉閲忥細 浣嗘槸濡傛灉鏄痗onst鍒欐棤娉曡闂傚彲浠ラ氳繃鏄懼紡鎸囧畾extern鍏抽敭瀛椾嬌鍏舵垚涓哄叏灞鍙闂璞★細 娉ㄨВ錛氶潪const鍙橀噺榛樿涓篹xtern銆傝浣縞onst鍙橀噺鑳藉鍦ㄥ叾浠栫殑鏂囦歡涓闂紝蹇呴』鏄懼紡鍦版寚瀹氬畠涓篹xtern銆?/p>
9銆佸紩鐢?/p>
褰撳紩鐢ㄥ垵濮嬪寲鍚庯紝鍙璇ュ紩鐢ㄥ瓨鍦紝灝變繚鎸佺粦瀹氬埌鍒濆鍖栨椂鎸囧悜鐨勫璞°備笉鍙兘灝嗗紩鐢ㄧ粦瀹氬埌鍙︿竴涓璞°?/p>
涔熸鍥犱負濡傛錛屾墍浠ュ紩鐢ㄦ瘮鎸囬拡鐨勪紭鍔垮氨鍦ㄤ簬錛氬紩鐢ㄤ笉鍙互鍦ㄦ柟娉曚腑綃℃敼錛岃繖浣垮緱鏂規(guī)硶鍙橀噺鍙樺緱瀹夊叏浜嗐?/p>
10銆乧onst寮曠敤 榪欓噷鎴戜滑瑕佹眰宸︿晶鐨勭被鍨嬫槸涓鑷寸殑錛屽寘鎷琧onst錛?/p>
闈瀋onst寮曠敤鍙兘緇戝畾鍒頒笌璇ュ紩鐢ㄥ悓綾誨瀷鐨勫璞°?br>const寮曠敤鍒欏彲浠ョ粦瀹氬埌涓嶅悓浣嗙浉鍏崇殑綾誨瀷鐨勫璞℃垨緇戝畾鍒板彸鍊箋傦紙鍏蜂綋紺轟緥璇﹁C++Primer v4 P52錛?/p>
渚嬪錛?/p>
緙栬瘧鍣ㄤ細灝嗚繖浜涗唬鐮佽漿鎹㈡垚濡備互涓嬪艦寮忕殑緙栫爜錛?/p>
浣嗘槸濡備笅浠g爜鍙互鎵ц錛?/p>
杈撳嚭錛歩val=1025 refVal=1025// PassArray.cpp : 瀹氫箟鎺у埗鍙板簲鐢ㄧ▼搴忕殑鍏ュ彛鐐廣?
//
#include "stdafx.h"
#include <iostream>
using namespace std;
template <typename T>
void Func1(T, T);
template <typename T>
void Func2(T&, T&);
void Func3(int (&)[10], int (&)[12]);
int _tmain(int argc, _TCHAR* argv[])
{
int a[10], b[12];
Func1(a, b);
Func2(a, b);
Func3(a, b);
return 0;
}
template <typename T>
void Func1(T, T)
{
cout<<"Func1.invoked!"<<endl;
}
template <typename T>
void Func2(T&, T&)
{
cout<<"Func2.invoked!"<<endl;
}
void Func3(int (&m)[10], int (&n)[12])
{
cout<<"Func3.invoked!"<<endl;
}
int large_size = 10000000;
cout_current_time("start init vector!\t");
vector<string> svec1(large_size, "Hello");
vector<string> svec2(large_size, "Hi");
cout_current_time("end init vector!\t");
cout_current_time("start init list!\t");
list<string> slist1(large_size, "Hello");
list<string> slist2(large_size, "Hi");
cout_current_time("end init list!\t");
cout_current_time("start init deque!\t");
deque<string> sdeq1(large_size, "Hello");
deque<string> sdeq2(large_size, "Hi");
cout_current_time("end init deque!\t");
start init vector! current time : 5:5:52
end init vector! current time : 5:5:55
start init list! current time : 5:5:55
end init list! current time : 5:6:14
start init deque! current time : 5:6:14
end init deque! current time : 5:6:26
#include <time.h>
typedef struct tm * time_type;
time_type get_current_time(void) {
time_t t;
t = time(NULL);
return localtime(&t);
}
#include "stdafx.h"
#include <iostream>
class MyClass
{
public :
typedef int index_t;
index_t twice(index_t in);
};
MyClass::index_t MyClass ::twice(index_t in)
{
return in * 2;
}
int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;
MyClass obj;
MyClass::index_t x, y;
x = 10;
y = obj.twice(x);
cout<<"x = "<<x<<"; y = "<<y<<";"<<endl;
return 0;
}
#include "stdafx.h"
#include <iostream>
using namespace std;
class MyClass
{
public :
typedef int index_t;
bool same_object(MyClass obj);
public :
MyClass(int default_index = 5)
:default_index(default_index),
m_name("default_name"){}
MyClass::MyClass(std::string name);
public :
int default_index;
std::string m_name;
};
MyClass::MyClass(std::string name)
:default_index(0), m_name(name){}
bool MyClass::same_object(MyClass obj)
{
cout<<"m_name = "<<m_name.c_str()<<endl;
cout<<"obj.m_name = "<<obj.m_name.c_str()<<endl;
return strcmp(obj.m_name.c_str(), m_name.c_str()) == 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
MyClass obj;
cout<<"explicit : "<<obj.same_object(MyClass("default_name"))<<endl;
cout<<"implicit : "<<obj.same_object(string("default_name"))<<endl;
return 0;
}
]]>std::string st1("I am a string object!");
//error C2440: 鈥滃垵濮嬪寲鈥? 鏃犳硶浠庘渃onst char *鈥濊漿鎹負鈥渃har *鈥?
//char *str = st1.c_str();
const char *cstr = st1.c_str();
std::cout<<cstr<<std::endl;
int m, n;
m = 5;
n = 3;
cout << "Print a line!" << endl;
vector<string> lines(n, " I_am_a_PC_! ");
for (vector<string>::iterator siter = lines.begin(); siter != lines.end(); ++siter) {
cout << *siter;
}
cout << endl;
cout << "Print a paragraph!" << endl;
vector<vector<string> > paragraph(m, lines);
for (vector<vector<string> >::iterator piter = paragraph.begin(); piter
!= paragraph.end(); ++piter) {
for (vector<string>::iterator siter = (*piter).begin(); siter
!= (*piter).end(); ++siter) {
cout << *siter << ends;
}
cout << endl;
}
const string s1;
string const s2;
typedef string *pstring;
const pstring cstr;
const string *cstr; //榪欏茍闈炰笂闈緥瀛愮殑姝g‘鎰忔濓紒錛堥敊璇級
string *const cstr;
const char *cp1 = "some value";
char *cp2 = "other value";
int *piArray1 = new int[10]; //鍐呯疆綾誨瀷娌℃湁鍒濆鍖?
int *piArray2 = new int[10](); //鍐呯疆綾誨瀷闇瑕佸姞絀哄渾鎷彿錛屽鏁扮粍鍏冪礌榪涜鍒濆鍖?
std::string *psArray1 = new std::string[10]; //榛樿鏋勯犲嚱鏁板垵濮嬪寲
std::cout<<"----------"<<std::endl
<<"*cp1\t\t:"<<*cp1<<std::endl
<<"*cp2\t\t:"<<*cp2<<std::endl
<<"*piArray1\t:"<<*piArray1<<std::endl
<<"*piArray2\t:"<<*piArray2<<std::endl
<<"*psArray1\t:"<<*psArray1<<std::endl
<<"----------"<<std::endl;
////Visual Studio & MS VC++
//----------
//*cp1 :s
//*cp2 :o
//*piArray1 :-842150451
//*piArray2 :0
//*psArray1 :
//----------
////Eclipse&G++
//----------
//*cp1 :s
//*cp2 :o
//*piArray1 :4064608
//*piArray2 :4064560
//*psArray1 :
//----------
//P118
//error:uninitialized const array
const int *pciArray1 = new const int[10];
//ok:value-initialized const array
const int *pciArray2 = new const int[10]();
std::cout<<*pciArray1<<std::endl;
std::cout<<*pciArray2<<std::endl;
//enum
enum HttpVerbs { Head, Post, Get, Delete };
HttpVerbs current_verbs = Post;
std::cout<<"Current Verbs = "<<current_verbs<<std::endl;
//error C2440: 鈥?鈥? 鏃犳硶浠庘渋nt鈥濊漿鎹負鈥淗ttpVerbs鈥?/span>
//current_verbs = 3;
current_verbs = (HttpVerbs)2;
std::cout<<"Current Verbs = "<<current_verbs<<std::endl;
HttpVerbs copy_verbs = current_verbs;
std::cout<<"Copy Verbs = "<<copy_verbs<<std::endl;
HttpVerbs future_verbs = (HttpVerbs)((current_verbs + 1)%sizeof(HttpVerbs));
std::cout<<"Future Verbs = "<<future_verbs<<std::endl;
std::cout<<"HttpVerbs Size![by sizeof(HttpVerbs)] = "<<sizeof(HttpVerbs)<<std::endl;Current Verbs = 1
Current Verbs = 2
Copy Verbs = 2
Future Verbs = 3
HttpVerbs Size![by sizeof(HttpVerbs)] = 4
class MyClass1
{
public:
int GetMyValue();
void SetMyValue(int value);
private:
//error C2864: 鈥淢yClass1::myValue鈥? 鍙湁闈欐佸父閲忔暣鍨嬫暟鎹垚鍛樻墠鍙互鍦ㄧ被涓垵濮嬪寲
int myValue = 3; //鍙渶淇敼涓篿nt myValue;鍗沖彲
};
棰勭紪璇戝ご鏂囦歡鐗╃悊涓婁笌閫氬父鐨勭殑.obj鏂囦歡鏄竴鏍風殑錛屼絾緙栬瘧鍏ラ緙栬瘧澶寸殑.h,.c,.cpp鏂囦歡鍦ㄦ暣涓紪璇戣繃紼嬩腑錛屽彧緙栬瘧涓嬈★紝濡傞緙栬瘧澶存墍娑夊強鐨勯儴鍒嗕笉鍙戠敓鏀瑰彉鐨勮瘽錛屽湪闅忓悗鐨勭紪璇戣繃紼嬩腑姝ら儴鍒嗕笉閲嶆柊榪涜緙栬瘧銆傝繘鑰屽ぇ澶ф彁楂樼紪璇戦熷害錛屽茍渚夸簬瀵瑰ご鏂囦歡榪涜綆$悊錛屼篃鏈夊姪浜庢潨緇濋噸澶嶅寘鍚棶棰樸?/p>
褰撳ぇ澶?c鎴?cpp鏂囦歡閮介渶瑕佺浉鍚岀殑澶存枃浠舵椂銆?
褰撴煇浜涗唬鐮佽澶ч噺閲嶅浣跨敤鏃躲?
褰撳鍏ユ煇浜涗笉鍚屽簱閮芥湁瀹炵幇鐨勫嚱鏁幫紝騫朵駭鐢熸販涔辨椂銆?/p>
//std::cout<<"getline錛?lt;<std::endl;
WriteLine("getLine");
WriteLine("P72 緙?/span>);
using std::string;
WriteLine("姣?杈?NEXT\"榪?);
string str;
while(std::getline(std::cin, str))
{
if(str == "NEXT")
break;
std::cout<<str<<std::endl;
}
WriteLine("姣忚緭"NEXT\"榪?);
while(std::getline(std::cin, str))
{
if(str == "NEXT")
break;
//浠庣0涓紑濮嬫煡鎵劇┖鐧?/span>
static const std::basic_string<char>::size_type npos = (std::basic_string<char>::size_type)-1;
std::basic_string<char>::size_type firstIndexOfEmpty = str.find_first_of(" ", 0);
if(firstIndexOfEmpty != npos)
std::cout<<str.substr(0, firstIndexOfEmpty)<<std::endl;
else
std::cout<<str<<endl;
}void WriteLine(std::string str)
{
std::cout<<str<<std::endl;
}
std::string str2 = str1 + "this" + " that" + " those";
std::cout << str2 << std::endl;
//error C2110: 鈥?鈥? 涓嶈兘娣誨姞涓や釜鎸囬拡
std::string str3 = "this" + " that" + str1 + " those";
std::cout << str3 << std::endl;
]]>//嫻嬭瘯鍙橀噺鍛藉悕錛?
//error C2632: “int”鍚庨潰鐨?#8220;double”闈炴硶
//int double = 3.14159;
//-------------------------------------------------
char _='a';
std::cout<<_<<std::endl;
//-------------------------------------------------
//warning C4091: “”: 娌℃湁澹版槑鍙橀噺鏃跺拷鐣?#8220;bool”鐨勫乏渚?
//error C2059: 璇硶閿欒: “-”
//bool catch-22;
//-------------------------------------------------
//error C2059: 璇硶閿欒: “鏁板瓧涓婄殑閿欒鍚庣紑”
//char 1_or_2 = '1';
//-------------------------------------------------
float Float=3.14f;
std::cout<<Float<<std::endl;
int ival(1024); //鐩存帴鍒濆鍖?/span>
int ival = 1024; //澶嶅埗鍒濆鍖?/span>
//鍦‥clipse涓繍琛屾病鏈夊嚭鐜伴敊璇紒
//鍦╒isual Studio涓繍琛屽嚭鐜拌繍琛屾椂閿欒錛?/span>
int ival; //娌℃湁鍒濆鍖栵紒
std::cout<<ival<<std::endl;
extern double pi; //澹版槑
double pi; //瀹氫箟錛屽0鏄庝簡pi鍚屾椂瀹氫箟浜唒i
extern double pi = 3.14159; //瀹氫箟錛屽洜涓哄畠涓簆i鍒嗛厤浜嗗垵鍊箋傚彧鏈夊綋璇xtern璇彞
浣嶄簬鍑芥暟澶栭儴鐨勬椂鍊欐墠鍏佽浣跨敤鍒濆鍖栧紡錛屽惁鍒欏皢瀵艱嚧緙栬瘧閿欒銆?/span>std::string s1 = "I am a std::string!";
std::cout<<s1<<std::endl;
for(int s1=3; s1!=0; --s1)
std::cout<<"I am a number(int):"<<s1<<std::endl;
//鏂囦歡1錛?/span>
int counter;
//鏂囦歡2錛?/span>
extern int counter;
++counter;
//鏂囦歡1錛?/span>
extern const int bufSize = getBufSize();
//鏂囦歡2錛?/span>
extern count int bufSize;
//……浣跨敤bufSize
int ival = 1024;
int &refVal = ival;
const int ival = 1024;
const int &refVal = ival;
//閿欒浠g爜
double dval = 3.14;
const int &ri = dval;
int temp = dval;
const int &ri = temp;
濡傛灉ri涓嶆槸const錛岄偅涔堝彲浠ョ粰ri璧嬩竴鏂板箋傝繖鏍峰仛涓嶄細淇敼dval錛岃屾槸淇敼浜唗emp銆傛湡鏈涘ri鐨勮祴鍊間細淇敼dval鐨勭▼搴忓憳浼氬彂鐜癲val騫舵病鏈夎淇敼銆備粎鍏佽const寮曠敤緇戝畾鍒伴渶瑕佷復鏃朵嬌鐢ㄧ殑鍊煎畬鍏ㄩ伩鍏嶄簡榪欎釜闂錛屽洜涓篶onst寮曠敤鏄彧璇葷殑銆?br> int ival = 1024;
const int &refVal = ival;
++ival;
//++refVal; //error C3892: “refVal” 涓嶈兘緇欏父閲忚祴鍊?
std::cout<<"ival="<<ival<<"\trefVal="<<refVal<<std::endl;
const double dval = 3.14;
const int &ri = (int)dval;
std::cout<<ri<<std::endl;
杈撳嚭錛?
]]> Page 30 ( Chapter 2 鍩烘湰璇█) 綆楁湳綾誨瀷鐨勫瓨鍌ㄧ┖闂翠緷鏈哄櫒鑰屽畾銆?/td>
Page 30 ( Chapter 2 鍩烘湰璇█) 琛ㄧず鏁存暟銆佸瓧絎﹀拰甯冨皵鍊肩殑綆楁湳綾誨瀷鍚堢О涓?strong>鏁村艦(integral type)
瀛楃綾誨瀷鏈変袱縐嶏細char鍜寃char_t銆俢har綾誨瀷閫氬父鏄崟涓満鍣ㄥ瓧鑺?byte)銆倃char_t綾誨瀷鐢ㄤ簬鎵╁睍瀛楃闆嗭紝姣斿姹夊瓧鍜屾棩璇?/td>
Page 31 ( Chapter 2 鍩烘湰璇█) 鍦ㄤ綅榪欎竴綰т笂錛屽瓨鍌ㄥ櫒鏄病鏈夌粨鏋勫拰鎰忎箟鐨勩?br>璁╁瓨鍌ㄥ叿鏈夌粨鏋勭殑鏈鍩烘湰鏂規(guī)硶鏄敤鍧楋紙chunk錛夊鐞嗗瓨鍌ㄣ傗︹﹁櫧鐒剁‘鍒囩殑澶у皬鍥犳満鍣ㄤ笉鍚岃屼笉鍚岋紝浣嗘槸閫氬父灝?浣嶇殑鍧椾綔涓轟竴涓瓧鑺傦紝32浣嶆垨4涓瓧鑺備綔涓轟竴涓滃瓧錛坵ord錛夆?/td>
Page 32 ( Chapter 2 鍩烘湰璇█) C++鏍囧噯騫舵湭瀹氫箟signed綾誨瀷濡備綍鐢ㄤ綅鏉ヨ〃紺猴紝鑰屾槸鐢辨瘡涓紪璇戝櫒鑷敱鍐沖畾濡備綍琛ㄧずsigned綾誨瀷銆傗︹︾鍙蜂綅涓?錛屽煎氨涓鴻礋鏁幫紱絎﹀彿浣嶄負0錛屽煎氨涓?鎴栨鏁般傗︹︽湁浜涜璦涓皢璐熸暟璧嬬粰unsigned綾誨瀷鏄潪娉曠殑錛屼絾鍦–++涓繖鏄悎娉曠殑銆?/td>
Page 35 ( Chapter 2 鍩烘湰璇█) 涓轟簡鍏煎C璇█錛孋++涓墍鏈夌殑瀛楃涓插瓧闈㈠奸兘鐢辯紪璇戝櫒鑷姩鍦ㄦ湯灝炬坊鍔犱竴涓┖瀛楃銆?/td>
Page 36 ( Chapter 2 鍩烘湰璇█) 涓や釜鐩擱偦鐨勪粎鐢辯┖鏍箋佸埗琛ㄧ鎴栨崲琛岀鍒嗗紑鐨勫瓧絎︿覆瀛楅潰鍊鹼紙鎴栧瀛楃涓插瓧闈㈠鹼級錛屽彲榪炴帴鎴愪竴涓柊瀛楃涓插瓧闈㈠箋?br>//concatenated long string literal
std::cout<<"a multi-line "
"string literal "
"using concatenation "
<<std::endl;
鎵ц榪欐潯璇彞灝嗕細杈撳嚭錛?br>a multi-line string literal using concatenation
濡傛灉榪炴帴瀛楃涓插瓧闈㈠煎拰瀹藉瓧絎︿覆瀛楅潰鍊鹼紝灝嗕細鍑虹幇浠涔堢粨鏋滃憿錛熶緥濡傦細
//Concatenating plain and wide character strings is undefined
std::cout<<"multi-line" L"literal "<<std::endl;
鍏剁粨鏋滄湭瀹氫箟鐨勶紙unsigned錛夛紝涔熷氨鏄錛岃繛鎺ヤ笉鍚岀被鍨嬬殑琛屼負鏍囧噯娌℃湁瀹氫箟銆傝繖涓▼搴忓彲鑳戒細鎵ц錛屼篃鍙兘浼氬穿婧冩垨鑰呬駭鐢熸病鏈夌敤鐨勫鹼紝鑰屼笖鍦ㄤ笉鍚岀殑緙栬瘧鍣ㄤ笅紼嬪簭鐨勫姩浣滃彲鑳戒笉鍚屻?/td>
Page 36 ( Chapter 2 鍩烘湰璇█) 鍦ㄤ竴琛岀殑鏈熬鍔犱竴鍙嶆枩綰跨鍙峰彲灝嗘琛屽拰涓嬩竴琛屽綋浣滃悓涓琛屽鐞嗐?br>std::cou\
t<<"Hi"<<st\
d::endl;
絳変環(huán)浜?br>std::cout<<"Hi"<<std::endl;
娉ㄦ剰鍙嶆枩綰跨鍙峰繀欏繪槸璇ヨ鐨勫熬瀛楃鈥斺斾笉鍏佽鍏跺悗闈㈡湁娉ㄩ噴鎴栫┖鏍箋傚悓鏍鳳紝鍚庣戶琛岃棣栫殑浠諱綍絀烘牸鍜屽埗琛ㄧ閮芥槸瀛楃涓插瓧闈㈠肩殑涓閮ㄥ垎銆傛鍥犲姝わ紝闀垮瓧絎︿覆瀛楅潰鍊肩殑鍚庣戶琛屾墠涓嶄細鏈夋甯哥殑緙╄繘銆?/td>
Page 39 ( Chapter 2 鍩烘湰璇█) C++鏄竴闂ㄩ潤鎬佺被鍨嬭璦錛屽湪緙栬瘧鏃朵細浣滅被鍨嬫鏌ャ?/td>
Page 41 ( Chapter 2 鍩烘湰璇█) 鏍囪瘑絎︿笉鑳藉寘鍚袱涓繛緇殑涓嬪垝綰匡紝涔熶笉鑳戒互涓嬪垝綰垮紑澶村悗闈㈢揣璺熶竴涓ぇ鍐欏瓧姣嶃傛湁浜涙爣璇嗙錛堝湪鍑芥暟澶栧畾涔夌殑鏍囪瘑絎︼級涓嶈兘浠ヤ笅鍒掔嚎寮澶淬?/td>
Page 42 ( Chapter 2 鍩烘湰璇█) C++鏀寔涓ょ鍒濆鍖栧彉閲忕殑褰㈠紡錛氬鍒跺垵濮嬪寲錛坈opy-initialization錛夊拰鐩存帴鍒濆鍖栵紙direct-initialization錛夈傚鍒跺垵濮嬪寲璇硶鐢ㄧ瓑鍙鳳紙=錛夛紝鐩存帴鍒濆鍖栧垯鏄妸鍒濆鍖栧紡鏀懼湪鎷彿涓細
int ival(1024); //direct-initialization
int ival = 1024; //copy-initialization
Page 43 ( Chapter 2 鍩烘湰璇█) 涔熷彲浠ラ氳繃涓涓鏁板櫒鍜屼竴涓瓧絎﹀垵濮嬪寲string瀵硅薄銆傝繖鏍峰垱寤虹殑瀵硅薄鍖呭惈閲嶅澶氭鐨勬寚瀹氬瓧絎︼紝閲嶅嬈℃暟鐢辮鏁板櫒鎸囧畾錛?br>std::string all_nines(10,'9'); //all_nines="9999999999"
鏈緥涓紝鍒濆鍖朼ll_nines鐨勫敮涓鏂規(guī)硶鏄洿鎺ュ垵濮嬪寲銆傛湁澶氫釜鍒濆鍖栧紡鏃朵笉鑳戒嬌鐢ㄥ鍒跺垵濮嬪寲
Page 44 ( Chapter 2 鍩烘湰璇█) 鍐呯疆綾誨瀷鍙橀噺鏄惁鑷姩鍒濆鍖栧彇鍐充簬鍙橀噺瀹氫箟鐨勪綅緗傚湪鍑芥暟浣撳瀹氫箟鐨勫彉閲忛兘鍒濆鍖栨垚0錛屽湪鍑芥暟浣撻噷瀹氫箟鐨勫唴緗被鍨嬪彉閲忎笉榪涜鑷姩鍒濆鍖栥?/td>
Page 46 ( Chapter 2 鍩烘湰璇█) extern澹版槑涓嶆槸瀹氫箟錛屼篃涓嶅垎閰嶅瓨鍌ㄧ┖闂淬?br>鈥︹?br>鍙湁褰揺xtern澹版槑浣嶄簬鍑芥暟澶栭儴鏃訛紝鎵嶅彲浠ュ惈鏈夊垵濮嬪寲寮忋?/td>
Page 50 ( Chapter 2 鍩烘湰璇█) 闈瀋onst鍙橀噺榛樿涓篹xtern錛岃浣縞onst鍙橀噺鑳藉鍦ㄥ叾浠栫殑鏂囦歡涓闂紝蹇呴』鏄懼紡鍦版寚瀹氬畠涓篹xtern
Page 51 ( Chapter 2 鍩烘湰璇█) 寮曠敤鍙槸瀵硅薄鐨勫彟涓涓悕瀛?/td>
Page 52 ( Chapter 2 鍩烘湰璇█) const寮曠敤鍙互鍒濆鍖栦負涓嶅悓綾誨瀷鐨勫璞℃垨鑰呭垵濮嬪寲涓哄彸鍊?br>鈥︹?br>闈瀋onst寮曠敤鍙兘緇戝畾鍒頒笌璇ュ紩鐢ㄥ悓綾誨瀷鐨勫璞°?br>const寮曠敤鍒欏彲浠ョ粦瀹氬埌涓嶅悓浣嗙浉鍏崇殑綾誨瀷鐨勫璞℃垨緇戝畾鍒板彸鍊箋?/td>
Page 56-57 ( Chapter 2 鍩烘湰璇█) 濡傛灉浣跨敤class鍏抽敭瀛楁潵瀹氫箟綾伙紝閭d箞瀹氫箟鍦ㄧ涓涓闂爣鍙峰墠鐨勪換浣曟垚鍛橀兘闅愬紡鎸囧畾涓簆rivate錛涘鏋滀嬌鐢╯truct鍏抽敭瀛楋紝閭d箞榪欎簺鎴愬憳閮芥槸public銆備嬌鐢╟lass榪樻槸struct鍏抽敭瀛楁潵瀹氫箟綾伙紝浠呬粎褰卞搷榛樿鐨勫垵濮嬪寲璁塊棶綰у埆銆?br>鍙互絳夋晥鍦板畾涔塖ales_item綾諱負錛?br>struct Sales_item{
//no need for public label, memebers are public by default
//operations on Sales_item objects
private:
std::string isbn;
unsigned units_sold;
double revenues
};
鏈緥鐨勭被瀹氫箟鍜屽墠闈㈢殑綾誨畾涔夊彧鏈変袱涓尯鍒細榪欓噷浣跨敤浜嗗叧閿瓧struct錛屽茍涓旀病鏈夊湪鑺辨嫭鍙峰悗浣跨敤鍏抽敭瀛梡ublic銆俿truct鐨勬垚鍛橀兘鏄痯ublic錛岄櫎闈炴湁鍏朵粬鐗規(guī)畩鐨勫0鏄庯紝鎵浠ュ氨娌℃湁蹇呰娣誨姞public鏍囧彿銆?br>鐢╟lass鍜宻truct鍏抽敭瀛楀畾涔夌被鐨勫敮涓宸埆鍦ㄤ簬榛樿璁塊棶綰у埆錛氶粯璁ゆ儏鍐典笅錛宻truct鐨勬垚鍛樹負public錛岃宑lass鐨勬垚鍛樹負private銆?/td>
Page 59 ( Chapter 2 鍩烘湰璇█) 榪欑琛屼負鏈変竴涓緢閲嶈鐨勫惈涔夛細褰撴垜浠湪澶存枃浠朵腑瀹氫箟浜哻onst鍙橀噺鍚庯紝姣忎釜鍖呭惈璇ュご鏂囦歡鐨勬簮鏂囦歡閮芥湁浜嗚嚜宸辯殑const鍙橀噺錛屽叾鍚嶇О鍜屽奸兘涓鏍楓?/td>
]]>
璁板綍C++ Primer瀛︿範涓亣鍒扮殑闇瑕佽蹇嗙殑涓滆タ錛岃繖閲屼粎浠ユ垜涓漢涓烘爣鍑嗚繘琛岃褰曘?/p>
[鏍煎紡]
浠ヤ笅鏍蜂緥浠h〃浜嗘湰鏂囨墍鎻忚堪鐨勬墍鏈夋憳瑕佺墖孌靛皢閫氳繃浠ヤ笅妯$増榪涜鍒涘緩銆?/p>
| Page [PageIndex] ( Chapter [ChapterIndex] [Title of Chapter]) |
| [姝f枃] |
[姝f枃]
| Page 3 ( Chapter 1 蹇熷叆闂? |
| 鍦ㄥぇ澶氭暟緋葷粺涓紝main鍑芥暟鐨勮繑鍥炲兼槸涓涓姸鎬佹寚紺哄櫒銆傝繑鍥炲?寰寰琛ㄧずmain鍑芥暟鎴愬姛鎵ц瀹屾瘯銆備換浣曞叾浠栭潪闆剁殑榪斿洖鍊奸兘鏈夋搷浣滅郴緇熷畾涔夌殑鍚箟銆傞氬父闈為浂榪斿洖鍊艱〃鏄庢湁閿欒鍑虹幇銆傛瘡涓縐嶆搷浣滅郴緇熼兘鏈夎嚜宸辯殑鏂瑰紡鍛婅瘔鐢ㄦ埛main鍑芥暟榪斿洖浠涔堝唴瀹廣?/td> |
| Page 3 ( Chapter 1 蹇熷叆闂? |
|
鍦ㄤ功涓彁鍒扮殑 鐢ㄤ簬 80x86 鐨?Microsoft (R) 32 浣?C/C++ 浼樺寲緙栬瘧鍣?14.00.50727.762 鐗?br>鐗堟潈鎵鏈?C) Microsoft Corporation銆備繚鐣欐墍鏈夋潈鍒┿? cl: 鍛戒護琛?warning D9035 :“GX”閫夐」宸插惁鍐籌紝騫跺皢鍦ㄥ皢鏉ョ殑鐗堟湰涓Щ闄?br>cl: 鍛戒護琛?warning D9036 :浣跨敤“EHsc”鑰屼笉浣跨敤“GX” |
| Page 5 ( Chapter 1 蹇熷叆闂? |
| 騫舵病鏈夌洿鎺ュ畾涔夎繘琛岃緭鍏ユ垨杈撳嚭錛圛O錛夌殑浠諱綍璇彞錛岃繖縐嶅姛鑳芥槸鐢辨爣鍑嗗簱鎻愪緵鐨勩?/td> |
| Page 6 ( Chapter 1 蹇熷叆闂? |
| std::cout<<"Enter two number:"<<std::endl; 姣忎釜杈撳嚭鎿嶄綔絎﹀疄渚嬮兘鎺ュ彈涓や釜鎿嶄綔鏁幫細宸︽搷浣滄暟蹇呴』鏄痮stream瀵硅薄錛涘彸鎿嶄綔鏁版槸瑕佽緭鍑虹殑鍊箋傛搷浣滅灝嗗叾鍙蟲搷浣滄暟鍐欏埌浣滀負鍏跺乏鎿嶄綔鏁扮殑ostream瀵硅薄銆?br>錛坰td::cin涓巗td::cout鐩稿弽錛?br>std::cout 宸?#8592;鍙籌紙娉ㄦ剰綆ご鏂瑰悜錛?br>std::cin 宸?#8594;鍙籌紙娉ㄦ剰綆ご鏂瑰悜錛夛級 …… endl鏄竴涓壒孌婁箣錛岀О涓?strong>鎿嶇旱絎?/strong>錛坢anipulator錛夛紝灝嗗畠鍐欏叆杈撳嚭嫻佹椂錛屽叿鏈夎緭鍑烘崲琛岀殑鏁堟灉錛屽茍鍒鋒柊涓庤澶囩浉鍏寵仈鐨勭紦鍐插尯錛坆uffer錛夈傞氳繃鍒鋒柊緙撳啿鍖猴紝鐢ㄦ埛鍙珛鍗崇湅鍒板啓鍏ュ埌嫻佷腑鐨勮緭鍑恒?/td> |
| Page 16 ( Chapter 1 蹇熷叆闂? |
| 褰撴垜浠嬌鐢╥stream瀵硅薄浣滀負鏉′歡錛岀粨鏋滄槸嫻嬭瘯嫻佺殑鐘舵併傚鏋滄祦鏄湁鏁堢殑錛堜篃灝辨槸璇達紝濡傛灉璇誨叆涓嬩竴涓緭鍏ユ槸鍙兘鐨勶級閭d箞嫻嬭瘯鎴愬姛銆傞亣鍒版枃浠剁粨鏉熺錛坋nd-of-file錛夋垨閬囧埌鏃犳晥杈撳叆鏃訛紝濡傝鍙栦簡涓涓笉鏄暣鏁扮殑鍊鹼紝鍒檌stream瀵硅薄鏄棤鏁堢殑銆傚浜庢棤鏁堢姸鎬佺殑istream瀵硅薄灝嗗鑷存潯浠跺け璐ャ?br>銆愭湰淇℃伅閽堝涓婃枃涓?br>int sum = 0,value; while(std::cin>>value) //浠ュ墠寰堝皯鍦╳hile閲岄潰浣跨敤榪欐牱鐨勮緭鍏?br>…… |
| Page 20 ( Chapter 1 蹇熷叆闂? |
| 鐐規(guī)搷浣滅閫氳繃瀹冪殑宸︽搷浣滄暟鍙栧緱鏈夋搷浣滄暟銆傜偣鎿嶄綔絎︿粎搴旂敤浜庣被綾誨瀷鐨勫璞★細宸︽搷浣滄暟蹇呴』鏄被綾誨瀷鐨勫璞★紝鍙蟲搷浣滄暟蹇呴』鎸囧畾璇ョ被鍨嬬殑鎴愬憳銆? |