锘??xml version="1.0" encoding="utf-8" standalone="yes"?>中国成人在线视频,久久久久久自在自线,欧美精品在线一区二区三区http://m.shnenglu.com/mumutou/archive/2007/01/21/17856.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Sun, 21 Jan 2007 04:36:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/21/17856.htmlhttp://m.shnenglu.com/mumutou/comments/17856.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/21/17856.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17856.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17856.html闃呰鍏ㄦ枃

]]>
UML闅忕瑪 涔?Rose瀵筕C鐨勬鍚?鍙嶅悜宸ョ▼http://m.shnenglu.com/mumutou/archive/2007/01/21/17855.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Sun, 21 Jan 2007 04:35:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/21/17855.htmlhttp://m.shnenglu.com/mumutou/comments/17855.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/21/17855.html#Feedback1http://m.shnenglu.com/mumutou/comments/commentRss/17855.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17855.html 鐢?/span> [IBM 杞歡緋誨垪 ].IBM.Rational.Rose.Enterprise.v7.0-TFTISO 寤虹珛闀滃儚鍚庡畨瑁?/span>

鎵撳紑 Rose 杞歡

鐢變簬鏈漢緇忓父浣跨敤 VC6.0 寮鍙戣蔣浠?/span>

棣栧厛鏉ヨ皥璋?/font>

Rose 鍏充簬 VC6.0 鐨勬鍚戝拰閫嗗悜宸ョ▼鍚?/span>

Rose 鎬誨叡鏈?/span> 5 縐嶇被鍨嬪浘

聽聽聽聽聽聽聽 Use Case View

聽聽聽聽聽聽聽 Logical View

聽聽聽聽聽聽聽 Component View

聽聽聽聽聽聽聽 Deployment View

聽聽聽聽聽聽聽 Model Properties 鍏跺疄騫朵笉鑳借鏄竴縐嶅浘

鐜板湪鎴戜滑鍏堟潵璋堣皥 Logical View 灝辨槸闈欐佸浘錛?/span>

緇忓父鎴戜滑浣跨敤瀹冩潵鍋氫竴浜涢潤鎬佺被搴撱?/font>

濂戒簡錛屽厛鏉ョ湅鐪嬪弽鍚戝伐紼嬪惂

[tools]->[Visual C++]->[Update Model From Code]

鍑虹幇 Model Update Tool-Select Components and Classes

濡傛灉鍦?/span> VC++ 涓嬮潰娌℃湁欏圭殑璇濓紝鐐瑰嚮 Add Component, 娣誨姞涓涓鏂借閫嗗悜宸ョ▼鐨?/span> VC 宸ョ▼

鐐瑰嚮宸ョ▼涓嬮潰鎵鏈夌殑綾伙紝鐐瑰嚮 Next 灝卞彲浠ヤ簡銆?/span>

鎴戜滑鍐嶆潵鐪嬬湅姝e悜宸ョ▼

[tools]->[Visual C++]->[Update Code]

鍚屾牱瀹夎浠ヤ笂鎿嶄綔灝卞彲浠ヤ簡

濡傛灉鎴戜滑娣誨姞涓涓被鐨勮瘽錛岄偅涔堝氨蹇呴』瑕佷嬌鐢?/font>

[Tools]->[Visual C++]->[Component Assignment Tool] 鏉ユ妸娣誨姞鐨勭被鍖呭惈鍒板疄琛屾鍚戝伐紼嬬殑 VC 宸ョ▼閲岄潰銆?/span>



]]>
UML闅忕瑪 涔?綾?鍏崇郴http://m.shnenglu.com/mumutou/archive/2007/01/19/17776.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Fri, 19 Jan 2007 04:04:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/19/17776.htmlhttp://m.shnenglu.com/mumutou/comments/17776.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/19/17776.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17776.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17776.html綾誨叧緋繪誨叡鍒嗕負
1.緇ф壙鍏崇郴[涓鑸寲鍏崇郴]
class A{};
class B:public A
{};
A鍜孊鏄戶鎵垮叧緋?br />2.鍏寵仈鍏崇郴
class A{};
class B
{
聽聽聽void聽聽聽Function1(A *a);
}
A鍜孊鏄叧鑱斿叧緋?br />3.鑱氬悎鍏崇郴
class A{};
class B
{
聽聽聽A *a;
};
A鍜孊鏄仛鍚堝叧緋?br />姣斿XX甯傝繖涓被
class XX甯?br />{
聽聽聽鍔沖姩灞聽聽聽*鍔沖姩灞1;
聽聽聽渚涚數灞 *渚涚數灞1;
聽聽聽綺灞 *綺灞1;
};
4.緇勫悎鍏崇郴
class A{};
class B
{
聽聽聽A a;
};
A鍜孊鏄粍鍚堝叧緋?br />
緇勫悎鍏崇郴鍜岃仛鍚堝叧緋繪瘮璧鋒潵錛屽叾寮哄害瑕侀珮涓鐐癸紱


]]>C++闅忕瑪 涔?C++椋庢牸鐨勭被鍨嬭漿鎹㈢殑鐢ㄦ硶 (杞澆)http://m.shnenglu.com/mumutou/archive/2007/01/16/17682.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Tue, 16 Jan 2007 05:24:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/16/17682.htmlhttp://m.shnenglu.com/mumutou/comments/17682.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/16/17682.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17682.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17682.html C++椋庢牸鐨勭被鍨嬭漿鎹㈢殑鐢ㄦ硶

