锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品美女久久久久网,久久人人爽人人爽人人片AV麻豆 ,久久免费99精品国产自在现线 http://www.shnenglu.com/tianbianlan/category/10960.htmlzh-cnSun, 05 May 2013 13:23:31 GMTSun, 05 May 2013 13:23:31 GMT60B+鏁扮殑瀹炵幇--浼樼浠g爜http://www.shnenglu.com/tianbianlan/archive/2011/11/08/159814.html澶╄竟钃?/dc:creator>澶╄竟钃?/author>Tue, 08 Nov 2011 04:32:00 GMThttp://www.shnenglu.com/tianbianlan/archive/2011/11/08/159814.htmlhttp://www.shnenglu.com/tianbianlan/comments/159814.htmlhttp://www.shnenglu.com/tianbianlan/archive/2011/11/08/159814.html#Feedback0http://www.shnenglu.com/tianbianlan/comments/commentRss/159814.htmlhttp://www.shnenglu.com/tianbianlan/services/trackbacks/159814.htmlhttp://idlebox.net/2007/stx-btree/


]]>
[杞琞C++ 瀵硅薄鐨勫唴瀛樺竷灞 http://www.shnenglu.com/tianbianlan/archive/2010/04/29/113987.html澶╄竟钃?/dc:creator>澶╄竟钃?/author>Thu, 29 Apr 2010 11:30:00 GMThttp://www.shnenglu.com/tianbianlan/archive/2010/04/29/113987.htmlhttp://www.shnenglu.com/tianbianlan/comments/113987.htmlhttp://www.shnenglu.com/tianbianlan/archive/2010/04/29/113987.html#Feedback0http://www.shnenglu.com/tianbianlan/comments/commentRss/113987.htmlhttp://www.shnenglu.com/tianbianlan/services/trackbacks/113987.html
2008-11-14 浣滆咃細闄堢殦 鏉ユ簮錛歝sdn


鍓嶈█

07騫?2鏈堬紝鎴戝啓浜嗕竴綃囥奀++铏氬嚱鏁拌〃瑙f瀽銆嬬殑鏂囩珷錛屽紩璧蜂簡澶у鐨勫叴瓚c傛湁寰堝鏈嬪弸瀵規垜鐨勬枃绔犵暀浜嗚█錛屾湁榧撳姳鎴戠殑錛屾湁鎵硅瘎鎴戠殑錛岃繕鏈夊緢澶氶棶闂鐨勩傛垜鍦ㄨ繖閲屼竴騫跺澶у鐨勭暀璦琛ㄧず鎰熻阿銆傝繖涔熸槸鎴戜負浠涔堝啀鍐欎竴綃囩畫璦鐨勫師鍥犮傚洜涓猴紝鍦ㄤ笂涓綃囨枃绔犱腑錛屾垜鐢ㄤ簡鐨勭ず渚嬮兘鏄潪甯哥畝鍗曠殑錛屼富瑕佹槸涓轟簡璇存槑涓浜涙満鐞嗕笂鐨勯棶棰橈紝涔熸槸涓轟簡鍥句竴浜涜〃杈句笂鏂逛究鍜岀畝鍗曘備笉鎯籌紝榪欑瘒鏂囩珷鎴愪負浜嗘墦寮C++瀵硅薄妯″瀷鍐呭瓨甯冨眬鐨勪竴涓紩瀛愶紝寮曞彂浜嗗ぇ瀹跺C++瀵硅薄鐨勬洿娣卞眰嬈$殑璁ㄨ銆傚綋鐒訛紝鎴戜箣鍓嶇殑鏂囩珷榪樻湁寰堝鏂歸潰娌℃湁娑夊強錛屼粠鎴戜釜浜烘劅瑙変笅鏉ワ紝鍦ㄨ皥璁鴻櫄鍑芥暟琛ㄩ噷錛岃嚦灝戞湁浠ヤ笅榪欎簺鍐呭娌℃湁娑夊強錛?/p>

1錛夋湁鎴愬憳鍙橀噺鐨勬儏鍐點?/p>

2錛夋湁閲嶅緇ф壙鐨勬儏鍐點?/p>

3錛夋湁铏氭嫙緇ф壙鐨勬儏鍐點?/p>

4錛夋湁閽葷煶鍨嬭櫄鎷熺戶鎵跨殑鎯呭喌銆?/p>

榪欎簺閮芥槸鎴戞湰綃囨枃绔犻渶瑕佸悜澶у璇存槑鐨勪笢瑗褲傛墍浠ワ紝榪欑瘒鏂囩珷灝嗕細鏄奀++铏氬嚱鏁拌〃瑙f瀽銆嬬殑涓涓畫綃囷紝涔熸槸涓綃囬珮綰ц繘闃剁殑鏂囩珷銆傛垜甯屾湜澶у鍦ㄨ榪欑瘒鏂囩珷涔嬪墠瀵笴++鏈変竴瀹氱殑鍩虹鍜屼簡瑙o紝騫惰兘鍏堣鎴戠殑涓婁竴綃囨枃绔犮傚洜涓鴻繖綃囨枃绔犵殑娣卞害鍙兘浼氭瘮杈冩繁錛岃屼笖浼氭瘮杈冩潅涔憋紝鎴戝笇鏈涗綘鍦ㄨ鏈瘒鏂囩珷鏃朵笉浼氭湁澶ц剳鎬濈淮绱婁貢瀵艱嚧澶ц剳姝繪満鐨勬儏鍐點?-)

瀵硅薄鐨勫獎鍝嶅洜绱?/p>

綆鑰岃█涔嬶紝鎴戜滑涓涓被鍙兘浼氭湁濡備笅鐨勫獎鍝嶅洜绱狅細

1錛夋垚鍛樺彉閲?/p>

2錛夎櫄鍑芥暟錛堜駭鐢熻櫄鍑芥暟琛級

3錛夊崟涓緇ф壙錛堝彧緇ф壙浜庝竴涓被錛?/p>

4錛夊閲嶇戶鎵匡紙緇ф壙澶氫釜綾伙級

5錛夐噸澶嶇戶鎵匡紙緇ф壙鐨勫涓埗綾諱腑鍏剁埗綾繪湁鐩稿悓鐨勮秴綾伙級

6錛夎櫄鎷熺戶鎵匡紙浣跨敤virtual鏂瑰紡緇ф壙錛屼負浜嗕繚璇佺戶鎵垮悗鐖剁被鐨勫唴瀛樺竷灞鍙細瀛樺湪涓浠斤級

涓婅堪鐨勪笢瑗塊氬父鏄疌++榪欓棬璇█鍦ㄨ涔夋柟闈㈠瀵硅薄鍐呴儴鐨勫獎鍝嶅洜绱狅紝褰撶劧錛岃繕浼氭湁緙栬瘧鍣ㄧ殑褰卞搷錛堟瘮濡備紭鍖栵級錛岃繕鏈夊瓧鑺傚榻愮殑褰卞搷銆傚湪榪欓噷鎴戜滑閮戒笉璁ㄨ錛屾垜浠彧璁ㄨC++璇█涓婄殑褰卞搷銆?/p>

鏈瘒鏂囩珷鐫閲嶈璁轟笅榪板嚑涓儏鍐典笅鐨凜++瀵硅薄鐨勫唴瀛樺竷灞鎯呭喌銆?/p>

1錛夊崟涓鐨勪竴鑸戶鎵匡紙甯︽垚鍛樺彉閲忋佽櫄鍑芥暟銆佽櫄鍑芥暟瑕嗙洊錛?/p>

2錛夊崟涓鐨勮櫄鎷熺戶鎵匡紙甯︽垚鍛樺彉閲忋佽櫄鍑芥暟銆佽櫄鍑芥暟瑕嗙洊錛?/p>

3錛夊閲嶇戶鎵匡紙甯︽垚鍛樺彉閲忋佽櫄鍑芥暟銆佽櫄鍑芥暟瑕嗙洊錛?/p>

4錛夐噸澶嶅閲嶇戶鎵匡紙甯︽垚鍛樺彉閲忋佽櫄鍑芥暟銆佽櫄鍑芥暟瑕嗙洊錛?/p>

5錛夐捇鐭沖瀷鐨勮櫄鎷熷閲嶇戶鎵匡紙甯︽垚鍛樺彉閲忋佽櫄鍑芥暟銆佽櫄鍑芥暟瑕嗙洊錛?/p>

鎴戜滑鐨勭洰鏍囧氨鏄紝璁╀簨鎯呰秺鏉ヨ秺澶嶆潅銆?/p>

鐭ヨ瘑澶嶄範

鎴戜滑綆鍗曞湴澶嶄範涓涓嬶紝鎴戜滑鍙互閫氳繃瀵硅薄鐨勫湴鍧鏉ュ彇寰楄櫄鍑芥暟琛ㄧ殑鍦板潃錛屽錛?/p>

typedef void(*Fun)(void);

Base b;

Fun pFun = NULL;

cout << "铏氬嚱鏁拌〃鍦板潃錛? << (int*)(&b) << endl;

cout << "铏氬嚱鏁拌〃 鈥?絎竴涓嚱鏁板湴鍧錛? << (int*)*(int*)(&b) << endl;

// Invoke the first virtual function

pFun = (Fun)*((int*)*(int*)(&b));

pFun();

鎴戜滑鍚屾牱鍙互鐢ㄨ繖縐嶆柟寮忔潵鍙栧緱鏁翠釜瀵硅薄瀹炰緥鐨勫唴瀛樺竷灞銆傚洜涓鴻繖浜涗笢瑗垮湪鍐呭瓨涓兘鏄繛緇垎甯冪殑錛屾垜浠彧闇瑕佷嬌鐢ㄩ傚綋鐨勫湴鍧鍋忕Щ閲忥紝鎴戜滑灝卞彲浠ヨ幏寰楁暣涓唴瀛樺璞$殑甯冨眬銆?/p>

鏈瘒鏂囩珷涓殑渚嬬▼鎴栧唴瀛樺竷灞涓昏浣跨敤濡備笅緙栬瘧鍣ㄥ拰緋葷粺錛?/p>

1錛塛indows XP 鍜?VC++ 2003

2錛塁ygwin 鍜?G++ 3.4.4

鍗曚竴鐨勪竴鑸戶鎵?/strong>

涓嬮潰錛屾垜浠亣璁炬湁濡備笅鎵紺虹殑涓涓戶鎵垮叧緋伙細

璇鋒敞鎰忥紝鍦ㄨ繖涓戶鎵垮叧緋諱腑錛岀埗綾伙紝瀛愮被錛屽瓩瀛愮被閮芥湁鑷繁鐨勪竴涓垚鍛樺彉閲忋傝屼簡綾昏鐩栦簡鐖剁被鐨刦()鏂規硶錛屽瓩瀛愮被瑕嗙洊浜嗗瓙綾葷殑g_child()鍙婂叾瓚呯被鐨刦()銆?/p>

鎴戜滑鐨勬簮紼嬪簭濡備笅鎵紺猴細

class Parent {

public:

int iparent;

Parent ():iparent (10) {}

virtual void f() { cout << " Parent::f()" << endl; }

virtual void g() { cout << " Parent::g()" << endl; }

virtual void h() { cout << " Parent::h()" << endl; }

 

};

 

class Child : public Parent {

public:

int ichild;

Child():ichild(100) {}

virtual void f() { cout << "Child::f()" << endl; }

virtual void g_child() { cout << "Child::g_child()" << endl; }

virtual void h_child() { cout << "Child::h_child()" << endl; }

};

 

class GrandChild : public Child{

public:

int igrandchild;

GrandChild():igrandchild(1000) {}

virtual void f() { cout << "GrandChild::f()" << endl; }

virtual void g_child() { cout << "GrandChild::g_child()" << endl; }

virtual void h_grandchild() { cout << "GrandChild::h_grandchild()" << endl; }

};

鎴戜滑浣跨敤浠ヤ笅紼嬪簭浣滀負嫻嬭瘯紼嬪簭錛氾紙涓嬮潰紼嬪簭涓紝鎴戜嬌鐢ㄤ簡涓涓猧nt** pVtab 鏉ヤ綔涓洪亶鍘嗗璞″唴瀛樺竷灞鐨勬寚閽堬紝榪欐牱錛屾垜灝卞彲浠ユ柟渚垮湴鍍忎嬌鐢ㄦ暟緇勪竴鏍鋒潵閬嶅巻鎵鏈夌殑鎴愬憳鍖呮嫭鍏惰櫄鍑芥暟琛ㄤ簡錛屽湪鍚庨潰鐨勭▼搴忎腑錛屾垜涔熸槸鐢ㄨ繖鏍風殑鏂規硶鐨勶紝璇蜂笉蹇呮劅鍒板鎬紝錛?/p>

typedef void(*Fun)(void);

GrandChild gc;

int** pVtab = (int**)&gc;

cout << "[0] GrandChild::_vptr->" << endl;

for (int i=0; (Fun)pVtab[0][i]!=NULL; i++){

pFun = (Fun)pVtab[0][i];

cout << " ["<<i<<"] ";

pFun();

}

cout << "[1] Parent.iparent = " << (int)pVtab[1] << endl;

cout << "[2] Child.ichild = " << (int)pVtab[2] << endl;

cout << "[3] GrandChild.igrandchild = " << (int)pVtab[3] << endl;

鍏惰繍琛岀粨鏋滃涓嬫墍紺猴細錛堝湪VC++ 2003鍜孏++ 3.4.4涓嬶級

[0] GrandChild::_vptr->

    [0] GrandChild::f()

    [1] Parent::g()

    [2] Parent::h()

    [3] GrandChild::g_child()

    [4] Child::h1()

    [5] GrandChild::h_grandchild()