榪欐槸More Effecitve C++閲岀殑絎簩鏉″綾誨瀷杞崲璁茬殑寰堝ソ錛屼篃寰堝熀紜濂芥噦銆?br />Item M2錛氬敖閲忎嬌鐢–++椋庢牸鐨勭被鍨嬭漿鎹?br />浠旂粏鎯蟲兂鍦頒綅鍗戣幢鐨勭被鍨嬭漿鎹㈠姛鑳斤紙cast錛夛紝鍏跺湪紼嬪簭璁捐涓殑鍦頒綅灝辮薄goto璇彞涓鏍蜂護浜洪剻瑙嗐備絾鏄畠榪樹笉鏄棤娉曚護浜哄繊鍙楋紝鍥犱負褰撳湪鏌愪簺绱ц鐨勫叧澶達紝綾誨瀷杞崲榪樻槸蹇呴渶鐨勶紝榪欐椂瀹冩槸涓涓繀闇鍝併?br />涓嶈繃C椋庢牸鐨勭被鍨嬭漿鎹㈠茍涓嶄唬琛ㄦ墍鏈夌殑綾誨瀷杞崲鍔熻兘銆?br />涓鏉ュ畠浠繃浜庣矖椴侊紝鑳藉厑璁鎬綘鍦ㄤ換浣曠被鍨嬩箣闂磋繘琛岃漿鎹€備笉榪囧鏋滆榪涜鏇寸簿紜殑綾誨瀷杞崲錛岃繖浼氭槸涓涓紭鐐廣傚湪榪欎簺綾誨瀷杞崲涓瓨鍦ㄧ潃宸ㄥぇ鐨勪笉鍚岋紝渚嬪鎶婁竴涓寚鍚?const瀵硅薄鐨勬寚閽堬紙pointer-to-const-object錛夎漿鎹㈡垚鎸囧悜闈瀋onst瀵硅薄鐨勬寚閽堬紙pointer-to-non-const -object錛?鍗充竴涓粎浠呭幓闄onst鐨勭被鍨嬭漿鎹?錛屾妸涓涓寚鍚戝熀綾葷殑鎸囬拡杞崲鎴愭寚鍚戝瓙綾葷殑鎸囬拡錛堝嵆瀹屽叏鏀瑰彉瀵硅薄綾誨瀷錛夈備紶緇熺殑C椋庢牸鐨勭被鍨嬭漿鎹笉瀵逛笂榪頒袱縐嶈漿鎹㈣繘琛屽尯鍒嗐傦紙榪欎竴鐐逛篃涓嶄護浜烘儕璁訛紝鍥犱負C椋庢牸鐨勭被鍨嬭漿鎹㈡槸涓篊璇█璁捐鐨勶紝鑰屼笉鏄負C++璇█璁捐鐨勶級銆?br />浜屾潵C椋庢牸鐨勭被鍨嬭漿鎹㈠湪紼嬪簭璇彞涓毦浠ヨ瘑鍒傚湪璇硶涓婏紝綾誨瀷杞崲鐢卞渾鎷彿鍜屾爣璇嗙緇勬垚錛岃岃繖浜涘彲浠ョ敤鍦–錛嬶紜涓殑浠諱綍鍦版柟銆傝繖浣垮緱鍥炵瓟璞¤繖鏍蜂竴涓渶鍩烘湰鐨勬湁鍏崇被鍨嬭漿鎹㈢殑闂鍙樺緱寰堝洶闅撅細鈥滃湪榪欎釜紼嬪簭涓槸鍚︿嬌鐢ㄤ簡綾誨瀷杞崲錛熲濄傝繖鏄洜涓轟漢宸ラ槄璇誨緢鍙兘蹇界暐浜嗙被鍨嬭漿鎹㈢殑璇彞錛岃屽埄鐢ㄨ薄grep鐨勫伐鍏風▼搴忎篃涓嶈兘浠庤鍙ユ瀯鎴愪笂鍖哄垎鍑哄畠浠潵銆?br />C++閫氳繃寮曡繘鍥涗釜鏂扮殑綾誨瀷杞崲鎿嶄綔絎﹀厠鏈嶄簡C椋庢牸綾誨瀷杞崲鐨勭己鐐癸紝榪欏洓涓搷浣滅鏄? static_cast, const_cast, dynamic_cast, 鍜宺einterpret_cast銆傚湪澶у鏁版儏鍐典笅錛屽浜庤繖浜涙搷浣滅浣犲彧闇瑕佺煡閬撳師鏉ヤ綘涔犳儻浜庤繖鏍峰啓錛?br />(type) expression
鑰岀幇鍦ㄤ綘鎬誨簲璇ヨ繖鏍峰啓錛?br />static_cast<type>(expression)
渚嬪錛屽亣璁句綘鎯蟲妸涓涓猧nt杞崲鎴恉ouble錛屼互渚胯鍖呭惈int綾誨瀷鍙橀噺鐨勮〃杈懼紡浜х敓鍑烘誕鐐規暟鍊肩殑緇撴灉銆傚鏋滅敤C椋庢牸鐨勭被鍨嬭漿鎹紝浣犺兘榪欐牱鍐欙細
int firstNumber, secondNumber;
...
double result = ((double)firstNumber)/secondNumber錛?br />濡傛灉鐢ㄤ笂榪版柊鐨勭被鍨嬭漿鎹㈡柟娉曪紝浣犲簲璇ヨ繖鏍峰啓錛?br />double result = static_cast<double>(firstNumber)/secondNumber;
榪欐牱鐨勭被鍨嬭漿鎹笉璁烘槸瀵逛漢宸ヨ繕鏄紼嬪簭閮藉緢瀹規槗璇嗗埆銆?br />static_cast 鍦ㄥ姛鑳戒笂鍩烘湰涓婁笌C椋庢牸鐨勭被鍨嬭漿鎹竴鏍峰己澶э紝鍚箟涔熶竴鏍楓傚畠涔熸湁鍔熻兘涓婇檺鍒躲備緥濡傦紝浣犱笉鑳界敤static_cast璞$敤C椋庢牸鐨勭被鍨嬭漿鎹竴鏍鋒妸 struct杞崲鎴恑nt綾誨瀷鎴栬呮妸double綾誨瀷杞崲鎴愭寚閽堢被鍨嬶紝鍙﹀錛宻tatic_cast涓嶈兘浠庤〃杈懼紡涓幓闄onst灞炴э紝鍥犱負鍙︿竴涓柊鐨勭被鍨嬭漿鎹㈡搷浣滅const_cast鏈夎繖鏍風殑鍔熻兘銆?br />鍏跺畠鏂扮殑C++綾誨瀷杞崲鎿嶄綔絎﹁鐢ㄥ湪闇瑕佹洿澶氶檺鍒剁殑鍦版柟銆俢onst_cast鐢ㄤ簬綾誨瀷杞崲鎺夎〃杈懼紡鐨刢onst鎴杤olatileness灞炴с傞氳繃浣跨敤const_cast錛屼綘鍚戜漢浠拰緙栬瘧鍣ㄥ己璋冧綘閫氳繃綾誨瀷杞崲鎯沖仛鐨勫彧鏄敼鍙樹竴浜涗笢瑗跨殑 constness鎴栬卾olatileness灞炴с傝繖涓惈涔夎緙栬瘧鍣ㄦ墍綰︽潫銆傚鏋滀綘璇曞浘浣跨敤const_cast鏉ュ畬鎴愪慨鏀筩onstness 鎴栬卾olatileness灞炴т箣澶栫殑浜嬫儏錛屼綘鐨勭被鍨嬭漿鎹㈠皢琚嫆緇濄備笅闈㈡槸涓浜涗緥瀛愶細
class Widget { ... };
class SpecialWidget: public Widget { ... };
void update(SpecialWidget *psw);
SpecialWidget sw; // sw 鏄竴涓潪const 瀵硅薄銆?br />const SpecialWidget& csw = sw; // csw 鏄痵w鐨勪竴涓紩鐢?br />// 瀹冩槸涓涓猚onst 瀵硅薄
update(&csw); // 閿欒!涓嶈兘浼犻掍竴涓猚onst SpecialWidget* 鍙橀噺
// 緇欎竴涓鐞哠pecialWidget*綾誨瀷鍙橀噺鐨勫嚱鏁?br />update(const_cast<SpecialWidget*>(&csw));
// 姝g‘錛宑sw鐨刢onst琚樉紺哄湴杞崲鎺夛紙
// csw鍜宻w涓や釜鍙橀噺鍊煎湪update
//鍑芥暟涓兘琚洿鏂幫級
update((SpecialWidget*)&csw);
// 鍚屼笂錛屼絾鐢ㄤ簡涓涓洿闅捐瘑鍒?br />//鐨凜椋庢牸鐨勭被鍨嬭漿鎹?br />Widget *pw = new SpecialWidget;
update(pw); // 閿欒錛乸w鐨勭被鍨嬫槸Widget*錛屼絾鏄?br />// update鍑芥暟澶勭悊鐨勬槸SpecialWidget*綾誨瀷
update(const_cast<SpecialWidget*>(pw));
// 閿欒錛乧onst_cast浠呰兘琚敤鍦ㄥ獎鍝?br />// constness or volatileness鐨勫湴鏂逛笂銆?
// 涓嶈兘鐢ㄥ湪鍚戠戶鎵垮瓙綾昏繘琛岀被鍨嬭漿鎹€?br />鍒扮洰鍓嶄負姝紝const_cast鏈鏅氱殑鐢ㄩ斿氨鏄漿鎹㈡帀瀵硅薄鐨刢onst灞炴с?br />絎簩縐嶇壒孌婄殑綾誨瀷杞崲絎︽槸dynamic_cast錛屽畠琚敤浜庡畨鍏ㄥ湴娌跨潃綾葷殑緇ф壙鍏崇郴鍚戜笅榪涜綾誨瀷杞崲銆傝繖灝辨槸璇達紝浣犺兘鐢╠ynamic_cast鎶婃寚鍚戝熀綾葷殑鎸囬拡鎴栧紩鐢ㄨ漿鎹㈡垚鎸囧悜鍏舵淳鐢熺被鎴栧叾鍏勫紵綾葷殑鎸囬拡鎴栧紩鐢紝鑰屼笖浣犺兘鐭ラ亾杞崲鏄惁鎴愬姛銆傚け璐ョ殑杞崲灝嗚繑鍥炵┖鎸囬拡錛堝綋瀵規寚閽堣繘琛岀被鍨嬭漿鎹㈡椂錛夋垨鑰呮姏鍑哄紓甯革紙褰撳寮曠敤榪涜綾誨瀷杞崲鏃訛級錛?br />Widget *pw;
...
update(dynamic_cast<SpecialWidget*>(pw));
// 姝g‘錛屼紶閫掔粰update鍑芥暟涓涓寚閽?br />// 鏄寚鍚戝彉閲忕被鍨嬩負SpecialWidget鐨刾w鐨勬寚閽?br />// 濡傛灉pw紜疄鎸囧悜涓涓璞?
// 鍚﹀垯浼犻掕繃鍘葷殑灝嗕嬌絀烘寚閽堛?br />void updateViaRef(SpecialWidget& rsw);
updateViaRef(dynamic_cast<SpecialWidget&>(*pw));
//姝g‘銆備紶閫掔粰updateViaRef鍑芥暟
// SpecialWidget pw 鎸囬拡錛屽鏋減w
// 紜疄鎸囧悜浜嗘煇涓璞?br />// 鍚﹀垯灝嗘姏鍑哄紓甯?br />dynamic_casts鍦ㄥ府鍔╀綘嫻忚緇ф壙灞傛涓婃槸鏈夐檺鍒剁殑銆傚畠涓嶈兘琚敤浜庣己涔忚櫄鍑芥暟鐨勭被鍨嬩笂錛堝弬瑙佹潯嬈綧24錛夛紝涔熶笉鑳界敤瀹冩潵杞崲鎺塩onstness錛?br />int firstNumber, secondNumber;
...
double result = dynamic_cast<double>(firstNumber)/secondNumber;
// 閿欒錛佹病鏈夌戶鎵垮叧緋?br />const SpecialWidget sw;
...
update(dynamic_cast<SpecialWidget*>(&sw));
// 閿欒! dynamic_cast涓嶈兘杞崲
// 鎺塩onst銆?br />濡備綘鎯沖湪娌℃湁緇ф壙鍏崇郴鐨勭被鍨嬩腑榪涜杞崲錛屼綘鍙兘鎯沖埌static_cast銆傚鏋滄槸涓轟簡鍘婚櫎const錛屼綘鎬誨緱鐢╟onst_cast銆?br />榪欏洓涓被鍨嬭漿鎹㈢涓殑鏈鍚庝竴涓槸reinterpret_cast銆備嬌鐢ㄨ繖涓搷浣滅鐨勭被鍨嬭漿鎹紝鍏剁殑杞崲緇撴灉鍑犱箮閮芥槸鎵ц鏈熷畾涔夛紙implementation-defined錛夈傚洜姝わ紝浣跨敤reinterpret_casts鐨勪唬鐮佸緢闅劇Щ妞嶃?br />reinterpret_casts鐨勬渶鏅氱殑鐢ㄩ斿氨鏄湪鍑芥暟鎸囬拡綾誨瀷涔嬮棿榪涜杞崲銆備緥濡傦紝鍋囪浣犳湁涓涓嚱鏁版寚閽堟暟緇勶細
typedef void (*FuncPtr)(); // FuncPtr is 涓涓寚鍚戝嚱鏁?br />// 鐨勬寚閽堬紝璇ュ嚱鏁版病鏈夊弬鏁?br />// 榪斿洖鍊肩被鍨嬩負void
FuncPtr funcPtrArray[10]; // funcPtrArray 鏄竴涓兘瀹圭撼
// 10涓狥uncPtrs鎸囬拡鐨勬暟緇?br />璁╂垜浠亣璁句綘甯屾湜錛堝洜涓烘煇浜涜帿鍚嶅叾濡欑殑鍘熷洜錛夋妸涓涓寚鍚戜笅闈㈠嚱鏁扮殑鎸囬拡瀛樺叆funcPtrArray鏁扮粍錛?br />int doSomething();
浣犱笉鑳戒笉緇忚繃綾誨瀷杞崲鑰岀洿鎺ュ幓鍋氾紝鍥犱負doSomething鍑芥暟瀵逛簬funcPtrArray鏁扮粍鏉ヨ鏈変竴涓敊璇殑綾誨瀷銆傚湪FuncPtrArray鏁扮粍閲岀殑鍑芥暟榪斿洖鍊兼槸void綾誨瀷錛岃宒oSomething鍑芥暟榪斿洖鍊兼槸int綾誨瀷銆?br />funcPtrArray[0] = &doSomething; // 閿欒錛佺被鍨嬩笉鍖歸厤
reinterpret_cast鍙互璁╀綘榪嬌緙栬瘧鍣ㄤ互浣犵殑鏂規硶鍘葷湅寰呭畠浠細
funcPtrArray[0] = // this compiles
reinterpret_cast<FuncPtr>(&doSomething);
杞崲鍑芥暟鎸囬拡鐨勪唬鐮佹槸涓嶅彲縐繪鐨勶紙C++涓嶄繚璇佹墍鏈夌殑鍑芥暟鎸囬拡閮借鐢ㄤ竴鏍風殑鏂規硶琛ㄧず錛夛紝鍦ㄤ竴浜涙儏鍐典笅榪欐牱鐨勮漿鎹細浜х敓涓嶆紜殑緇撴灉錛堝弬瑙佹潯嬈綧31錛夛紝鎵浠ヤ綘搴旇閬垮厤杞崲鍑芥暟鎸囬拡綾誨瀷錛岄櫎闈炰綘澶勪簬鐫鑳屾按涓鎴樺拰灝栧垁鏋跺枆鐨勫嵄鎬ユ椂鍒匯備竴鎶婇攱鍒╃殑鍒銆備竴鎶婇潪甯擱攱鍒╃殑鍒銆?br />濡傛灉浣犱嬌鐢ㄧ殑緙栬瘧鍣ㄧ己涔忓鏂扮殑綾誨瀷杞崲鏂瑰紡鐨勬敮鎸侊紝浣犲彲浠ョ敤浼犵粺鐨勭被鍨嬭漿鎹㈡柟娉曚唬鏇縮tatic_cast, const_cast, 浠ュ強reinterpret_cast銆備篃鍙互鐢ㄤ笅闈㈢殑瀹忔浛鎹㈡潵妯℃嫙鏂扮殑綾誨瀷杞崲璇硶錛?br />#define static_cast(TYPE,EXPR) ((TYPE)(EXPR))
#define const_cast(TYPE,EXPR) ((TYPE)(EXPR))
#define reinterpret_cast(TYPE,EXPR) ((TYPE)(EXPR))
浣犲彲浠ヨ薄榪欐牱浣跨敤浣跨敤錛?br />double result = static_cast(double, firstNumber)/secondNumber;
update(const_cast(SpecialWidget*, &sw));
funcPtrArray[0] = reinterpret_cast(FuncPtr, &doSomething);
榪欎簺妯℃嫙涓嶄細璞$湡瀹炵殑鎿嶄綔絎︿竴鏍峰畨鍏紝浣嗘槸褰撲綘鐨勭紪璇戝櫒鍙互鏀寔鏂扮殑鐨勭被鍨嬭漿鎹㈡椂錛屽畠浠彲浠ョ畝鍖栦綘鎶婁唬鐮佸崌綰х殑榪囩▼銆?br />娌℃湁涓涓鏄撶殑鏂規硶鏉ユā鎷焏ynamic_cast鐨勬搷浣滐紝浣嗘槸寰堝鍑芥暟搴撴彁渚涗簡鍑芥暟錛屽畨鍏ㄥ湴鍦ㄦ淳鐢熺被涓庡熀綾諱箣闂磋繘琛岀被鍨嬭漿鎹€傚鏋滀綘娌℃湁榪欎簺鍑芥暟鑰屼綘鏈夊繀欏昏繘琛岃繖鏍風殑綾誨瀷杞崲錛屼綘涔熷彲浠ュ洖鍒癈椋庢牸鐨勭被鍨嬭漿鎹㈡柟娉曚笂錛屼絾鏄繖鏍風殑璇濅綘灝嗕笉鑳借幏鐭ョ被鍨嬭漿鎹㈡槸鍚﹀け璐ャ傚綋鐒訛紝浣犱篃鍙互瀹氫箟涓涓畯鏉ユā鎷?dynamic_cast鐨勫姛鑳斤紝灝辮薄妯℃嫙鍏跺畠鐨勭被鍨嬭漿鎹竴鏍鳳細
#define dynamic_cast(TYPE,EXPR) (TYPE)(EXPR)
璇瘋浣忥紝榪欎釜妯℃嫙騫朵笉鑳藉畬鍏ㄥ疄鐜癲ynamic_cast鐨勫姛鑳斤紝瀹冩病鏈夊姙娉曠煡閬撹漿鎹㈡槸鍚﹀け璐ャ?br />鎴戠煡閬擄紝鏄殑錛屾垜鐭ラ亾錛屾柊鐨勭被鍨嬭漿鎹㈡搷浣滅涓嶆槸寰堢編瑙傝屼笖鐢ㄩ敭鐩橀敭鍏ヤ篃寰堥夯鐑︺傚鏋滀綘鍙戠幇瀹冧滑鐪嬩笂鍘誨疄鍦ㄤ護浜鴻鍘岋紝C椋庢牸鐨勭被鍨嬭漿鎹㈣繕鍙互緇х畫浣跨敤騫朵笖鍚堟硶銆傜劧鑰岋紝姝f槸鍥犱負鏂扮殑綾誨瀷杞崲絎︾己涔忕編鎰熸墠鑳戒嬌瀹冨譏琛ヤ簡鍦ㄥ惈涔夌簿紜у拰鍙鯨璁ゆт笂鐨勭己鐐廣傚茍涓旓紝浣跨敤鏂扮被鍨嬭漿鎹㈢鐨勭▼搴忔洿瀹規槗琚В鏋愶紙涓嶈鏄浜哄伐榪樻槸瀵逛簬宸ュ叿紼嬪簭錛夛紝瀹冧滑鍏佽緙栬瘧鍣ㄦ嫻嬪嚭鍘熸潵涓嶈兘鍙戠幇鐨勯敊璇傝繖浜涢兘鏄斁寮僀椋庢牸綾誨瀷杞崲鏂規硶鐨勫己鏈夊姏鐨勭悊鐢便傝繕鏈夌涓変釜鐞嗙敱錛氫篃璁歌綾誨瀷杞崲絎︿笉緹庤鍜岄敭鍏ラ夯鐑︽槸涓浠跺ソ浜嬨?



]]>
C++闅忕瑪 涔?explicit 鍏抽敭瀛?杞澆)http://m.shnenglu.com/mumutou/archive/2007/01/16/17681.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Tue, 16 Jan 2007 05:21:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/16/17681.htmlhttp://m.shnenglu.com/mumutou/comments/17681.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/16/17681.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17681.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17681.htmlexplicit鍏抽敭瀛楃敤浜庡彇娑堟瀯閫犲嚱鏁扮殑闅愬紡杞崲錛屽鏈夊涓弬鏁扮殑鏋勯犲嚱鏁頒嬌鐢╡xplicit鏄釜璇硶閿欒銆?br />


In C++ it is possible to declare constructors for a class, taking a single parameter, and use those constructors for doing type conversion. For example:

				
class 聽A聽{
public
:
聽聽聽聽聽聽聽 A(
int
);
};

void
聽f(A)聽{}
void
聽g()
{
聽聽聽聽聽聽聽聽 A聽a1聽
= 37
;
聽聽聽聽聽聽聽聽 A聽a2聽
= 聽A( 47
);
聽聽聽聽聽聽聽聽 A聽a3(
57
);
聽聽聽聽聽聽聽聽 a1聽
= 67
;
聽聽聽聽聽聽聽聽 f(
77
);
}

A declaration like:
聽A a1 = 37;
says to call the A(int) constructor to create an A object from the integer value. Such a constructor is called a "converting constructor".

However, this type of implicit conversion can be confusing, and there is a way of disabling it, using a new keyword "explicit" in the constructor declaration:

				
class 聽A聽{
public
:
聽聽聽聽聽聽聽
explicit 聽A( int
);
};

void
聽f(A)聽{}
void
聽g()
{
聽聽聽聽聽聽聽聽聽 A聽a1聽
= 37 ;聽聽聽聽聽聽 // 聽illegal

聽聽聽聽聽聽聽聽聽 A聽a2聽 = 聽A( 47 );聽聽聽 // 聽OK
聽聽聽聽聽聽聽聽聽 A聽a3( 57 );聽聽聽聽聽聽聽 // 聽OK
聽聽聽聽聽聽聽聽聽 a1聽 = 67 ;聽聽聽聽聽聽聽聽 // 聽illegal
聽聽聽聽聽聽聽聽聽 f( 77 );聽聽聽聽聽聽聽聽聽聽 // 聽illegal
}


Using the explicit keyword, a constructor is declared to be
"nonconverting", and explicit constructor syntax is required:

				
class 聽A聽{
public
:
聽聽聽聽聽聽聽聽
explicit 聽A( int
);
聽聽聽聽聽聽聽聽};

void
聽f(A)聽{}

void
聽g()
{
聽聽聽聽聽聽聽聽A聽a1聽
= 聽A( 37
);
聽聽聽聽聽聽聽聽A聽a2聽
= 聽A( 47
);
聽聽聽聽聽聽聽聽A聽a3(
57
);
聽聽聽聽聽聽聽聽a1聽
= 聽A( 67
);
聽聽聽聽聽聽聽聽f(A(
77
));
}


Note that an expression such as:

				        A(47)

is closely related to function-style casts supported by C++. For example:

				        double d = 12.34;

int i = int(d);


鏈ㄦ湪澶?/a> 2007-01-16 13:21 鍙戣〃璇勮
]]>C++闅忕瑪 涔?鏂囦歡鎿嶄綔(杞澆)http://m.shnenglu.com/mumutou/archive/2007/01/16/17680.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Tue, 16 Jan 2007 05:18:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/16/17680.htmlhttp://m.shnenglu.com/mumutou/comments/17680.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/16/17680.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17680.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17680.html C++鏂囦歡鎿嶄綔 聽鍘熸枃鍦板潃錛歨ttp://www.layz.net/blog/user1/xuanxuan/archives/2006/67.html
聽鍦–++涓紝鏈変竴涓猻tream榪欎釜綾伙紝鎵鏈夌殑I/O閮戒互榪欎釜鈥滄祦鈥濈被涓哄熀紜鐨勶紝鍖呮嫭鎴戜滑瑕佽璇嗙殑鏂囦歡I/O錛宻tream榪欎釜綾繪湁涓や釜閲嶈鐨勮繍綆楃錛?

1銆佹彃鍏ュ櫒(<<)
銆銆鍚戞祦杈撳嚭鏁版嵁銆傛瘮濡傝緋葷粺鏈変竴涓粯璁ょ殑鏍囧噯杈撳嚭嫻?cout)錛屼竴鑸儏鍐典笅灝辨槸鎸囩殑鏄劇ず鍣紝鎵浠ワ紝cout<<"Write Stdout"<<'\n';灝辮〃紺烘妸瀛楃涓?Write Stdout"鍜屾崲琛屽瓧絎?'\n')杈撳嚭鍒版爣鍑嗚緭鍑烘祦銆?

2銆佹瀽鍙栧櫒(>>)
銆銆浠庢祦涓緭鍏ユ暟鎹傛瘮濡傝緋葷粺鏈変竴涓粯璁ょ殑鏍囧噯杈撳叆嫻?cin)錛屼竴鑸儏鍐典笅灝辨槸鎸囩殑閿洏錛屾墍浠ワ紝cin>>x;灝辮〃紺轟粠鏍囧噯杈撳叆嫻佷腑璇誨彇涓涓寚瀹氱被鍨?鍗沖彉閲弜鐨勭被鍨?鐨勬暟鎹?

銆銆鍦–++涓紝瀵規枃浠剁殑鎿嶄綔鏄氳繃stream鐨勫瓙綾籪stream(file stream)鏉ュ疄鐜扮殑錛屾墍浠ワ紝瑕佺敤榪欑鏂瑰紡鎿嶄綔鏂囦歡錛屽氨蹇呴』鍔犲叆澶存枃浠秄stream.h銆備笅闈㈠氨鎶婃綾葷殑鏂囦歡鎿嶄綔榪囩▼涓涓閬撴潵銆?

涓銆佹墦寮鏂囦歡
銆銆鍦╢stream綾諱腑錛屾湁涓涓垚鍛樺嚱鏁皁pen()錛屽氨鏄敤鏉ユ墦寮鏂囦歡鐨勶紝鍏跺師鍨嬫槸錛?

void open(const char* filename,int mode,int access);

鍙傛暟錛?

filename錛氥銆瑕佹墦寮鐨勬枃浠跺悕
mode錛氥銆銆銆瑕佹墦寮鏂囦歡鐨勬柟寮?
access錛氥銆銆鎵撳紑鏂囦歡鐨勫睘鎬?
鎵撳紑鏂囦歡鐨勬柟寮忓湪綾籭os(鏄墍鏈夋祦寮廔/O綾葷殑鍩虹被)涓畾涔夛紝甯哥敤鐨勫煎涓嬶細

ios::app錛氥銆銆浠ヨ拷鍔犵殑鏂瑰紡鎵撳紑鏂囦歡
ios::ate錛氥銆銆鏂囦歡鎵撳紑鍚庡畾浣嶅埌鏂囦歡灝撅紝ios:app灝卞寘鍚湁姝ゅ睘鎬?
ios::binary錛?銆浠ヤ簩榪涘埗鏂瑰紡鎵撳紑鏂囦歡錛岀己鐪佺殑鏂瑰紡鏄枃鏈柟寮忋備袱縐嶆柟寮忕殑鍖哄埆瑙佸墠鏂?
ios::in錛氥銆銆 鏂囦歡浠ヨ緭鍏ユ柟寮忔墦寮
ios::out錛氥銆銆鏂囦歡浠ヨ緭鍑烘柟寮忔墦寮
ios::nocreate錛?涓嶅緩绔嬫枃浠訛紝鎵浠ユ枃浠朵笉瀛樺湪鏃舵墦寮澶辮觸銆
ios::noreplace錛氫笉瑕嗙洊鏂囦歡錛屾墍浠ユ墦寮鏂囦歡鏃跺鏋滄枃浠跺瓨鍦ㄥけ璐?
ios::trunc錛氥銆濡傛灉鏂囦歡瀛樺湪錛屾妸鏂囦歡闀垮害璁句負0
銆銆鍙互鐢ㄢ滄垨鈥濇妸浠ヤ笂灞炴ц繛鎺ヨ搗鏉ワ紝濡俰os::out|ios::binary

銆銆鎵撳紑鏂囦歡鐨勫睘鎬у彇鍊兼槸錛?

0錛氭櫘閫氭枃浠訛紝鎵撳紑璁塊棶
1錛氬彧璇繪枃浠?
2錛氶殣鍚枃浠?
4錛氱郴緇熸枃浠?
銆銆鍙互鐢ㄢ滄垨鈥濇垨鑰呪?鈥濇妸浠ヤ笂灞炴ц繛鎺ヨ搗鏉?錛屽3鎴?|2灝辨槸浠ュ彧璇誨拰闅愬惈灞炴ф墦寮鏂囦歡銆?

銆銆渚嬪錛氫互浜岃繘鍒惰緭鍏ユ柟寮忔墦寮鏂囦歡c:\config.sys

銆銆fstream file1;
銆銆file1.open("c:\\config.sys",ios::binary|ios::in,0);

銆銆濡傛灉open鍑芥暟鍙湁鏂囦歡鍚嶄竴涓弬鏁幫紝鍒欐槸浠ヨ/鍐欐櫘閫氭枃浠舵墦寮錛屽嵆錛?

銆銆file1.open("c:\\config.sys");<=>file1.open("c:\\config.sys",ios::in|ios::out,0);

銆銆鍙﹀錛宖stream榪樻湁鍜宱pen()涓鏍風殑鏋勯犲嚱鏁幫紝瀵逛簬涓婁緥錛屽湪瀹氫箟鐨勬椂渚氨鍙互鎵撳紑鏂囦歡浜嗭細

銆銆fstream file1("c:\\config.sys");

銆銆鐗瑰埆鎻愬嚭鐨勬槸錛宖stream鏈変袱涓瓙綾伙細ifstream(input file stream)鍜宱fstream(outpu file stream)錛宨fstream榛樿浠ヨ緭鍏ユ柟寮忔墦寮鏂囦歡錛岃宱fstream榛樿浠ヨ緭鍑烘柟寮忔墦寮鏂囦歡銆?

銆銆ifstream file2("c:\\pdos.def");//浠ヨ緭鍏ユ柟寮忔墦寮鏂囦歡
銆銆ofstream file3("c:\\x.123");//浠ヨ緭鍑烘柟寮忔墦寮鏂囦歡