[1] Parent.iparent = 10

[2] Child.ichild = 100

[3] GrandChild.igrandchild = 1000

浣跨敤鍥劇墖琛ㄧず濡備笅錛?/p>

鍙浠ヤ笅鍑犱釜鏂歸潰錛?/p>

1錛夎櫄鍑芥暟琛ㄥ湪鏈鍓嶉潰鐨勪綅緗?/p>

2錛夋垚鍛樺彉閲忔牴鎹叾緇ф壙鍜屽0鏄庨『搴忎緷嬈℃斁鍦ㄥ悗闈€?/p>

3錛夊湪鍗曚竴鐨勭戶鎵夸腑錛岃overwrite鐨勮櫄鍑芥暟鍦ㄨ櫄鍑芥暟琛ㄤ腑寰楀埌浜嗘洿鏂般?/p>

澶氶噸緇ф壙

涓嬮潰錛屽啀璁╂垜浠潵鐪嬬湅澶氶噸緇ф壙涓殑鎯呭喌錛屽亣璁炬湁涓嬮潰榪欐牱涓涓被鐨勭戶鎵垮叧緋匯傛敞鎰忥細瀛愮被鍙猳verwrite浜嗙埗綾葷殑f()鍑芥暟錛岃岃繕鏈変竴涓槸鑷繁鐨勫嚱鏁幫紙鎴戜滑榪欐牱鍋氱殑鐩殑鏄負浜嗙敤g1()浣滀負涓涓爣璁版潵鏍囨槑瀛愮被鐨勮櫄鍑芥暟琛級銆傝屼笖姣忎釜綾諱腑閮芥湁涓涓嚜宸辯殑鎴愬憳鍙橀噺錛?/p>

鎴戜滑鐨勭被緇ф壙鐨勬簮浠g爜濡備笅鎵紺猴細鐖剁被鐨勬垚鍛樺垵濮嬩負10錛?0錛?0錛屽瓙綾葷殑涓?00

class Base1 {

public:

int ibase1;

Base1():ibase1(10) {}

virtual void f() { cout << "Base1::f()" << endl; }

virtual void g() { cout << "Base1::g()" << endl; }

virtual void h() { cout << "Base1::h()" << endl; }

 

};

class Base2 {

public:

int ibase2;

Base2():ibase2(20) {}

virtual void f() { cout << "Base2::f()" << endl; }

virtual void g() { cout << "Base2::g()" << endl; }

virtual void h() { cout << "Base2::h()" << endl; }

};

class Base3 {

public:

int ibase3;

Base3():ibase3(30) {}

virtual void f() { cout << "Base3::f()" << endl; }

virtual void g() { cout << "Base3::g()" << endl; }

virtual void h() { cout << "Base3::h()" << endl; }

};

class Derive : public Base1, public Base2, public Base3 {

public:

int iderive;

Derive():iderive(100) {}

virtual void f() { cout << "Derive::f()" << endl; }

virtual void g1() { cout << "Derive::g1()" << endl; }

};

鎴戜滑閫氳繃涓嬮潰鐨勭▼搴忔潵鏌ョ湅瀛愮被瀹炰緥鐨勫唴瀛樺竷灞錛氫笅闈㈢▼搴忎腑錛屾敞鎰忔垜浣跨敤浜嗕竴涓猻鍙橀噺錛屽叾涓敤鍒頒簡sizof(Base)鏉ユ壘涓嬩竴涓被鐨勫亸縐婚噺銆傦紙鍥犱負鎴戝0鏄庣殑鏄痠nt鎴愬憳錛屾墍浠ユ槸4涓瓧鑺傦紝鎵浠ユ病鏈夊榻愰棶棰樸傚叧浜庡唴瀛樼殑瀵歸綈闂錛屽ぇ瀹跺彲浠ヨ嚜琛岃瘯楠岋紝鎴戝湪榪欓噷灝變笉澶氳浜嗭級

typedef void(*Fun)(void);

Derive d;

int** pVtab = (int**)&d;

cout << "[0] Base1::_vptr->" << endl;

pFun = (Fun)pVtab[0][0];

cout << " [0] ";

pFun();

pFun = (Fun)pVtab[0][1];

cout << " [1] ";pFun();

pFun = (Fun)pVtab[0][2];

cout << " [2] ";pFun();

pFun = (Fun)pVtab[0][3];

cout << " [3] "; pFun();

pFun = (Fun)pVtab[0][4];

cout << " [4] "; cout<<pFun<<endl;

cout << "[1] Base1.ibase1 = " << (int)pVtab[1] << endl;

int s = sizeof(Base1)/4;

cout << "[" << s << "] Base2::_vptr->"<<endl;

pFun = (Fun)pVtab[s][0];

cout << " [0] "; pFun();

Fun = (Fun)pVtab[s][1];

cout << " [1] "; pFun();

pFun = (Fun)pVtab[s][2];

cout << " [2] "; pFun();

pFun = (Fun)pVtab[s][3];

out << " [3] ";

cout<<pFun<<endl;

cout << "["<< s+1 <<"] Base2.ibase2 = " << (int)pVtab[s+1] << endl;

s = s + sizeof(Base2)/4;

cout << "[" << s << "] Base3::_vptr->"<<endl;

pFun = (Fun)pVtab[s][0];

cout << " [0] "; pFun();

 

pFun = (Fun)pVtab[s][1];

cout << " [1] "; pFun();

pFun = (Fun)pVtab[s][2];

cout << " [2] "; pFun();

 

pFun = (Fun)pVtab[s][3];

cout << " [3] ";

cout<<pFun<<endl;

s++;

cout << "["<< s <<"] Base3.ibase3 = " << (int)pVtab[s] << endl;

s++;

cout << "["<< s <<"] Derive.iderive = " << (int)pVtab[s] << endl;

鍏惰繍琛岀粨鏋滃涓嬫墍紺猴細錛堝湪VC++ 2003鍜孏++ 3.4.4涓嬶級

[0] Base1::_vptr->

     [0] Derive::f()

     [1] Base1::g()

     [2] Base1::h()

     [3] Driver::g1()

     [4] 00000000      ç 娉ㄦ剰錛氬湪GCC涓嬶紝榪欓噷鏄?/span>1

[1] Base1.ibase1 = 10

[2] Base2::_vptr->

     [0] Derive::f()

     [1] Base2::g()

     [2] Base2::h()

     [3] 00000000      ç 娉ㄦ剰錛氬湪GCC涓嬶紝榪欓噷鏄?/span>1

[3] Base2.ibase2 = 20

[4] Base3::_vptr->

     [0] Derive::f()

     [1] Base3::g()

     [2] Base3::h()

     [3] 00000000

[5] Base3.ibase3 = 30

[6] Derive.iderive = 100