銆銆鎵浠ワ紝鍦ㄥ疄闄呭簲鐢ㄤ腑錛屾牴鎹渶瑕佺殑涓嶅悓錛岄夋嫨涓嶅悓鐨勭被鏉ュ畾涔夛細濡傛灉鎯充互杈撳叆鏂瑰紡鎵撳紑錛屽氨鐢╥fstream鏉ュ畾涔夛紱濡傛灉鎯充互杈撳嚭鏂瑰紡鎵撳紑錛屽氨鐢╫fstream鏉ュ畾涔夛紱濡傛灉鎯充互杈撳叆/杈撳嚭鏂瑰紡鏉ユ墦寮錛屽氨鐢╢stream鏉ュ畾涔夈?

浜屻佸叧闂枃浠?
銆銆鎵撳紑鐨勬枃浠朵嬌鐢ㄥ畬鎴愬悗涓瀹氳鍏抽棴錛宖stream鎻愪緵浜嗘垚鍛樺嚱鏁癱lose()鏉ュ畬鎴愭鎿嶄綔錛屽錛歠ile1.close();灝辨妸file1鐩歌繛鐨勬枃浠跺叧闂?

涓夈佽鍐欐枃浠?
銆銆璇誨啓鏂囦歡鍒嗕負鏂囨湰鏂囦歡鍜屼簩榪涘埗鏂囦歡鐨勮鍙栵紝瀵逛簬鏂囨湰鏂囦歡鐨勮鍙栨瘮杈冪畝鍗曪紝鐢ㄦ彃鍏ュ櫒鍜屾瀽鍙栧櫒灝卞彲浠ヤ簡錛涜屽浜庝簩榪涘埗鐨勮鍙栧氨瑕佸鏉備簺錛屼笅瑕佸氨璇︾粏鐨勪粙緇嶈繖涓ょ鏂瑰紡

銆銆1銆佹枃鏈枃浠剁殑璇誨啓
銆銆鏂囨湰鏂囦歡鐨勮鍐欏緢綆鍗曪細鐢ㄦ彃鍏ュ櫒(<<)鍚戞枃浠惰緭鍑猴紱鐢ㄦ瀽鍙栧櫒(>>)浠庢枃浠惰緭鍏ャ傚亣璁緁ile1鏄互杈撳叆鏂瑰紡鎵撳紑錛宖ile2浠ヨ緭鍑烘墦寮銆傜ず渚嬪涓嬶細

銆銆file2<<"I Love You";//鍚戞枃浠跺啓鍏ュ瓧絎︿覆"I Love You"
銆銆int i;
銆銆file1>>i;//浠庢枃浠惰緭鍏ヤ竴涓暣鏁板箋?

銆銆榪欑鏂瑰紡榪樻湁涓縐嶇畝鍗曠殑鏍煎紡鍖栬兘鍔涳紝姣斿鍙互鎸囧畾杈撳嚭涓?6榪涘埗絳夌瓑錛屽叿浣撶殑鏍煎紡鏈変互涓嬩竴浜?

鎿嶇旱絎?鍔熻兘 杈撳叆/杈撳嚭
dec 鏍煎紡鍖栦負鍗佽繘鍒舵暟鍊兼暟鎹?杈撳叆鍜岃緭鍑?
endl 杈撳嚭涓涓崲琛岀騫跺埛鏂版嫻?杈撳嚭
ends 杈撳嚭涓涓┖瀛楃 杈撳嚭
hex 鏍煎紡鍖栦負鍗佸叚榪涘埗鏁板兼暟鎹?杈撳叆鍜岃緭鍑?
oct 鏍煎紡鍖栦負鍏繘鍒舵暟鍊兼暟鎹?杈撳叆鍜岃緭鍑?
setpxecision(int p) 璁劇疆嫻偣鏁扮殑綺懼害浣嶆暟 杈撳嚭

銆銆姣斿瑕佹妸123褰撲綔鍗佸叚榪涘埗杈撳嚭錛歠ile1<<<123;瑕佹妸3.1415926浠?浣嶇簿搴﹁緭鍑猴細FILE1<<<3.1415926銆?

銆銆2銆佷簩榪涘埗鏂囦歡鐨勮鍐?
鈶爌ut()
銆銆put()鍑芥暟鍚戞祦鍐欏叆涓涓瓧絎︼紝鍏跺師鍨嬫槸ofstream &put(char ch)錛屼嬌鐢ㄤ篃姣旇緝綆鍗曪紝濡俧ile1.put('c');灝辨槸鍚戞祦鍐欎竴涓瓧絎?c'銆?

鈶et()
銆銆get()鍑芥暟姣旇緝鐏墊椿錛屾湁3縐嶅父鐢ㄧ殑閲嶈澆褰㈠紡錛?

銆銆涓縐嶅氨鏄拰put()瀵瑰簲鐨勫艦寮忥細ifstream &get(char &ch);鍔熻兘鏄粠嫻佷腑璇誨彇涓涓瓧絎︼紝緇撴灉淇濆瓨鍦ㄥ紩鐢╟h涓紝濡傛灉鍒版枃浠跺熬錛岃繑鍥炵┖瀛楃銆傚file2.get(x);琛ㄧず浠庢枃浠朵腑璇誨彇涓涓瓧絎︼紝騫舵妸璇誨彇鐨勫瓧絎︿繚瀛樺湪x涓?

銆銆鍙︿竴縐嶉噸杞藉艦寮忕殑鍘熷瀷鏄細 int get();榪欑褰㈠紡鏄粠嫻佷腑榪斿洖涓涓瓧絎︼紝濡傛灉鍒拌揪鏂囦歡灝撅紝榪斿洖EOF錛屽x=file2.get();鍜屼笂渚嬪姛鑳芥槸涓鏍風殑銆?

銆銆榪樻湁涓縐嶅艦寮忕殑鍘熷瀷鏄細ifstream &get(char *buf,int num,char delim='\n')錛涜繖縐嶅艦寮忔妸瀛楃璇誨叆鐢?buf 鎸囧悜鐨勬暟緇勶紝鐩村埌璇誨叆浜?num 涓瓧絎︽垨閬囧埌浜嗙敱 delim 鎸囧畾鐨勫瓧絎︼紝濡傛灉娌′嬌鐢?delim 榪欎釜鍙傛暟錛屽皢浣跨敤緙虹渷鍊兼崲琛岀'\n'銆備緥濡傦細

銆銆file2.get(str1,127,'A');//浠庢枃浠朵腑璇誨彇瀛楃鍒板瓧絎︿覆str1錛屽綋閬囧埌瀛楃'A'鎴栬鍙栦簡127涓瓧絎︽椂緇堟銆?

鈶㈣鍐欐暟鎹潡
銆銆瑕佽鍐欎簩榪涘埗鏁版嵁鍧楋紝浣跨敤鎴愬憳鍑芥暟read()鍜寃rite()鎴愬憳鍑芥暟錛屽畠浠師鍨嬪涓嬶細

銆銆銆銆read(unsigned char *buf,int num);
銆銆銆銆write(const unsigned char *buf,int num);

銆銆read()浠庢枃浠朵腑璇誨彇 num 涓瓧絎﹀埌 buf 鎸囧悜鐨勭紦瀛樹腑錛屽鏋滃湪榪樻湭璇誨叆 num 涓瓧絎︽椂灝卞埌浜嗘枃浠跺熬錛屽彲浠ョ敤鎴愬憳鍑芥暟 int gcount();鏉ュ彇寰楀疄闄呰鍙栫殑瀛楃鏁幫紱鑰?write() 浠巄uf 鎸囧悜鐨勭紦瀛樺啓 num 涓瓧絎﹀埌鏂囦歡涓紝鍊煎緱娉ㄦ剰鐨勬槸緙撳瓨鐨勭被鍨嬫槸 unsigned char *錛屾湁鏃跺彲鑳介渶瑕佺被鍨嬭漿鎹€?

渚嬶細

銆銆銆銆unsigned char str1[]="I Love You";
銆銆銆銆int n[5];
銆銆銆銆ifstream in("xxx.xxx");
銆銆銆銆ofstream out("yyy.yyy");
銆銆銆銆out.write(str1,strlen(str1));//鎶婂瓧絎︿覆str1鍏ㄩ儴鍐欏埌yyy.yyy涓?
銆銆銆銆in.read((unsigned char*)n,sizeof(n));//浠巟xx.xxx涓鍙栨寚瀹氫釜鏁存暟錛屾敞鎰忕被鍨嬭漿鎹?
銆銆銆銆in.close();out.close();

鍥涖佹嫻婨OF
銆銆鎴愬憳鍑芥暟eof()鐢ㄦ潵媯嫻嬫槸鍚﹀埌杈炬枃浠跺熬錛屽鏋滃埌杈炬枃浠跺熬榪斿洖闈?鍊鹼紝鍚﹀垯榪斿洖0銆傚師鍨嬫槸int eof();

渚嬶細銆銆if(in.eof())ShowMessage("宸茬粡鍒拌揪鏂囦歡灝撅紒");

浜斻佹枃浠跺畾浣?
銆銆鍜孋鐨勬枃浠舵搷浣滄柟寮忎笉鍚岀殑鏄紝C++ I/O緋葷粺綆$悊涓や釜涓庝竴涓枃浠剁浉鑱旂郴鐨勬寚閽堛備竴涓槸璇繪寚閽堬紝瀹冭鏄庤緭鍏ユ搷浣滃湪鏂囦歡涓殑浣嶇疆錛涘彟涓涓槸鍐欐寚閽堬紝瀹冧笅嬈″啓鎿嶄綔鐨勪綅緗傛瘡嬈℃墽琛岃緭鍏ユ垨杈撳嚭鏃訛紝鐩稿簲鐨勬寚閽堣嚜鍔ㄥ彉鍖栥傛墍浠ワ紝C++鐨勬枃浠跺畾浣嶅垎涓鴻浣嶇疆鍜屽啓浣嶇疆鐨勫畾浣嶏紝瀵瑰簲鐨勬垚鍛樺嚱鏁版槸 seekg()鍜?seekp()錛宻eekg()鏄緗浣嶇疆錛宻eekp鏄緗啓浣嶇疆銆傚畠浠渶閫氱敤鐨勫艦寮忓涓嬶細

銆銆銆銆istream &seekg(streamoff offset,seek_dir origin);
銆銆銆銆ostream &seekp(streamoff offset,seek_dir origin);

銆銆streamoff瀹氫箟浜?iostream.h 涓紝瀹氫箟鏈夊亸縐婚噺 offset 鎵鑳藉彇寰楃殑鏈澶у鹼紝seek_dir 琛ㄧず縐誨姩鐨勫熀鍑嗕綅緗紝鏄竴涓湁浠ヤ笅鍊肩殑鏋氫婦錛?

ios::beg錛氥銆鏂囦歡寮澶?
ios::cur錛氥銆鏂囦歡褰撳墠浣嶇疆
ios::end錛氥銆鏂囦歡緇撳熬
銆銆榪欎袱涓嚱鏁頒竴鑸敤浜庝簩榪涘埗鏂囦歡錛屽洜涓烘枃鏈枃浠朵細鍥犱負緋葷粺瀵瑰瓧絎︾殑瑙i噴鑰屽彲鑳戒笌棰勬兂鐨勫間笉鍚屻?

渚嬶細