浣跨敤鍥劇墖琛ㄧず鏄笅闈㈣繖涓牱瀛愶細

鎴戜滑鍙互鐪嬪埌錛?/p>

1錛?姣忎釜鐖剁被閮芥湁鑷繁鐨勮櫄琛ㄣ?/p>

2錛?瀛愮被鐨勬垚鍛樺嚱鏁拌鏀懼埌浜嗙涓涓埗綾葷殑琛ㄤ腑銆?/p>

3錛?鍐呭瓨甯冨眬涓紝鍏剁埗綾誨竷灞渚濇鎸夊0鏄庨『搴忔帓鍒椼?/p>

4錛?姣忎釜鐖剁被鐨勮櫄琛ㄤ腑鐨刦()鍑芥暟閮借overwrite鎴愪簡瀛愮被鐨刦()銆傝繖鏍峰仛灝辨槸涓轟簡瑙e喅涓嶅悓鐨勭埗綾葷被鍨嬬殑鎸囬拡鎸囧悜鍚屼竴涓瓙綾誨疄渚嬶紝鑰岃兘澶熻皟鐢ㄥ埌瀹為檯鐨勫嚱鏁般?/p>

閲嶅緇ф壙

涓嬮潰鎴戜滑鍐嶆潵鐪嬬湅錛屽彂鐢熼噸澶嶇戶鎵跨殑鎯呭喌銆傛墍璋撻噸澶嶇戶鎵匡紝涔熷氨鏄煇涓熀綾昏闂存帴鍦伴噸澶嶇戶鎵夸簡澶氭銆?/p>

涓嬪浘鏄竴涓戶鎵垮浘錛屾垜浠噸杞戒簡鐖剁被鐨刦()鍑芥暟銆?/p>

鍏剁被緇ф壙鐨勬簮浠g爜濡備笅鎵紺恒傚叾涓紝姣忎釜綾婚兘鏈変袱涓彉閲忥紝涓涓槸鏁村艦錛?瀛楄妭錛夛紝涓涓槸瀛楃錛?瀛楄妭錛夛紝鑰屼笖榪樻湁鑷繁鐨勮櫄鍑芥暟錛岃嚜宸眔verwrite鐖剁被鐨勮櫄鍑芥暟銆傚瀛愮被D涓紝f()瑕嗙洊浜嗚秴綾葷殑鍑芥暟錛?f1() 鍜宖2() 瑕嗙洊浜嗗叾鐖剁被鐨勮櫄鍑芥暟錛孌f()涓鴻嚜宸辯殑铏氬嚱鏁般?/p>

class B

{

public:

int ib;

char cb;

public:

B():ib(0),cb('B') {}

virtual void f() { cout << "B::f()" << endl;}

virtual void Bf() { cout << "B::Bf()" << endl;}

};

class B1 : public B

{

public:

int ib1;

char cb1;

public:

B1():ib1(11),cb1('1') {}

virtual void f() { cout << "B1::f()" << endl;}

virtual void f1() { cout << "B1::f1()" << endl;}

virtual void Bf1() { cout << "B1::Bf1()" << endl;}

};

class B2: public B

{

public:

int ib2;

char cb2;

public:

B2():ib2(12),cb2('2') {}

virtual void f() { cout << "B2::f()" << endl;}

virtual void f2() { cout << "B2::f2()" << endl;}

virtual void Bf2() { cout << "B2::Bf2()" << endl;}

};

class D : public B1, public B2

{

public:

int id;

char cd;

public:

D():id(100),cd('D') {}

virtual void f() { cout << "D::f()" << endl;}

virtual void f1() { cout << "D::f1()" << endl;}

virtual void f2() { cout << "D::f2()" << endl;}

virtual void Df() { cout << "D::Df()" << endl;}

};

鎴戜滑鐢ㄦ潵瀛樺彇瀛愮被鍐呭瓨甯冨眬鐨勪唬鐮佸涓嬫墍紺猴細錛堝湪VC++ 2003鍜孏++ 3.4.4涓嬶級

typedef void(*Fun)(void);

int** pVtab = NULL;

Fun pFun = NULL;

D d;

pVtab = (int**)&d;

cout << "[0] D::B1::_vptr->" << endl;

pFun = (Fun)pVtab[0][0];

cout << " [0] "; pFun();

pFun = (Fun)pVtab[0][1];

cout << " [1] "; pFun();

pFun = (Fun)pVtab[0][2];

cout << " [2] "; pFun();

pFun = (Fun)pVtab[0][3];

cout << " [3] "; pFun();

pFun = (Fun)pVtab[0][4];

cout << " [4] "; pFun();

pFun = (Fun)pVtab[0][5];

cout << " [5] 0x" << pFun << endl;

cout << "[1] B::ib = " << (int)pVtab[1] << endl;

cout << "[2] B::cb = " << (char)pVtab[2] << endl;

cout << "[3] B1::ib1 = " << (int)pVtab[3] << endl;

cout << "[4] B1::cb1 = " << (char)pVtab[4] << endl;

cout << "[5] D::B2::_vptr->" << endl;

pFun = (Fun)pVtab[5][0];

cout << " [0] "; pFun();

pFun = (Fun)pVtab[5][1];

cout << " [1] "; pFun();

pFun = (Fun)pVtab[5][2];

cout << " [2] "; pFun();

pFun = (Fun)pVtab[5][3];

cout << " [3] "; pFun();

pFun = (Fun)pVtab[5][4];

cout << " [4] 0x" << pFun << endl;

cout << "[6] B::ib = " << (int)pVtab[6] << endl;

cout << "[7] B::cb = " << (char)pVtab[7] << endl;

cout << "[8] B2::ib2 = " << (int)pVtab[8] << endl;

cout << "[9] B2::cb2 = " << (char)pVtab[9] << endl;

cout << "[10] D::id = " << (int)pVtab[10] << endl;

cout << "[11] D::cd = " << (char)pVtab[11] << endl;

紼嬪簭榪愯緇撴灉濡備笅錛?/p>

GCC 3.4.4

VC++ 2003

[0] D::B1::_vptr->

     [0] D::f()

     [1] B::Bf()

     [2] D::f1()

     [3] B1::Bf1()

     [4] D::f2()

     [5] 0x1

[1] B::ib = 0

[2] B::cb = B

[3] B1::ib1 = 11

[4] B1::cb1 = 1

[5] D::B2::_vptr->

     [0] D::f()

     [1] B::Bf()

     [2] D::f2()

     [3] B2::Bf2()

     [4] 0x0

[6] B::ib = 0

[7] B::cb = B

[8] B2::ib2 = 12

[9] B2::cb2 = 2

[10] D::id = 100

[11] D::cd = D

[0] D::B1::_vptr->

     [0] D::f()

     [1] B::Bf()

     [2] D::f1()

     [3] B1::Bf1()

     [4] D::Df()

     [5] 0x00000000

[1] B::ib = 0

[2] B::cb = B

[3] B1::ib1 = 11

[4] B1::cb1 = 1

[5] D::B2::_vptr->

     [0] D::f()

     [1] B::Bf()

     [2] D::f2()

     [3] B2::Bf2()

     [4] 0x00000000

[6] B::ib = 0

[7] B::cb = B

[8] B2::ib2 = 12

[9] B2::cb2 = 2

[10] D::id = 100

[11] D::cd = D

涓嬮潰鏄浜庡瓙綾誨疄渚嬩腑鐨勮櫄鍑芥暟琛ㄧ殑鍥撅細

鎴戜滑鍙互鐪嬭錛屾渶欏剁鐨勭埗綾籅鍏舵垚鍛樺彉閲忓瓨鍦ㄤ簬B1鍜孊2涓紝騫惰D緇欑戶鎵夸笅鍘諱簡銆傝屽湪D涓紝鍏舵湁B1鍜孊2鐨勫疄渚嬶紝浜庢槸B鐨勬垚鍛樺湪D鐨勫疄渚嬩腑瀛樺湪涓や喚錛屼竴浠芥槸B1緇ф壙鑰屾潵鐨勶紝鍙︿竴浠芥槸B2緇ф壙鑰屾潵鐨勩傛墍浠ワ紝濡傛灉鎴戜滑浣跨敤浠ヤ笅璇彞錛屽垯浼氫駭鐢熶簩涔夋х紪璇戦敊璇細

D d;

d.ib = 0; //浜屼箟鎬ч敊璇?/p>

d.B1::ib = 1; //姝g‘

d.B2::ib = 2; //姝g‘

娉ㄦ剰錛屼笂闈緥紼嬩腑鐨勬渶鍚庝袱鏉¤鍙ュ瓨鍙栫殑鏄袱涓彉閲忋傝櫧鐒舵垜浠秷闄や簡浜屼箟鎬х殑緙栬瘧閿欒錛屼絾B綾誨湪D涓繕鏄湁涓や釜瀹炰緥錛岃繖縐嶇戶鎵塊犳垚浜嗘暟鎹殑閲嶅錛屾垜浠彨榪欑緇ф壙涓洪噸澶嶇戶鎵褲傞噸澶嶇殑鍩虹被鏁版嵁鎴愬憳鍙兘騫朵笉鏄垜浠兂瑕佺殑銆傛墍浠ワ紝C++寮曞叆浜嗚櫄鍩虹被鐨勬蹇點?/p>

閽葷煶鍨嬪閲嶈櫄鎷熺戶鎵?/strong>

铏氭嫙緇ф壙鐨勫嚭鐜板氨鏄負浜嗚В鍐抽噸澶嶇戶鎵夸腑澶氫釜闂存帴鐖剁被鐨勯棶棰樼殑銆傞捇鐭沖瀷鐨勭粨鏋勬槸鍏舵渶緇忓吀鐨勭粨鏋勩備篃鏄垜浠湪榪欓噷瑕佽璁虹殑緇撴瀯錛?/p>

涓婅堪鐨?#8220;閲嶅緇ф壙”鍙渶瑕佹妸B1鍜孊2緇ф壙B鐨勮娉曚腑鍔犱笂virtual 鍏抽敭錛屽氨鎴愪簡铏氭嫙緇ф壙錛屽叾緇ф壙鍥懼涓嬫墍紺猴細

涓婂浘鍜屽墠闈㈢殑“閲嶅緇ф壙”涓殑綾葷殑鍐呴儴鏁版嵁鍜屾帴鍙i兘鏄畬鍏ㄤ竴鏍風殑錛屽彧鏄垜浠噰鐢ㄤ簡铏氭嫙緇ф壙錛氬叾鐪佺暐鍚庣殑婧愮爜濡備笅鎵紺猴細

class B {……};

class B1 : virtual public B{……};

class B2: virtual public B{……};

class D : public B1, public B2{ …… };

鍦ㄦ煡鐪婦涔嬪墠錛屾垜浠厛鐪嬩竴鐪嬪崟涓铏氭嫙緇ф壙鐨勬儏鍐點備笅闈㈡槸涓孌靛湪VC++2003涓嬬殑嫻嬭瘯紼嬪簭錛氾紙鍥犱負VC++鍜孏CC鐨勫唴瀛樿屽眬涓婃湁涓浜涚粏鑺備笂鐨勪笉鍚岋紝鎵浠ヨ繖閲屽彧緇欏嚭VC++鐨勭▼搴忥紝GCC涓嬬殑紼嬪簭澶у鍙互鏍規嵁鎴戠粰鍑虹殑紼嬪簭鑷繁浠跨収鐫鍐欎竴涓幓璇曚竴璇曪級錛?/p>

int** pVtab = NULL;

Fun pFun = NULL;

 

B1 bb1;

pVtab = (int**)&bb1;

cout << "[0] B1::_vptr->" << endl;

pFun = (Fun)pVtab[0][0];

cout << " [0] ";

pFun(); //B1::f1();

cout << " [1] ";

pFun = (Fun)pVtab[0][1];

pFun(); //B1::bf1();

cout << " [2] ";

cout << pVtab[0][2] << endl;

cout << "[1] = 0x";

cout << (int*)*((int*)(&bb1)+1) <<endl; //B1::ib1

cout << "[2] B1::ib1 = ";

cout << (int)*((int*)(&bb1)+2) <<endl; //B1::ib1

cout << "[3] B1::cb1 = ";

cout << (char)*((int*)(&bb1)+3) << endl; //B1::cb1

cout << "[4] = 0x";

cout << (int*)*((int*)(&bb1)+4) << endl; //NULL

cout << "[5] B::_vptr->" << endl;

pFun = (Fun)pVtab[5][0];

cout << " [0] ";

pFun(); //B1::f();

pFun = (Fun)pVtab[5][1];

cout << " [1] ";

pFun(); //B::Bf();

cout << " [2] ";

cout << "0x" << (Fun)pVtab[5][2] << endl;

cout << "[6] B::ib = ";

cout << (int)*((int*)(&bb1)+6) <<endl; //B::ib

cout << "[7] B::cb = ";

鍏惰繍琛岀粨鏋滃涓嬶紙鎴戠粨鍑轟簡GCC鐨勫拰VC++2003鐨勫姣旓級錛?/p>

GCC 3.4.4

VC++ 2003

[0] B1::_vptr ->

    [0] : B1::f()

    [1] : B1::f1()

    [2] : B1::Bf1()

    [3] : 0

[1] B1::ib1 : 11

[2] B1::cb1 : 1

[3] B::_vptr ->

    [0] : B1::f()

    [1] : B::Bf()

    [2] : 0

[4] B::ib : 0

[5] B::cb : B

[6] NULL : 0

[0] B1::_vptr->

     [0] B1::f1()

     [1] B1::Bf1()

     [2] 0