銆銆銆銆 file1.seekg(1234,ios::cur);//鎶婃枃浠剁殑璇繪寚閽堜粠褰撳墠浣嶇疆鍚戝悗縐?234涓瓧鑺?
銆銆銆銆 file2.seekp(1234,ios::beg);//鎶婃枃浠剁殑鍐欐寚閽堜粠鏂囦歡寮澶村悜鍚庣Щ1234涓瓧鑺?/setpxecision(5)>


]]>
C++闅忕瑪 涔?鍑芥暟妯℃澘(Function Template)1 (鍘熷垱)http://m.shnenglu.com/mumutou/archive/2007/01/10/17497.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Wed, 10 Jan 2007 06:36:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/10/17497.htmlhttp://m.shnenglu.com/mumutou/comments/17497.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/10/17497.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17497.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17497.html1.Function Template鍙互閽堝涓嶅悓鐨凾emplate arguments瀹屾垚涓涓郴鍒楃殑鍑芥暟
渚嬪
template<typename T>
inline T const & max(T const &a,T const &b)
{
聽聽聽return聽聽聽a>b?a:b;
}
2.Function template鍙互浠庝紶閫掕繃鏉ョ殑arguments鐨勭被鍨嬫潵鍏蜂綋鍖?br />int a = ::max(10,20);
閭d箞Function template 灝卞叿浣撳寲涓?br />inline int const& max(int const &a,int const & b)
3.浣犲彲浠ュ叿浣撴寚鍑哄畠鐨勫弬鏁扮被鍨?br />int a = ::max<int>(10,20);
4.Function template鍙互琚噸杞給verloaded
inline T const& max(T const &a,T const &b,T const &c)
{
聽聽聽return ::max(::max(a,b),c);
}
褰撶劧璁頒綇涓鐐癸紝閲嶈澆鐨勭浉浼肩偣瓚婂皬瓚婂ソ

]]>
C++闅忕瑪 涔?鍏充簬C++涓殑鎸囬拡闂 http://m.shnenglu.com/mumutou/archive/2007/01/09/17458.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Tue, 09 Jan 2007 05:48:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/09/17458.htmlhttp://m.shnenglu.com/mumutou/comments/17458.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/09/17458.html#Feedback1http://m.shnenglu.com/mumutou/comments/commentRss/17458.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17458.html 鍘熸枃鍑哄
http://community.csdn.net/Expert/topic/5279/5279199.xml?temp=.2457392
鍦ㄦ枃绔犱腑澶у鍦ㄨ璁轟竴涓棶棰?
濡傛灉娌℃湁瀛樺偍涓婃病鏈夊尯鍒殑璇?璇風湅涓嬩緥錛?br />float a=3.45;
int * p1=&a;
float * p2=&a;
cout<<"p1"<<"=>"<<*p1<<endl;
cout<<"p2"<<"=>"<<*p2<<endl;

緇撴灉鏄細
p1=>1107951616
p2=>3.45

涔︿笂鐨勮В閲婃槸錛歱1灝界涓巔2鐨勫湴鍧鐩稿悓錛屼絾瀹冩槸鏁村瀷鎸囬拡錛屽畠鎬繪槸璁塊棶璇ュ湴鍧涓殑鏁村瀷鏁般?br />棣栧厛鍦?2浣岰PU涓婇潰,鎸囬拡閮芥槸4浣嶇殑,渚嬪0xXX XX XX XX
閭d箞鏃㈢劧鎸囬拡鏄竴鏍風殑,閭d箞涓轟粈涔堟寚閽堢被鍨嬩笉鍚岀殑璇?璇誨嚭鏉ョ殑鏁版嵁灝卞彉浜嗘牱鍛?
榪欐槸緙栬瘧鍣ㄧ殑闂,渚嬪鎴戞湁涓緥瀛?br />
char *p = 'c';
int *p1 = 10;
鍦?2浣嶆満鍣ㄤ笂闈?br />榪欓噷闈1鏄寚鍚?瀛楄妭鐨刬nt鍙橀噺,鑰宲鏄寚鍚?瀛楄妭鐨刢har 鍙橀噺
榪欐牱緙栬瘧鍣ㄥ湪鐢╬1鍙橀噺鐨勬椂鍊?浼氬彇0x XX XX XX XX鍚庨潰鐨?涓瓧鑺?br />鑰宲鍙橀噺,鍙細鍙?x XX XX XX XX鍚庨潰鐨?涓瓧鑺?br />
鍥犱負鏈漢鐜板湪鍦ㄧ綉鍚ч噷闈涓嶇煡閬撳ぇ瀹舵湁娌℃湁鍦ㄧ綉鍚ч噷闈㈢鍒拌鏈塩++緙栬瘧鍣ㄧ殑璁$畻鏈篯
鏅氫笂鎴戠粰澶у涓涓緥瀛?鍙互浠庡叾鍐呭瓨涓婇潰鐪嬬殑寰堟竻妤?/font>



]]>
C++闅忕瑪 涔?娉涘瀷緙栫▼涓庤璁℃柊鎬濈淮(杞澆)http://m.shnenglu.com/mumutou/archive/2007/01/04/17238.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Thu, 04 Jan 2007 07:07:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/04/17238.htmlhttp://m.shnenglu.com/mumutou/comments/17238.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/04/17238.html#Feedback0http://m.shnenglu.com/mumutou/comments/commentRss/17238.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17238.html聽聽浣滆咃細寰愭櫙鍛?br />
聽聽聽姘歌繙璁頒綇錛岀紪鍐欎唬鐮佺殑瀹楁棬鍦ㄤ簬綆鍗曟槑浜嗭紝涓嶈浣跨敤璇█涓殑鍐峰兓鐗規э紝鑰嶅皬鑱槑錛岄噸瑕佺殑鏄紪鍐欎綘鐞嗚В鐨勪唬鐮侊紝鐞嗚В浣犵紪鍐欑殑浠g爜錛岃繖鏍蜂綘鍙兘浼氬仛鐨勬洿濂姐?
--- Herb Sutter

聽聽聽 1998騫達紝鍥介檯C++鏍囧噯姝e紡閫氳繃錛屾爣鍑嗗寲瀵笴++鏈閲嶈鐨勮礎鐚槸錛氬"寮哄ぇ鐨勬娊璞℃蹇?緇欎簬鏇存湁鍔涚殑鏀寔錛屼互闄嶄綆杞歡鐨勫鏉傚害錛孋++鎻愪緵浜嗕簩縐嶅姛鑳藉己澶х殑鎶借薄鏂規硶錛氶潰鍚戝璞$紪紼嬩笌娉涘瀷緙栫▼銆傞潰鍚戝璞$紪紼嬪ぇ瀹朵竴瀹氬緢鐔熸倝浜嗭紝榪欓噷灝變笉鍐嶅搯鍡︿簡銆傛彁鍒版硾鍨嬬紪紼?Generic Programming)錛屾湁鐨勪漢鍙兘榪樹笉澶啛鎮夛紝浣嗘槸鎻愬埌STL錛屼綘灝變竴瀹氫細鏈夋墍鑰抽椈浜嗐係TL(Standard Template Library錛屾爣鍑嗘ā鏉垮簱) 鍏跺疄灝辨槸娉涘瀷緙栫▼鐨勫疄鐜板搧錛孲TL鏄敱Alexander Stepanov(STL涔嬬埗)銆丏avid R Musser鍜孧eng Lee涓変綅澶у笀鍏卞悓鍙戝睍錛屼簬1994騫磋綰沖叆C++鏍囧噯紼嬪簭搴撱係TL铏界劧鍔犲叆C++鏍囧噯搴撶殑鏃墮棿鐩稿杈冩櫄錛屼絾瀹冨嵈鏄疌++鏍囧噯紼嬪簭搴撲腑鏈鍏烽潻鍛芥х殑閮ㄥ垎錛屽悓鏃朵篃鏄疌++鏍囧噯紼嬪簭搴撲腑鏈閲嶈鐨勭粍鎴愰儴鍒嗐傜敱浜庢柊鐨凜++鏍囧噯搴撲腑鍑犱箮姣忎竴鏍蜂笢瑗塊兘鏄敱妯℃澘(Template)鏋勬垚鐨勶紝褰撶劧錛孲TL涔熶笉浼氫緥澶栥傛墍浠ワ紝鍦ㄨ繖閲屾湁蹇呰鍏堟瑕佽鏄庝竴涓嬫ā鏉跨殑鏈夊叧姒傚康銆?