[1] = 0x00454310 ç璇ュ湴鍧鍙栧煎悗鏄?/span>-4

[2] B1::ib1 = 11

[3] B1::cb1 = 1

[4] = 0x00000000

[5] B::_vptr->

     [0] B1::f()

     [1] B::Bf()

     [2] 0x00000000

[6] B::ib = 0

[7] B::cb = B

榪欓噷錛屽ぇ瀹跺彲浠ヨ嚜宸卞姣斾竴涓嬨傚叧浜庣粏鑺備笂錛屾垜浼氬湪鍚庨潰涓騫跺啀璇淬?/p>

涓嬮潰鐨勬祴璇曠▼搴忔槸鐪嬪瓙綾籇鐨勫唴瀛樺竷灞錛屽悓鏍鋒槸VC++ 2003鐨勶紙鍥犱負VC++鍜孏CC鐨勫唴瀛樺竷灞涓婃湁涓浜涚粏鑺備笂鐨勪笉鍚岋紝鑰孷C++鐨勭浉瀵硅娓呮寰堝錛屾墍浠ヨ繖閲屽彧緇欏嚭VC++鐨勭▼搴忥紝GCC涓嬬殑紼嬪簭澶у鍙互鏍規嵁鎴戠粰鍑虹殑紼嬪簭鑷繁浠跨収鐫鍐欎竴涓幓璇曚竴璇曪級錛?/p>

D d;

pVtab = (int**)&d;

cout << "[0] D::B1::_vptr->" << endl;

pFun = (Fun)pVtab[0][0];

cout << " [0] "; pFun(); //D::f1();

pFun = (Fun)pVtab[0][1];

cout << " [1] "; pFun(); //B1::Bf1();

pFun = (Fun)pVtab[0][2];

cout << " [2] "; pFun(); //D::Df();

pFun = (Fun)pVtab[0][3];

cout << " [3] ";

cout << pFun << endl;

//cout << pVtab[4][2] << endl;

cout << "[1] = 0x";

cout << (int*)((&dd)+1) <<endl; //????

cout << "[2] B1::ib1 = ";

cout << *((int*)(&dd)+2) <<endl; //B1::ib1

cout << "[3] B1::cb1 = ";

cout << (char)*((int*)(&dd)+3) << endl; //B1::cb1

//---------------------

cout << "[4] D::B2::_vptr->" << endl;

pFun = (Fun)pVtab[4][0];

cout << " [0] "; pFun(); //D::f2();

pFun = (Fun)pVtab[4][1];

cout << " [1] "; pFun(); //B2::Bf2();

pFun = (Fun)pVtab[4][2];

cout << " [2] ";

cout << pFun << endl;

cout << "[5] = 0x";

cout << *((int*)(&dd)+5) << endl; // ???

cout << "[6] B2::ib2 = ";

cout << (int)*((int*)(&dd)+6) <<endl; //B2::ib2

cout << "[7] B2::cb2 = ";

cout << (char)*((int*)(&dd)+7) << endl; //B2::cb2

cout << "[8] D::id = ";

cout << *((int*)(&dd)+8) << endl; //D::id

cout << "[9] D::cd = ";

cout << (char)*((int*)(&dd)+9) << endl;//D::cd

cout << "[10] = 0x";

cout << (int*)*((int*)(&dd)+10) << endl;

//---------------------

cout << "[11] D::B::_vptr->" << endl;

pFun = (Fun)pVtab[11][0];

cout << " [0] "; pFun(); //D::f();

pFun = (Fun)pVtab[11][1];

cout << " [1] "; pFun(); //B::Bf();

pFun = (Fun)pVtab[11][2];

cout << " [2] ";

cout << pFun << endl;

cout << "[12] B::ib = ";

cout << *((int*)(&dd)+12) << endl; //B::ib

cout << "[13] B::cb = ";

cout << (char)*((int*)(&dd)+13) <<endl;//B::cb

涓嬮潰緇欏嚭榪愯鍚庣殑緇撴灉錛堝垎VC++鍜孏CC涓ら儴浠斤級

GCC 3.4.4

VC++ 2003

[0] B1::_vptr ->

    [0] : D::f()

    [1] : D::f1()

    [2] : B1::Bf1()

    [3] : D::f2()

    [4] : D::Df()

    [5] : 1

[1] B1::ib1 : 11

[2] B1::cb1 : 1

[3] B2::_vptr ->

    [0] : D::f()

    [1] : D::f2()

    [2] : B2::Bf2()

    [3] : 0

[4] B2::ib2 : 12

[5] B2::cb2 : 2

[6] D::id : 100

[7] D::cd : D

[8] B::_vptr ->

    [0] : D::f()

    [1] : B::Bf()

    [2] : 0

[9] B::ib : 0

[10] B::cb : B

[11] NULL : 0

[0] D::B1::_vptr->

     [0] D::f1()

     [1] B1::Bf1()

     [2] D::Df()

     [3] 00000000

[1] = 0x0013FDC4  ç 璇ュ湴鍧鍙栧煎悗鏄?/span>-4

[2] B1::ib1 = 11

[3] B1::cb1 = 1

[4] D::B2::_vptr->

     [0] D::f2()

     [1] B2::Bf2()

     [2] 00000000

[5] = 0x4539260   ç 璇ュ湴鍧鍙栧煎悗鏄?/span>-4

[6] B2::ib2 = 12

[7] B2::cb2 = 2

[8] D::id = 100

[9] D::cd = D

[10]  = 0x00000000

[11] D::B::_vptr->

     [0] D::f()

     [1] B::Bf()

     [2] 00000000

[12] B::ib = 0

[13] B::cb = B

鍏充簬铏氭嫙緇ф壙鐨勮繍琛岀粨鏋滄垜灝變笉鐢誨浘浜嗭紙鍓嶉潰鐨勪綔鍥懼凡緇忚鎴戜駭鐢熶簡寰堜弗閲嶇殑鍘屽︽劅錛屾墍浠ュ氨鍋蜂釜鎳掍簡錛屽ぇ瀹惰璋呬簡錛?/p>

鍦ㄤ笂闈㈢殑杈撳嚭緇撴灉涓紝鎴戠敤涓嶅悓鐨勯鑹插仛浜嗕竴浜涙爣鏄庛傛垜浠彲浠ョ湅鍒板涓嬬殑鍑犵偣錛?/p>

1錛夋棤璁烘槸GCC榪樻槸VC++錛岄櫎浜嗕竴浜涚粏鑺備笂鐨勪笉鍚岋紝鍏跺ぇ浣撲笂鐨勫璞″竷灞鏄竴鏍風殑銆備篃灝辨槸璇達紝鍏堟槸B1錛堥粍鑹詫級錛岀劧鍚庢槸B2錛堢豢鑹詫級錛屾帴鐫鏄疍錛堢伆鑹詫級錛岃孊榪欎釜瓚呯被錛堥潚钃濊壊錛夌殑瀹炰緥閮芥斁鍦ㄦ渶鍚庣殑浣嶇疆銆?/p>

2錛夊叧浜庤櫄鍑芥暟琛紝灝ゅ叾鏄涓涓櫄琛紝GCC鍜孷C++鏈夊緢閲嶅ぇ鐨勪笉涓鏍楓備絾浠旂粏鐪嬩笅鏉ワ紝榪樻槸VC++鐨勮櫄琛ㄦ瘮杈冩竻鏅板拰鏈夐昏緫鎬с?/p>

3錛塚C++鍜孏CC閮芥妸B榪欎釜瓚呯被鏀懼埌浜嗘渶鍚庯紝鑰孷C++鏈変竴涓狽ULL鍒嗛殧絎︽妸B鍜孊1鍜孊2鐨勫竷灞鍒嗗紑銆侴CC鍒欐病鏈夈?/p>

4錛塚C++涓殑鍐呭瓨甯冨眬鏈変袱涓湴鍧鎴戞湁浜涗笉鏄緢鏄庣櫧錛屽湪鍏朵腑鎴戠敤綰㈣壊鏍囧嚭浜嗐傚彇鍏跺唴瀹規槸-4銆傛帴閬撶悊鏉ヨ錛岃繖涓寚閽堝簲璇ユ槸鎸囧悜B綾誨疄渚嬬殑鍐呭瓨鍦板潃錛堣繖涓仛娉曞氨鏄負浜嗕繚璇侀噸澶嶇殑鐖剁被鍙湁涓涓疄渚嬬殑鎶鏈級銆備絾鍙栧煎悗鍗翠笉鏄傝繖鐐規垜鐩墠榪樺茍涓嶅お娓呮錛岃繕鍚戝ぇ瀹惰鏁欍?/p>

5錛塆CC鐨勫唴瀛樺竷灞涓湪B1鍜孊2涓垯娌℃湁鎸囧悜B鐨勬寚閽堛傝繖鐐瑰彲浠ョ悊瑙o紝緙栬瘧鍣ㄥ彲浠ラ氳繃璁$畻B1鍜孊2鐨剆ize鑰屽緱鍑築鐨勫亸縐婚噺銆?/p>

緇撴潫璇?/strong>

C++榪欓棬璇█鏄竴闂ㄦ瘮杈冨鏉傜殑璇█錛屽浜庣▼搴忓憳鏉ヨ錛屾垜浠技涔庢案榪滄懜涓嶆竻妤氳繖闂ㄨ璦鑳岀潃鎴戜滑鍦ㄥ共浜嗕粈涔堛傞渶瑕佺啛鎮夎繖闂ㄨ璦錛屾垜浠氨蹇呴渶瑕佷簡瑙++閲岄潰鐨勯偅浜涗笢瑗匡紝闇瑕佹垜浠幓浜嗚В浠栧悗闈㈢殑鍐呭瓨瀵硅薄銆傝繖鏍鋒垜浠墠鑳界湡姝g殑浜嗚ВC++錛屼粠鑰岃兘澶熸洿濂界殑浣跨敤C++榪欓棬鏈闅劇殑緙栫▼璇█銆?/p>

鍦ㄦ枃绔犳潫涔嬪墠榪樻槸浠嬬粛涓涓嬭嚜宸卞惂銆傛垜浠庝簨杞歡鐮斿彂鏈夊崄涓勾澶翠簡錛岀洰鍓嶆槸杞歡寮鍙戞妧鏈富綆★紝鎶鏈柟闈紝涓繪敾Unix/C/C++錛屾瘮杈冨枩嬈㈢綉緇滀笂鐨勬妧鏈紝姣斿鍒嗗竷寮忚綆楋紝緗戞牸璁$畻錛孭2P錛孉jax絳変竴鍒囧拰浜掕仈緗戠浉鍏崇殑涓滆タ銆傜鐞嗘柟闈㈡瘮杈冩搮闀夸簬鍥㈤槦寤鴻錛屾妧鏈秼鍔垮垎鏋愶紝欏圭洰綆$悊銆傛榪庡ぇ瀹跺拰鎴戜氦嫻侊紝鎴戠殑MSN鍜孍mail鏄細haoel@hotmail.com



]]>
errno鏄粈涔堬紵http://www.shnenglu.com/tianbianlan/archive/2009/07/18/90422.html澶╄竟钃?/dc:creator>澶╄竟钃?/author>Sat, 18 Jul 2009 05:57:00 GMThttp://www.shnenglu.com/tianbianlan/archive/2009/07/18/90422.htmlhttp://www.shnenglu.com/tianbianlan/comments/90422.htmlhttp://www.shnenglu.com/tianbianlan/archive/2009/07/18/90422.html#Feedback0http://www.shnenglu.com/tianbianlan/comments/commentRss/90422.htmlhttp://www.shnenglu.com/tianbianlan/services/trackbacks/90422.htmlerrno鏄粈涔堬紵
涓洪槻姝㈠拰姝e父鐨勮繑鍥炲兼販娣嗭紝緋葷粺璋冪敤騫朵笉鐩存帴榪斿洖閿欒鐮侊紝鑰屾槸灝嗛敊璇爜鏀懼叆涓涓悕涓篹rrno鐨勫叏灞鍙橀噺涓傚鏋滀竴涓郴緇熻皟鐢ㄥけ璐ワ紝浣犲彲浠ヨ鍑篹rrno鐨勫兼潵紜畾闂鎵鍦ㄣ?br>errno涓嶅悓鏁板兼墍浠h〃鐨勯敊璇秷鎭畾涔夊湪errno.h涓紝浣犱篃鍙互閫氳繃鍛戒護"man 3 errno"鏉ュ療鐪嬪畠浠?br>闇瑕佹敞鎰忕殑鏄紝errno鐨勫煎彧鍦ㄥ嚱鏁板彂鐢熼敊璇椂璁劇疆錛屽鏋滃嚱鏁頒笉鍙戠敓閿欒錛宔rrno鐨勫煎氨鏃犲畾涔夛紝騫朵笉浼氳緗負0銆傚彟澶栵紝鍦ㄥ鐞唀rrno鍓嶆渶濂藉厛鎶婂畠鐨勫煎瓨鍏ュ彟涓涓彉閲忥紝鍥犱負鍦ㄩ敊璇鐞嗚繃紼嬩腑錛屽嵆浣垮儚printf()榪欐牱鐨勫嚱鏁板嚭閿欐椂涔熶細鏀瑰彉errno鐨勫箋?/p>

#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(void)
{
    int  fd;
    //extern int errno;榪欏彞搴旇鏄敾铔囨坊瓚?/p>

    if((fd = open("no/such/file",0)) < 0)
    {
        printf("errno=%d\n",errno);
        char * mesg = strerror(errno);
        printf("Mesg:%s\n",mesg); 
    }
 
    exit(0);
}