妯℃澘姒傚康
聽聽聽 閫氳繃浣跨敤妯℃澘鍙互浣跨▼搴忓叿鏈夋洿濂界殑浠g爜閲嶇敤鎬с傝浣忥紝妯℃澘鏄婧愪唬鐮佽繘琛岄噸鐢紝鑰屼笉鏄氳繃緇ф壙鍜岀粍鍚堥噸鐢ㄥ璞′唬鐮侊紝褰撶敤鎴蜂嬌鐢ㄦā鏉挎椂錛屽弬鏁扮敱緙栬瘧鍣ㄦ潵鏇挎崲銆傛ā鏉跨敱綾繪ā鏉垮拰鍑芥暟妯℃澘浜岄儴鍒嗙粍鎴愶紝浠ユ墍澶勭悊鐨勬暟鎹被鍨嬬殑璇存槑浣滀負鍙傛暟鐨勭被灝卞彨綾繪ā鏉匡紝鑰屼互鎵澶勭悊鐨勬暟鎹被鍨嬬殑璇存槑浣滀負鍙傛暟鐨勫嚱鏁板彨鍋氬嚱鏁版ā鏉褲傛ā鏉垮弬鏁板彲浠ョ敱綾誨瀷鍙傛暟鎴栭潪綾誨瀷鍙傛暟緇勬垚錛岀被鍨嬪弬鏁板彲鐢╟lass鍜宼ypename鍏抽敭瀛楁潵鎸囨槑錛屼簩鑰呯殑鎰忎箟鐩稿悓錛岄兘琛ㄧず鍚庨潰鐨勫弬鏁板悕浠h〃涓涓綔鍦ㄧ殑鍐呯疆鎴栫敤鎴峰畾涔夌殑綾誨瀷錛岄潪綾誨瀷鍙傛暟鐢變竴涓櫘閫氬弬鏁板0鏄庢瀯鎴愩備笅闈㈡槸綾繪ā鏉垮拰鍑芥暟妯℃澘鐨勭畝鍗曠敤娉曪細 template<class T1, int Size> class Queue // 綾繪ā鏉匡紝鍏朵腑T1涓虹被鍨嬪弬鏁幫紝Size涓洪潪綾誨瀷鍙傛暟 { public: explicit Queue():size_(Size){}; // 鏄懼紡鏋勯狅紝閬垮厤闅愬紡杞崲 鈥︹?template<class T2> void assign(T2 first,T2 last); // 鍐呭祵鍑芥暟妯℃澘 private: T* temp_; int size_; } // 綾繪ā鏉夸腑鍐呭祵鍑芥暟妯℃澘Compare鐨勫鍥村疄鐜?濡傚湪Queue綾誨瀹炵幇) template<class T1,int Size> template<class T2> void Queue<T1,Size>::assign (T2 first,T2 last) {}; // 妯℃澘鐨勪嬌鐢ㄦ柟娉?int ia[4] = {0,1,2,3}; Queue<int, sizeof(ia)/sizeof(int)> qi; qi.assign(ai,ai+4); 娉涘瀷緙栫▼
聽聽聽 娉涘瀷緙栫▼鍜岄潰鍚戝璞$紪紼嬩笉鍚岋紝瀹冨茍涓嶈姹備綘閫氳繃棰濆鐨勯棿鎺ュ眰鏉ヨ皟鐢ㄥ嚱鏁幫紝瀹冭浣犵紪鍐欏畬鍏ㄤ竴鑸寲騫跺彲閲嶅浣跨敤鐨勭畻娉曪紝鍏舵晥鐜囦笌閽堝鏌愮壒瀹氭暟鎹被鍨嬭岃璁$殑綆楁硶鐩稿悓銆傛硾鍨嬬紪紼嬬殑浠h〃浣滃搧STL鏄竴縐嶉珮鏁堛佹硾鍨嬨佸彲浜や簰鎿嶄綔鐨勮蔣浠剁粍浠躲傛墍璋撴硾鍨?Genericity)錛屾槸鎸囧叿鏈夊湪澶氱鏁版嵁綾誨瀷涓婄殕鍙搷浣滅殑鍚剰錛屼笌妯℃澘鏈変簺鐩鎬技銆係TL宸ㄥぇ錛岃屼笖鍙互鎵╁厖錛屽畠鍖呭惈寰堝璁$畻鏈哄熀鏈畻娉曞拰鏁版嵁緇撴瀯錛岃屼笖灝嗙畻娉曚笌鏁版嵁緇撴瀯瀹屽叏鍒嗙錛屽叾涓畻娉曟槸娉涘瀷鐨勶紝涓嶄笌浠諱綍鐗瑰畾鏁版嵁緇撴瀯鎴栧璞$被鍨嬬郴鍦ㄤ竴璧楓係TL浠ヨ凱浠e櫒(Iterators)鍜屽鍣?Containers)涓哄熀紜錛屾槸涓縐嶆硾鍨嬬畻娉?Generic Algorithms)搴擄紝瀹瑰櫒鐨勫瓨鍦ㄤ嬌榪欎簺綆楁硶鏈変笢瑗垮彲浠ユ搷浣溿係TL鍖呭惈鍚勭娉涘瀷綆楁硶(algorithms)銆佹硾鍨嬫寚閽?iterators)銆佹硾鍨嬪鍣?containers)浠ュ強鍑芥暟瀵硅薄(function objects)銆係TL騫墮潪鍙槸涓浜涙湁鐢ㄧ粍浠剁殑闆嗗悎錛屽畠鏄弿榪拌蔣浠剁粍浠舵娊璞¢渶姹傛潯浠剁殑涓涓瑙勮屾湁鏉$悊鐨勬灦鏋勩?
聽聽聽 榪唬鍣?Iterators)鏄疭TL鐨勬牳蹇冿紝瀹冧滑鏄硾鍨嬫寚閽堬紝鏄竴縐嶆寚鍚戝叾浠栧璞?objects)鐨勫璞★紝榪唬鍣ㄨ兘澶熼亶鍘嗙敱瀵硅薄鎵褰㈡垚鐨勫尯闂?range)銆傝凱浠e櫒璁╂垜浠緱浠ュ皢瀹瑰櫒(containers)涓庝綔鐢ㄥ叾涓婄殑綆楁硶(algorithms)鍒嗙錛屽ぇ澶氭暟鐨勭畻娉曡嚜韜茍涓嶇洿鎺ユ搷浣滀簬瀹瑰櫒涓婏紝鑰屾槸鎿嶄綔浜庤凱浠e櫒鎵褰㈡垚鐨勫尯闂翠腑銆傝凱浠e櫒涓鑸垎涓轟簲縐嶏細Input Iterator銆丱utput Iterator銆丗orward Iterator銆丅idirections Iterator鍜孯andom Access Iterator銆侷nput Iterator灝辮薄鍙粠杈撳叆鍖洪棿涓鍙栨暟鎹竴鏍鳳紝鍏鋒湁鍙鎬э紝灞炰簬鍗曞悜縐誨姩錛屽STL涓殑istream_iterator銆侽utput Iterator鍒氬ソ鐩稿弽錛屽彧鍐欏嚭鏁版嵁鍒拌緭鍑哄尯闂翠腑錛屽叿鏈夊彧鍐欐э紝灞炰簬鍗曞悜縐誨姩錛屽STL涓殑ostream_iterator銆侳orward Iterator涔熷睘浜庡崟鍚戠Щ鍔紝浣嗕笉鍚屼箣澶勬槸瀹冨悓鏃跺叿鏈夋暟鎹銆佸啓鎬с侭idirections Iterator濡傚悕縐版殫紺猴紝鏀寔鍙屽悜縐誨姩錛屼笉浣嗗彲浠ョ瘡鍔?++)鍙栧緱涓嬩竴涓厓绱狅紝鑰屼笖鍙互閫掑噺(--)鍙栧墠涓涓厓绱狅紝鏀寔璇匯佸啓鎬с俁andom Access Iterator鍔熻兘鏈寮猴紝闄や簡浠ヤ笂鍚勮凱浠e櫒鐨勫姛鑳藉錛岃繕鏀寔闅忔満鍏冪礌璁塊棶(p+=n)錛屼笅鏍?p[n])銆佺浉鍑?p1-p2)鍙婂墠鍚庢搴忓叧緋?p1<p2)絳夈侷nput Iterator鍜孫utput Iterator灞炰簬鍚岀瓑鏈寮辯殑浜岀榪唬鍣紝Forward Iterator鏄墠浜岃呭姛鑳界殑寮哄寲(refinement)錛孊idirections Iterator鍙堟槸Forward Iterator榪唬鍣ㄧ殑寮哄寲錛屾渶鍚嶳andom Access Iterator鍙堟槸Bidirections Iterator榪唬鍣ㄧ殑寮哄寲銆傚涓嬬畝鍗曠ず渚嬪睍紺篒nput Iterator銆丗orward Iterator銆丅idirections Iterator鍜孯adom Access Iterator榪唬鍣ㄧ殑鍔熻兘錛堝叾涓璱nput_iterator_tag絳夊甫tag瀛楃涓蹭負鍚勪笉鍚岃凱浠e櫒鐨勪笓灞炴爣璇嗭級錛?
1銆両nputIterator template<class InputIterator, class Distance> void advance(InputIterator& i, Distance n, input_iterator_tag) { for(; n>0; --n,++i){} // InputIterator鍏鋒湁++鎬?} 2銆丗orwardIterator template<class ForwardIterator, class Distance> void advance(ForwardIterator& i, Distance n,forward_iterator_tag) { advance(i, n, input_iterator_tag()); } 3銆丅idirectionalIterator template<class BidirectionalIterator, class Distance> void advance(BidirectionalIterator& i, Distance n, bidirectional_iterator_tag) { if(n>=0) // 鍏鋒湁++銆?-鎬?for(; n>0; --n,++i){} else for(; n>0; ++n,--i){} } 4銆丷andomAccessIterator template<class RandomAccessIterator, class Distance> void advance(RandomAccessIterator& i, Distance n, random_access_iterator_tag) { i += n; // 鍏鋒湁++銆?-銆?=絳夋?} 聽聽聽 鍑芥暟瀵硅薄(Function object)涔熺О浠垮嚱鏁?Functor)錛屾槸涓縐嶈兘浠ヤ竴鑸嚱鏁拌皟鐢ㄨ娉曟潵璋冪敤鐨勫璞★紝鍑芥暟鎸囬拡(Function pointer)鏄竴縐嶅嚱鏁板璞★紝鎵鏈夊叿鏈塷perator()鎿嶄綔絎﹂噸杞界殑鎴愬憳鍑芥暟涔熸槸鍑芥暟瀵硅薄銆傚嚱鏁板璞′竴鑸垎涓烘棤鍙傚嚱鏁?Generator)錛屽崟鍙傚嚱鏁?Unary Function)鍜屽弻鍙傚嚱鏁?Binary Function)涓夌褰㈠紡錛屽畠浠垎鍒兘浠()銆乫(x)鍜宖(x,y)鐨勫艦寮忚璋冪敤錛孲TL瀹氫箟鐨勫叾浠栨墍鏈夊嚱鏁板璞¢兘鏄繖涓夌姒傚康鐨勫己鍖栥傚涓嬬畝鍗曠ず渚嬪睍紺哄嚑縐嶅艦寮忕殑瀹炵幇錛?br />
1銆佹棤鍙?Generator)褰㈠紡 struct counter { typedef int result_type; counter(result_type init=0):n(init){} result_type operator() { return n++;} result_type n; } 2銆佸崟鍙?Unary Function)褰㈠紡 template<class Number> struct even // 鍑芥暟瀵硅薄even錛屾壘鍑虹涓涓伓鏁?{ bool operator()(Number x) const {return (x&1) == 0;} } // 浣跨敤綆楁硶find_if鍦ㄥ尯闂碅鍒癆+N涓壘鍒版弧瓚沖嚱鏁板璞ven鐨勫厓绱?int A[] = {1,0,3,4}; const int N=sizeof(A)/sizeof(int); find_if(A,A+N, even<int>()); 3銆佸弻鍙?Binary Function)褰㈠紡 struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1<s2) < 0;} }; // 浣跨敤鍑芥暟瀵硅薄ltstr錛岃緭鍑簊et瀹瑰櫒涓瑼鍜孊鐨勫茍闆?const int N=3 const char* a[N] = {"xjz","xzh","gh"}; const char* b[N]= {"jzx","zhx","abc"}; set<const char*,ltstr> A(a,a+N); set<const char*,ltstr> B(b,b+N); set_union(A.begin(),A.end(),B.begin(),B.end(), ostream_iterator<const char*>(cout," "), ltstr()); 聽聽聽 瀹瑰櫒(container)鏄竴縐嶅璞?object)錛屽彲浠ュ寘鍚茍綆$悊鍏跺畠鐨勫璞★紝騫舵彁渚涜凱浠e櫒(iterators)鐢ㄤ互瀹氬潃鍏舵墍鍖呭惈涔嬪厓绱犮傛牴鎹凱浠e櫒縐嶇被鐨勪笉鍚岋紝瀹瑰櫒涔熷垎涓哄嚑涓紝浠nput Iterator涓鴻凱浠e櫒鐨勪竴鑸琧ontainer錛屼互Forward Iterator涓鴻凱浠e櫒鐨凢orward Container錛屼互Bidirectional Iterator 涓鴻凱浠e櫒鐨凴eversible Container錛屼互Random Access Iterator涓鴻凱浠e櫒鐨凴andom Access Container銆係TL瀹氫箟浜岀澶у皬鍙彉鐨勫鍣細搴忓垪寮忓鍣?Sequence Container)鍜屽叧鑱斿紡瀹瑰櫒(Associative Container)搴忓垪寮忓鍣ㄥ寘鎷瑅ector銆乴ist鍜宒eque錛屽叧鑱斿紡瀹瑰櫒鍖呮嫭set銆乵ap銆乵ultiset鍜宮ultimap銆備互涓嬬ず渚嬬畝鍗曡鏄庨儴鍒嗗鍣ㄧ殑浣跨敤錛?1銆乿ector浣跨敤 // 灝咥涓互鍏冪礌5涓哄垎鍓茬偣錛屽垎鍒帓搴忥紝浣挎帓搴忓悗5鍚庨潰鐨勫厓绱犻兘澶т簬5涔嬪墠鐨勫厓绱?鍚庡尯闂翠笉鎺掑簭)錛?// 鐒跺悗杈撳嚭 int main() { int A[] = {7,2,6,4,5,8,9,3,1}; const int N=sizeof(A)/sizeof(int); vector<int> V(A,A+N); partial_sort(V,V+5,V+N); copy(V,V+N,ostream_iterator<int>(cout," ")); cout << endl; } 杈撳嚭鍙兘鏄細1 2 3 4 5 8 9 7 6 2銆乴ist浣跨敤 // 浜х敓涓絀簂ist錛屾彃鍏ュ厓绱犲悗鎺掑簭錛岀劧鍚庤緭鍑?int main() { list<int> L1; L1.push_back(0); L1.push_front(1); L1.insert(++L1.begin,3); L1.sort(); copy(L1.begin(),L1.end(),ostream_iterator<int>(cout," ")); } 杈撳嚭錛? 1 3 3銆乨eque浣跨敤 int main() { deque<int> Q; Q.push_back(3); Q.push_front(1); Q.insert(Q.begin()+1,2); Copy(Q.begin(),Q.end(),ostream_iterator<int>(cout," ")); } 杈撳嚭錛? 2 3 4銆乵ap浣跨敤 int main() { map<string,int> M; M.insert(make_pair("A",11); pair<map<string,int>::iterator, bool> p = M.insert(make_pair("C",5)); if(p.second) cout << p.first->second<<endl; } 杈撳嚭錛? 5銆乵ultiset浣跨敤 int main() { const int N = 5; int a[N] = {4,1,1,3,5}; multiset<int> A(a,a+N); copy(A.begin(),A.end(),ostream_iterator<int>(cout," ")); } 杈撳嚭錛? 1 3 4 5 璁捐鏂版濈淮
聽聽聽 灝嗚璁℃ā寮?design patterns)銆佹硾鍨嬬紪紼?generic programming)鍜岄潰鍚戝璞$紪紼?object-oriented programming)鏈夋満鐨勭粨鍚堣搗鏉ワ紝渚垮艦鎴愪簡璁捐鏂版濈淮銆傚叾涓紝璁捐妯″紡鏄粡榪囨彁鐐肩殑鍑鴻壊璁捐鏂規硶錛屽浜庡緢澶氭儏鍐典笅紕板埌鐨勯棶棰橈紝瀹冮兘鏄悎鐞嗚屽彲澶嶇敤鐨勮В鍐蟲柟妗堬紱娉涘瀷緙栫▼鏄竴縐嶅吀鑼?paradigm)錛屼笓娉ㄤ簬灝嗙被鍨嬫娊璞″寲錛屽艦鎴愬姛鑳介渶姹傛柟闈㈢殑涓涓簿緇嗛泦鍚堬紝騫跺埄鐢ㄨ繖浜涢渶姹傛潵瀹炵幇綆楁硶錛岀浉鍚岀殑綆楁硶鍙互榪愮敤浜庡箍娉涚殑綾誨瀷闆嗕腑錛屾墍璋撴硾鍨嬶紝灝辨槸鍏鋒湁鍦ㄥ縐嶆暟鎹被鍨嬩笂鐨嗗彲鎿嶄綔鐨勫惈鎰忥紱鏈鍚庡悓闈㈣薄瀵硅薄緙栫▼涓殑澶氭?polymorphism)鍜屾ā鏉?templates)絳夋妧鏈浉緇撳悎錛屼究鑾峰緱鏋侀珮灞傛涓婄殑鍏鋒湁鍙鐢ㄦх殑娉涘瀷緇勪歡銆傛硾鍨嬬粍浠墮鍏堝疄鐜頒簡璁捐妯″潡錛屽彲浠ヨ鐢ㄦ埛鎸囧畾綾誨瀷鍜岃涓猴紝浠庤屽艦鎴愬悎鐞嗙殑璁捐錛屼富瑕佺壒鐐規槸鐏墊椿銆侀氱敤鍜屾槗鐢ㄣ?
聽聽聽 policies鍜宲olicy綾伙紝鏄竴縐嶉噸瑕佺殑綾昏璁℃妧鏈紝鎵璋損olicy錛屾槸鐢ㄦ潵瀹氫箟涓涓被鎴栫被妯℃澘鐨勬帴鍙o紝璇ユ帴鍙g敱涓嬪垪涔嬩竴鎴栧叏閮ㄧ粍鎴愶細鍐呴儴綾誨瀷瀹氫箟銆佹垚鍛樺嚱鏁板拰鎴愬憳鍙橀噺銆傚熀浜巔olicy鐨勭被鐢辮澶氬皬鍨嬬被(縐頒負policies)緇勬垚錛屾瘡涓涓繖鏍風殑灝忓瀷綾誨彧璐熻矗鍗曠函濡傝涓烘垨緇撴瀯鐨勬煇涓鏂歸潰銆侾olicies鏈哄埗鐢辨ā鏉垮拰澶氶噸緇ф壙緇勬垚錛屽畠浠彲浠ヤ簰鐩告販鍚堟惌閰嶏紝浠庤屽艦鎴愯璁℃垘鐨勫鏍鋒э紝閫氳繃plicy綾伙紝涓嶄絾鍙互瀹氬埗琛屼負錛屼篃鍙互瀹氬埗緇撴瀯銆?