strerror銆銆
    #include <string.h>
銆銆char*strerror(int errnum);

銆銆#include <stdio.h>
銆銆void perror(const cahr *msg);

銆銆strerror鏄妸涓涓敊璇痭umb浣滀負鍙傛暟錛岀劧鍚庤繑鍥為敊璇痭umb鎵瀵瑰簲鐨勯敊璇孌碉紝涓鑸敤errno銆?br>銆銆perror鏄湪鏍囧噯杈撳嚭涓婅緭鍑簃sg瀛楃涓詫紝鐒跺悗鍐嶅悗闈㈠姞涓婏細閿欒璇錛堣繖涓敊璇孌靛搴旇繖鏃剁殑errno錛夈?br>銆銆嫻嬭瘯浠g爜濡備笅錛?br>銆銆#include <stdio.h>
銆銆2 #include <string.h>
銆銆3 #include <errno.h>
銆銆4
銆銆5 int
銆銆6 main(int argc, char *argv[])
銆銆7 {
銆銆8 fprintf(stderr, "EACCES:%s\n", strerror(EACCES));
銆銆9 errno = ENOENT;
銆銆10 printf("ENOENT:%s\n",strerror(errno));
銆銆11 perror(argv[0]);
銆銆12 exit(0);
銆銆13 }

 



]]>
鍏充簬杈撳叆嫻佺殑閿欒http://www.shnenglu.com/tianbianlan/archive/2009/06/21/88238.html澶╄竟钃?/dc:creator>澶╄竟钃?/author>Sun, 21 Jun 2009 14:09:00 GMThttp://www.shnenglu.com/tianbianlan/archive/2009/06/21/88238.htmlhttp://www.shnenglu.com/tianbianlan/comments/88238.htmlhttp://www.shnenglu.com/tianbianlan/archive/2009/06/21/88238.html#Feedback0http://www.shnenglu.com/tianbianlan/comments/commentRss/88238.htmlhttp://www.shnenglu.com/tianbianlan/services/trackbacks/88238.html鏉ユ簮錛?a >http://blog.vckbase.com/bruceteen/archive/2005/06/29/8952.html

 1 ]#include  < iostream >
 2 #include  < limits >
 3 using   namespace  std;
 4
 5 int  main()
 6 {
 7      int  n  =   0 ;
 8      while ! (cin >> n) )
 9      {
10         cin.clear();
11         cin.ignore( numeric_limits < streamsize > ::max(),  ' \n '  );  //  cin.sync()
12         cout << " Error " << endl;
13     }

14
15     cout  <<   " ------------\n "   <<  n  <<  endl;
16      return   0 ;
17 }

18
19



cin.clear()鎭㈠姝g‘鏍囧織浣?br>cin.ignore嫻佷腑閿欒鐨勬暟鎹姏寮冩帀

涓轟簡榪涗竴姝ユ煡鐪嬭緭鍏ユ祦鐨勭姸鎬侊紝鍙互閫氳繃浠ヤ笅浠g爜嫻嬭瘯錛?br>http://blog.csdn.net/SearchLife/archive/2008/12/10/3491768.aspx

#include <iostream> 
using namespace std; 

int main() 

        
int a; 
        cin
>>a; 
        cout
<<cin.rdstate()<<endl; 
        
if(cin.rdstate() == ios::goodbit)
{
cout
<<"杈撳叆鏁版嵁鐨勭被鍨嬫紜紝鏃犻敊璇紒"<<endl; 
             }
 
        
if(cin.rdstate() == ios_base::failbit) 
        

                cout
<<"杈撳叆鏁版嵁綾誨瀷閿欒錛岄潪鑷村懡閿欒錛屽彲娓呴櫎杈撳叆緙撳啿鍖烘尳鍥烇紒"<<endl; 
        }
 
}





鎴戜滑瀹氫箟瑕佽緭鍏ュ埌鐨勫彉閲忔槸鏁村瀷,浣嗗鏋滄垜浠緭鍏ヤ簡鑻辨枃瀛楁瘝鎴栬呮眽瀛?閭e氨浼氬彂鐢熼敊璇?cin閲屾湁涓柟娉曡兘媯嫻嬭繖涓敊璇?灝辨槸cin.rdstate();
褰揷in.rdstate()榪斿洖0(鍗砳os::goodbit)鏃惰〃紺烘棤閿欒,鍙互緇х畫杈撳叆鎴栬呮搷浣?鑻ヨ繑鍥?鍒欏彂鐢熼潪鑷村懡閿欒鍗砳os::failbit,鍒欎笉鑳界戶緇緭鍏ユ垨鎿嶄綔.鑰宑in.clear鍒欏彲浠ユ帶鍒舵垜浠鏃禼in閲屽榪欎釜闂鐨勪竴涓爣璇?璇彂濡備笅:
cin.clear(鏍囪瘑絎?;
鏍囪瘑絎﹀彿涓?

goodbit 鏃犻敊璇?
Eofbit 宸插埌杈炬枃浠跺熬
failbit 闈炶嚧鍛界殑杈撳叆/杈撳嚭閿欒錛屽彲鎸藉洖
badbit銆鑷村懡鐨勮緭鍏?杈撳嚭閿欒,鏃犳硶鎸藉洖
鑻ュ湪杈撳叆杈撳嚭綾婚噷.闇瑕佸姞ios::鏍囪瘑絎﹀彿

 



]]>
97热久久免费频精品99| 久久久久亚洲国产| 99久久精品影院老鸭窝| 天天久久狠狠色综合| 久久99久久无码毛片一区二区| 久久久久久毛片免费看| 狠狠色丁香婷婷久久综合五月| 色欲av伊人久久大香线蕉影院| 精品一区二区久久久久久久网站| 91久久精品国产成人久久| 中文字幕无码久久精品青草| 国产成人无码久久久精品一| 久久久WWW免费人成精品| 久久久久久久久久久精品尤物| 久久久久综合网久久| 思思久久99热只有频精品66| 国产精品久久久久久一区二区三区 | 久久综合欧美成人| 日韩欧美亚洲国产精品字幕久久久 | 久久棈精品久久久久久噜噜| 久久九九久精品国产| 99久久婷婷国产综合亚洲| 国产精品亚洲综合久久| 久久国产精品-久久精品| 伊人久久大香线蕉av一区| 久久精品国产色蜜蜜麻豆| 久久99精品综合国产首页| 久久午夜无码鲁丝片| 思思久久精品在热线热| 2020久久精品亚洲热综合一本| 91久久精品国产成人久久| 久久精品国产精品亚洲精品| 欧美一区二区三区久久综合| 久久成人国产精品免费软件| 久久亚洲精品无码播放| 久久精品人妻一区二区三区| 亚洲综合久久综合激情久久| 久久99精品国产99久久6男男| 久久ww精品w免费人成| 久久超碰97人人做人人爱| 狠狠色丁香婷综合久久|