涓嬮潰綆鍗曚婦渚嬭鏄庢硾鍖栨濈淮鍜岄潰鍚戝璞℃濈淮鍦ㄩ儴鍒嗚璁℃ā寮忎腑鐨勮繍鐢ㄣ?

聽聽聽 Singletons璁捐妯″紡娉涘寲瀹炵幇 Singleton妯″紡鏄竴縐嶄繚璇佷竴涓璞?class)鍙湁涓涓疄浣擄紝騫朵負瀹冩彁渚涗竴涓叏灞璁塊棶鐐廣係ingleton鏄竴縐嶇粡榪囨敼榪涚殑鍏ㄥ眬鍙橀噺錛屾棦鍦ㄧ▼搴忎腑鍙兘鏈夊敮涓瀹炰綋鐨勭被鍨嬶紝瀹冪殑閲嶇偣涓昏闆嗕腑鍦ㄤ駭鐢熷拰綆$悊涓涓嫭绔嬪璞′笂錛岃屼笖涓嶅厑璁鎬駭鐢熷彟涓涓繖鏍風殑瀵硅薄銆?
鍏堣鎴戜滑鐪嬬湅涓鑸殑C++瀹炵幇鐨勫熀鏈墜娉曪紝涓嬮潰鏄疄鐜版簮鐮侊細 // Singleton.h鏂囦歡涓?class Singleton { public: static Singleton& Instance() { if(!pInstance_){ if(destroyed_){ // 寮曠敤鏄惁宸茬粡澶辨晥 OnDeadReference(); } else { Create(); // 絎竴嬈℃椂鍒涘緩瀹炰緥 } } return *pInstance_; } private: Singleton(); // 紱佹榛樿鏋勯?Singleton(const Singleton&); // 紱佹鎷瘋礉鏋勯?Singleton& operator= (const Singleton&);銆 // 紱佹璧嬪兼搷浣?static void Create() // 浼犲姞鍒涘緩鐨勫疄渚嬪紩鐢?{ static Singleton theInstance; pInstance_ = &theInstance; } static void OnDeadReference() { throw std::runtime_error(" 瀹炰緥琚笉姝e綋娑堟瘉"); } virtual ~Singleton() { pInstance- = 0; destroyed_ = true; } static Singleton *pInstance_; static bool destroyed_; } // Singleton.cpp涓潤鎬佹垚鍛樺彉閲忓垵濮嬪寲 Singleton* Singleton::pInstance_ = 0; Bool Singleton::destroyed_ = false; 聽聽聽 濡備笂鎵紺猴紝Singleton妯″紡瀹炵幇涓彧鏈変竴涓猵ublic鎴愬憳Instance()鐢ㄦ潵絎竴嬈′嬌鐢ㄦ椂鍒涘緩鍗曚竴瀹炰緥錛屽綋絎簩嬈′嬌鐢ㄦ椂闈欐佸彉閲忓皢宸茬粡琚瀹氬ソ錛屼笉浼氬啀嬈″垱寤哄疄渚嬨傝繕灝嗛粯璁ゆ瀯閫犲嚱鏁般佹嫹璐濇瀯閫犲嚱鏁板拰璧嬪兼搷浣滅鏀懼湪private涓紝鐩湴鏄笉璁╃敤鎴蜂嬌鐢ㄥ畠浠傚彟澶栵紝涓洪伩鍏嶅疄渚嬫剰澶栨秷姣佸悗鍐嶅疄渚嬪寲鎯呭喌錛屽姞鍏ラ潤鎬佸竷灝斿彉閲廳estroy_鏉ヨ繘琛屽垽鏂槸鍚﹀嚭閿欙紝浠庤岃揪鍒扮ǔ瀹氭с?br />聽聽聽 浠庝笂闈竴鑸疄鐜板彲浠ョ湅鍑篠ingleton妯″紡瀹炵幇涓昏鍦ㄤ簬鍒涘緩(Creation)鏂歸潰鍜岀敓瀛樻湡(Lifetime)鏂歸潰錛屾棦鍙互閫氳繃鍚勭鏂規硶鏉ュ垱寤篠ingleton銆侰reation蹇呯劧鑳藉垱寤哄拰鎽ф瘉瀵硅薄錛屽繀鐒惰寮鏀捐繖涓や釜鐩稿簲鍑芥暟錛屽皢鍒涘緩浣滀負鐙珛絳栫暐鍒嗙寮鏉ユ槸蹇呴渶鐨勶紝榪欐牱浣犲氨鍙互鍒涘緩澶氭佸璞′簡錛屾墍浠ユ硾鍖朣ingleton騫朵笉鎷ユ湁Creator瀵硅薄錛屽畠琚斁鍦–reationPolicy<T>綾繪ā鏉夸箣涓傜敓鍛芥湡鏄寚瑕侀伒寰狢++瑙勫垯錛屽悗鍒涘緩閮藉厛鎽ф瘉錛岃礋璐g▼搴忕敓鍛芥湡鏌愪竴鏃跺埢鎽ф瘉Singleton瀵硅薄銆?

涓嬮潰鏄竴涓畝鍗曠殑娉涘寲Singleton妯″紡鐨勫疄鐜?涓嶈冭檻綰跨▼鍥犵礌) template < class T, template<class> calss CreationPolicy = CreateUsingNew, template<class> class LifetimePolicy=DefaultLifetime, > classs SingletonHolder { public: static T& Instance() { if(!pInstance_) { if(destroyed_) { LifetimePolicy<T>::OnDeadReference(); destroyed_ = false; } pInstance_ = CreationPolicy<T>::Create(); LifetimePolicy<T>::SchedultCall(&DestorySingleton); } return *pInstance_; } private: static void DestroySinleton() { assert(!destroyed_); CreationPlicy<T>::Destroy(pInstance_); pInstance_ = 0; destroyed_ = true; } SingletonHolder(); SingletonHolder (const SingletonHolder &); SingletonHolder & operator= (const SingletonHolder &);銆 Static T* pInstance_; Static bool destroyed_; }; 聽聽聽 Instance()鏄疭ingletonHolder寮鏀劇殑鍞竴涓涓猵ublic鍑芥暟錛屽畠鍦–reationPolicy銆丩ifetimePolicy涓墦閫犱簡涓灞傚澹熾傚叾涓ā鏉垮弬鏁扮被鍨婽錛屾帴鏀剁被鍚嶏紝鏃㈤渶瑕佽繘琛孲ingleton鐨勭被銆傛ā鏉垮弬鏁板唴鐨勭被妯℃澘緙虹渷鍙傛暟CreateUsingNew鏄寚閫氳繃new鎿嶄綔絎﹀拰榛樿鏋勯犲嚱鏁版潵浜х敓瀵硅薄錛孌efaultLifetime鏄氳繃C++瑙勫垯鏉ョ鐞嗙敓鍛芥湡銆侺ifetimePolicy<T>涓湁浜屼釜鎴愬憳鍑芥暟錛孲cheduleDestrution()鍑芥暟鎺ュ彈涓涓嚱鏁版寚閽堬紝鎸囧悜鏋愭瀯鎿嶄綔鐨勫疄闄呮墽琛屽嚱鏁幫紝濡備笂闈estorySingleton鏋愭瀯鍑芥暟錛汷nDeadReference()鍑芥暟鍚屼笂闈竴鑸珻++涓悓鍚嶅嚱鏁扮浉鍚岋紝鏄礋璐e彂鐜板け鏁堝疄渚嬫潵鎶涘嚭寮傚父鐨勩侰reationPlicy<T>涓殑Create()鍜孌estroy()涓ゅ嚱鏁版槸鐢ㄦ潵鍒涘緩騫舵懅姣佸叿浣撳璞$殑銆?

涓嬮潰鏄笂榪版硾鍖朣ingleton妯″紡瀹炵幇鐨勪嬌鐢細

1銆佸簲鐢ㄤ竴 class A{}; typedef SingletonHolder<A, CreateUsingNew> SingleA; 2銆佸簲鐢ㄤ簩 class A{}; class Derived : public A {}; template<class T> struct MyCreator : public CreateUsingNew<T> { static T* Create() { return new Derived; } static void Destroy(T* pInstance) { delete pInstance; } } typedef SingletonHolder<A,MyCreator> SingleA; 聽聽聽 閫氳繃涓婇潰紺轟緥鍙互鐪嬪嚭錛?SingletonHolder閲囩敤鍩轟簬plicy璁捐瀹炵幇錛屽畠灝哠ingleton瀵硅薄鍒嗚В涓烘暟涓猵olicies錛屾ā鏉垮弬鏁扮被涓瑿reationPolicy鍜孡ifetimePolicy鐩稿綋浜庝簩涓猵olicies灝佽浣撱傚埄鐢ㄥ畠浠彲浠ュ崗鍔╁埗浣滃嚭浣跨敤鑰呰嚜瀹氫箟鐨凷ingleton瀵硅薄錛屽悓鏃惰繕棰勭暀浜嗚皟鏁村拰鎵╁睍鐨勭┖闂淬傜敱姝よ屽緱錛屾硾鍨嬬粍浠?generic components)錛屾槸涓縐嶅彲澶嶇敤鐨勮璁℃ā鏉匡紝緇撳悎浜嗘ā鏉垮拰妯″紡錛屾槸C++涓垱閫犲彲鎵╁厖璁捐鐨勬柊鏂規硶錛屾彁渚涗簡浠庤璁″埌浠g爜鐨勭畝鏄撹繃娓★紝甯姪鎴戜滑緙栧啓娓呮櫚銆佺伒媧匯侀珮搴﹀彲澶嶇敤鐨勪唬鐮併?

鍙傝冩枃鐚?
  • C++ Primer(絎笁鐗? --- 娼樼埍姘戠瓑璇?
  • Effective C++(絎簩鐗? --- 渚嵎璇?
  • More Effective C++ --- 渚嵎璇?
  • Exceptional C++ --- 鍗撳皬娑涜瘧
  • More Exceptional C++ --- 鏂兼槬鏅瘧
  • 娣卞害鎺㈢儲C++瀵硅薄妯″瀷 --- 渚嵎璇?
  • 娉涘瀷緙栫▼涓嶴TL --- 渚嵎璇?
  • C++ STL紼嬪簭鍛樺紑鍙戞寚鍗?--- 褰湪鏍圭瓑綆?
  • 璁捐妯″紡錛氬彲澶嶇敤闈㈠悜瀵硅薄杞歡鐨勫厓绱?--- 鏉庤嫳鍐涚瓑璇?
  • C++璁捐鏂版濈淮 --- 渚嵎絳夎瘧


鏈ㄦ湪澶?/a> 2007-01-04 15:07 鍙戣〃璇勮
]]>C++闅忕瑪 涔?STL[vector]鐨勫瓨鍌ㄦ妧鏈?鍘熷垱)http://m.shnenglu.com/mumutou/archive/2007/01/04/17231.html鏈ㄦ湪澶?/dc:creator>鏈ㄦ湪澶?/author>Thu, 04 Jan 2007 06:26:00 GMThttp://m.shnenglu.com/mumutou/archive/2007/01/04/17231.htmlhttp://m.shnenglu.com/mumutou/comments/17231.htmlhttp://m.shnenglu.com/mumutou/archive/2007/01/04/17231.html#Feedback1http://m.shnenglu.com/mumutou/comments/commentRss/17231.htmlhttp://m.shnenglu.com/mumutou/services/trackbacks/17231.html棣栧厛鎴戜滑鍏堟潵鐪婨xample Code:
#include <vector>
#include <iostream>
#include <memory>
using namespace std;
void main()
{
聽vector<int> v;
//聽cout<<v.allocator;
聽v.push_back(0);
聽v.push_back(1);
聽v.push_back(2);
聽v.push_back(3);
聽v.push_back(4);
聽v.push_back(5);
聽cout<<v.max_size();
}
鍒╃敤VC6.0鐨勫唴瀛樿皟璇?br />聽v.push_back(0);涔嬪悗
//_First榪唬鍣?0481B40
//_Last榪唬鍣?0481B44
//_End榪唬鍣?04B1B44
聽v.push_back(1);涔嬪悗
//_First榪唬鍣?0481B00
//_Last榪唬鍣?0481B08
//_End榪唬鍣?04B1B08
涓轟粈涔堝湪鎵ц涓嬈ush_back涔嬪悗,榪唬鍣ㄥ叏閮ㄤ細鍙樺憿?
涓嬮潰鎴戜滑鐪嬬湅P.J. Plauger鐨勪唬鐮?br />聽void insert(iterator _P, size_type _M, const _Ty& _X)
聽聽{if (_End - _Last < _M)
聽聽聽{size_type _N = size() + (_M < size() ? size() : _M);
聽聽聽iterator _S = allocator.allocate(_N, (void *)0);
聽聽聽iterator _Q = _Ucopy(_First, _P, _S);
聽聽聽_Ufill(_Q, _M, _X);
聽聽聽_Ucopy(_P, _Last, _Q + _M);
聽聽聽_Destroy(_First, _Last);
聽聽聽allocator.deallocate(_First, _End - _First);
聽聽聽_End = _S + _N;
聽聽聽_Last = _S + size() + _M;
聽聽聽_First = _S; }
聽聽else if (_Last - _P < _M)
聽聽聽{_Ucopy(_P, _Last, _P + _M);
聽聽聽_Ufill(_Last, _M - (_Last - _P), _X);
聽聽聽fill(_P, _Last, _X);
聽聽聽_Last += _M; }
聽聽else if (0 < _M)
聽聽聽{_Ucopy(_Last - _M, _Last, _Last);
聽聽聽copy_backward(_P, _Last - _M, _Last);
聽聽聽fill(_P, _P + _M, _X);
聽聽聽_Last += _M; }}

鍏朵腑M = 1;
褰揰End - _Last < _M鏃?灝辮閲嶆柊鍒嗛厤鍐呭瓨浜?鍝﹀師鏉ユ椂榪欐牱鐨?
[涓漢璁や負,鍦ㄦ柟渚胯皟璇曠殑鏃跺?鍙互鎶奀:\MSDEV\VC98\Include\涓嬮潰鐨剉ector鏂囦歡涓殑protected鏀規垚public:]
涓嬮潰鎴戠粰鍑哄湪5嬈℃彃鍏ヤ箣鍚庡叾鍐呭瓨鍒嗛厤
push_back(2)
//00481AC0
//00481ACC
//00481AD0
push_back(3);
//00481AC0
//00481AD0
//00481AD0
push_back(4);
//00481B20
//00481B34
//00481B40
push_back(5);
//00481B20
//00481B38
//00481B40
娉ㄦ剰娌℃湁,_Last - _First涔嬪悗鐨勬槑鏄炬槸size() * 4
[娉?鍦╒C6.0鐨凷TL鐗堟湰鏄噰鐢ㄧ殑PJSTL鐗堟湰,鏄竴縐嶅叕璁ゆ渶鍨冨溇鐨凷TL鐗堟湰
鍦–++ Builder涓殑STL鐗堟湰鏄噰鐢ㄧ殑RW鐗堟湰,Rouge Wave鍏徃
鍦╱nix涓嬮潰GCC閲囩敤鐨勬槸SGI Silicon Graphics Computer System Inc鍏徃STL鐗堟湰,鎴戣涓哄湪鍙鎬?鍙Щ妞嶆ф柟闈㈡渶濂界殑涓涓増鏈琞


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品久久二区二区| 欧美一区二区视频97| 欧美激情一区二区三级高清视频| 亚洲欧美一区二区激情| 亚洲永久精品大片| 香蕉尹人综合在线观看| 久久精品主播| 欧美成人激情在线| 欧美日韩一区二| 国产老女人精品毛片久久| 国产一区二区三区四区hd| 在线成人国产| 亚洲一区二区黄色| 久久人人爽国产| 亚洲人成网站在线播| 一本到12不卡视频在线dvd| 亚洲欧美激情一区二区| 久久天堂av综合合色| 欧美日韩第一区| 好吊一区二区三区| 亚洲一级黄色av| 女同一区二区| 亚洲免费一级电影| 欧美阿v一级看视频| 国产精品视频99| 亚洲美女精品一区| 久久国产精品网站| 亚洲全部视频| 久久aⅴ国产欧美74aaa| 欧美日韩免费观看一区| 一色屋精品视频在线观看网站| 在线综合亚洲欧美在线视频| 久久综合99re88久久爱| 亚洲午夜精品福利| 欧美夫妇交换俱乐部在线观看| 国产日韩一区欧美| 亚洲深夜影院| 亚洲国产高清一区二区三区| 欧美一区国产一区| 国产精品人人爽人人做我的可爱| 亚洲伦理在线免费看| 老司机午夜精品| 亚洲欧美日韩国产成人| 欧美日韩综合精品| av成人毛片| 亚洲激情视频网站| 欧美freesex交免费视频| 一区二区三区我不卡| 久久久久久网站| 香蕉乱码成人久久天堂爱免费| 国产精品国产自产拍高清av| 一本色道久久综合亚洲精品小说 | 麻豆国产精品va在线观看不卡| 国产精品一区二区久久久| 99视频国产精品免费观看| 欧美刺激午夜性久久久久久久| 亚洲男女自偷自拍| 国产精品一区二区欧美| 亚洲欧美伊人| 亚洲欧美成人一区二区三区| 国产精品二区在线| 亚洲欧美激情诱惑| 亚洲午夜高清视频| 国产美女搞久久| 欧美综合第一页| 欧美一区二区三区日韩视频| 国产区欧美区日韩区| 久久精品国产一区二区三| 小处雏高清一区二区三区| 国产免费成人在线视频| 欧美制服第一页| 久久久.com| 亚洲激情亚洲| 亚洲理论在线| 国产欧美一区二区精品性| 久久国产日韩欧美| 久久久www免费人成黑人精品| 精品88久久久久88久久久| 欧美va亚洲va国产综合| 欧美99在线视频观看| 亚洲一区二区在线观看视频| 午夜精品久久久久久久99黑人 | 亚洲国产成人精品久久| 欧美韩国日本综合| 欧美日韩精品国产| 久久国产综合精品| 欧美成人午夜激情在线| 亚洲欧美另类国产| 久久久国产视频91| 日韩视频在线免费| 午夜精品一区二区三区在线 | 亚洲国产中文字幕在线观看| 亚洲精品日韩综合观看成人91| 国产精品免费小视频| 狂野欧美一区| 欧美视频手机在线| 蜜臀va亚洲va欧美va天堂| 欧美精品啪啪| 久久精品一区二区国产| 欧美精品aa| 久久一区二区精品| 国产精品九九久久久久久久| 欧美18av| 国产日韩在线看| 99精品国产热久久91蜜凸| 激情欧美日韩| 亚洲欧美日韩国产综合| 亚洲卡通欧美制服中文| 欧美在线亚洲综合一区| 亚洲午夜激情网站| 欧美成人免费全部观看天天性色| 欧美在线免费播放| 欧美日韩天堂| 亚洲国产精品久久久久| 激情久久久久久| 欧美一区二区三区的| 亚洲韩国青草视频| 韩日在线一区| 亚洲欧美资源在线| 亚洲综合精品| 在线精品福利| 亚洲人成人77777线观看| 伊人久久男人天堂| 欧美一区二区三区精品电影| 亚洲系列中文字幕| 欧美日韩精品欧美日韩精品| 欧美电影在线观看完整版| 国语对白精品一区二区| 亚洲免费伊人电影在线观看av| 日韩一级二级三级| 欧美大片网址| 亚洲激情av在线| 亚洲人成人77777线观看| 久久久久久久久久久一区 | 亚洲国产成人久久综合| 在线成人国产| 免费成人激情视频| 欧美激情自拍| 亚洲欧洲日韩在线| 欧美激情bt| 亚洲精品中文在线| 亚洲天堂av高清| 国产精品久久久久久久久久久久久久 | 久久激情视频| 久热精品视频在线免费观看| 一区二区在线不卡| 欧美成人资源| 一区二区日韩欧美| 欧美一乱一性一交一视频| 国产欧美精品国产国产专区| 欧美在线观看视频一区二区| 麻豆freexxxx性91精品| 亚洲人成艺术| 国产精品国产三级国产| 午夜精品久久久久| 欧美/亚洲一区| 一区二区高清视频| 国产酒店精品激情| 欧美成人a∨高清免费观看| 亚洲精品一区在线| 欧美在线视频观看免费网站| 伊人男人综合视频网| 欧美大片一区| 亚洲欧美第一页| 美女视频一区免费观看| 99re6热在线精品视频播放速度| 国产精品啊啊啊| 久久视频精品在线| 一区二区三区高清不卡| 久久综合中文| 亚洲一区久久| 在线成人性视频| 国产精品激情电影| 老司机67194精品线观看| 亚洲午夜精品久久| 亚洲电影免费观看高清完整版在线| 国产精品99久久久久久白浆小说| 国产一区二区你懂的| 亚洲欧美日韩成人| 国产最新精品精品你懂的| 你懂的成人av| 亚洲午夜91| 亚洲黄色有码视频| 久久久久久婷| 亚洲永久免费视频| 亚洲欧洲精品成人久久奇米网| 国产精品视频导航| 欧美人与性动交a欧美精品| 欧美在线观看网站| 亚洲一区成人| 99re热这里只有精品视频 | 一区二区激情| 在线欧美一区| 国产精品一区二区你懂的| 欧美日本在线看| 毛片一区二区三区| 久久欧美肥婆一二区| 欧美一区二区高清| 亚洲综合日韩中文字幕v在线| 最新中文字幕一区二区三区|