C++經典筆試題(附答案)_第1頁
C++經典筆試題(附答案)_第2頁
C++經典筆試題(附答案)_第3頁
C++經典筆試題(附答案)_第4頁
C++經典筆試題(附答案)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

8:以下多重繼承時的二義性問題如何解決?classA{//類A的定義public:voidprint(){cout<<"Hello,thisisA"<<endl;}};classB{//類B的定義public:voidprint(){cout<<"Hello,thisisB"<<endl;}};classC:publicA,publicB{ //類C由類A和類B共同派生而來public:voiddisp(){print();}//編譯器無法決定采用A類中定義的版本還是B類中的版本};解答:假設兩個基類中具有同名的數據成員或成員函數,應使用成員名限定來消除二義性,如:voiddisp(){A::print(); //加成員名限定A::}但更好的方法是在類C中也定義一個同名print函數,根據需要調用A::print()還是B::print(),從而實現對基類同名函數的隱藏9:以下公共基類導致的二義性如何解決?classA{ //公共基類public: //public成員列表voidprint(){cout<<"thisisxinA:"<<endl;}classB:publicA{};classC:publicA{};classD:publicB,publicC{};voidmain(){Dd; //聲明一個D類對象dA*pa=(A*)&d; //上行轉換產生二義性d.print(); //print()具有二義性,系統(tǒng)不知道是調用B類的還是C類的print()函數}注意:把子類的指針或引用轉換成基類指針或引用是上行轉換,把基類指針或引用轉換成子類指針或引用是下行轉換。解答:1)main函數中語句“d.print();〞編譯錯誤,可改為以下的一種:d.B::print();d.C::print();假設改為“d.A::print();〞又會如何呢?由于d對象中有兩個A類對象,故編譯會報“基類A不明確〞。語句“A*pa=(A*)&d;〞產生的二義性是由于d中含有兩個基類對象A,隱式轉換時不知道讓pa指向哪個子對象,從而出錯??筛臑橐韵碌囊环N:A*pa=(A*)(B*)&d;//上行轉換A*pa=(A*)(C*)&d;//上行轉換事實上,使用關鍵字virtual將共同基類A聲明為虛基類,可有效解決上述問題。10:下面哪種情況下,B不能隱式轉換為A( )?(2023?騰訊〕A.classB:publicA{} B.classA:publicB{}C.classB{operatorA();} D.classA{A(constB&);}解答:B。因為子類包含了父類局部,所以子類可以轉換為父類,但是相反,父類沒有子類額外定義的局部,所以不能轉換為子類,故A正確,而B錯誤。非C++內建型別A和B,在以下幾種情況下B能隱式轉化為A。B公有繼承自A,可以是間接繼承的。classB:publicA{};此時假設有“Aa;Bb;〞,那么“a=b;〞合法。B中有類型轉換函數。classB{operatorA();};此時假設有“Aa;Bb;〞,那么“a=b;〞合法。A實現了非explicit的參數為B(可以有其他帶默認值的參數〕的構造函數classA{A(constB&);};此時假設有“Aa;Bb;〞,那么“a=b;〞合法。11:調用一成員函數時,使用動態(tài)聯(lián)編的情況是〔〕?!?023?淘寶〕A.通過對象調用一虛函數B.通過指針或引用調用一虛函數C.通過對象調用靜態(tài)函數D.通過指針或引用調用一靜態(tài)函數解答:B。結合一段例如代碼來看虛函數的作用,以幫助大家理解多態(tài)的意義所在。例2:下述代碼的輸出結果是什么?classbase{public:virtualvoiddisp(){cout<<"hello,base1"<<endl;}voiddisp2(){cout<<"hello,base2"<<endl;}};classchild1:publicbase{public:voiddisp(){cout<<"hello,child1"<<endl;}voiddisp2(){cout<<"hello,child2"<<endl;}voidmain(){base*base=NULL;child1objchild1;base=&objchildl;base->disp();base->disp2();解答:輸出:hello,childlhello,base2從上述代碼可見,通過指針訪問函數時:不加virtual時,具體調用哪個版本的函數只取決于指針本身的類型,和指針所指對象的類型無關。而加virtual時,具體調用哪個版本的函數不再取決于指針本身的類型,而是取決于指針所指對象的類型。13:構造函數為什么不能為虛函數?解答:假設有如下代碼:classA{A(){}};classB:publicA{B():A() {}};intmain(){Bb;B*pb=&b;}那么構造B類的對象時:根據繼承的性質,構造函數執(zhí)行順序是:A()B()根據虛函數的性質,如果A的構造函數為虛函數,且B類也給出了構造函數,那么應該只執(zhí)行B類的構造函數,不再執(zhí)行A類的構造函數。這樣A就不能構造了。這樣1和2就發(fā)生了矛盾。另外,virtual函數是在不同類型的對象產生不同的動作,現在對象還沒有產生,如何使用virtual函數來完成你想完成的動作。14:哪些函數不能為虛函數?解答:常見的不能聲明為虛函數的有:普通函數〔非成員函數)、靜態(tài)成員函數、構造函數、友元函數,而內聯(lián)成員函數、賦值操作符重載函數即使聲明為虛函數也無意義。為什么C++不支持普通函數為虛函數?普通函數〔非成員函數〕只能被overload(重載),不能被override(覆蓋),聲明為虛函數也沒有什么意義,因此編譯器會在編譯時綁定函數。為什么C++不支持構造函數為虛函數?上例己經給出了答案。為什么C++不支持靜態(tài)成員函數為虛函數?靜態(tài)成員函數對于每個類來說只有一份代碼,所有的對象都共享這一份代碼,它不歸某個具體對象所有,所以它沒有要動態(tài)綁定的必要性。為什么C++不支持友元函數為虛函數?因為C++不支持友元函數的繼承,沒有實現為虛函數的必要。以下兩種函數被聲明為虛函數時,雖然編譯器不會報錯,但是毫無意義。內聯(lián)函數:內聯(lián)函數是為了在代碼中直接展開,減少函數調用花費的代價,虛函數是為了在繼承后,對象能夠準確地執(zhí)行自己的動作,這是不可能統(tǒng)一的。即使虛函數被聲明為內聯(lián)函數,編譯器遇到這種情況根本不會把這樣的函數內聯(lián)展開,而是當作普通函數來處理。賦值運算符:雖然可以在基類中將成員函數operator定義為虛函數,但這樣做沒有意義。賦值操作符重載函數要求形參與類本身類型相同,故基類中的賦值操作符形參類型為基類類型,即使聲明為虛函數,也不能作為子類的賦值操作符。15:以下描述正確的選項是〔〕?!?023?盛大游戲〕虛函數是可以內聯(lián)的,可以減少函數調用的開銷提高效率類里面可以同時存在函數名和參數都一樣的虛函數和靜態(tài)函數父類的析構函數是非虛的,但是子類的析構函數是虛的,delete子類對象指針會調用父類的析構函數D?以上都不對解答:C。C中delete子類對象指針會調用父類的析構函數〔即使子類的析構函數不是虛的,對子類對象指針調用析構函數,也會調用父類的析構函數),但假設delete父類對象指針卻不會調用子類的析構函數〔因為父類的析構函數不是虛函數,不執(zhí)行動態(tài)綁定)。16:以下代碼的輸出結果是〔〕。〔2023?小米〕classB{public:B(){cout<<〞Bconstructor,〞;s=“B〞;}voidf(){cout<<s;}peivate:strings;};classD:publicB{public:D():B(){cout<<"Dconstructor,";s=“D〞;}voidf(){cout<<s;}private:strings;};intmain(void){B*b=newD();b->f();((D*)b)->f();deleteb;return0;}解答:輸出結果是:Bconstructor,Dconstructor,BD假設在類B中的函數f前加上virtual關鍵字,那么輸出結果為:Bconstructor,Dconstructor,DD可見假設函數不是虛函數,那么不是動態(tài)綁定。17:以下代碼的輸出結果是什么?〔2023?網易〕classA{public:virtualvoidFun(intnumber=10){std::cout<<"A::Funwithnumber"<<number<<endl;}};classB:publicA{public:virtualvoidFun(intnumber=20){std::cout<<〞B::Funwithnumber’’<<number<<endl;}};intmain(){Bb;A&a=b;a.Fun();return0;}解答:B::Funwithnumber10。虛函數動態(tài)綁定到B,但缺省實參是編譯時候確定的10,而非20。構造函數和析構函數中的虛函數構造派生類對象時,首先運行基類構造函數初始化對象的基類局部。在執(zhí)行基類構造函數時,對象的派生類局部是未初始化的。實際上,此時對象還不是一個派生類對象。撤銷派生類對象時,首先撤銷它的派生類局部,然后按照與構造順序的逆序撤銷它的基類局部。在這兩種情況下,運行構造函數或析構函數時,對象都是不完整的。為了適應這種不完整,編譯器將對象的類型視為在構造或析構期間發(fā)生了變化。在基類構造函數或析構函數中,將派生類對象當作基類型對象對待。如果在構造函數或析構函數中調用虛函數,那么運行的是為構造函數或析構函數自身類型定義的版本。18:以下哪些做法是不正確或者應該竭力防止的〔〕?!捕囗椷x擇〕〔2023?搜狗〕A.構造函數聲明為虛函數B.派生關系中的基類析構函數聲明為虛函數C.構造函數調用虛函數D.析構函數調用虛函數解答:ACD。構造函數和析構函數是特殊的成員函數,在其中訪問虛函數時,C++采用靜態(tài)聯(lián)編,即在構造函數或析構函數內,即使是使用虛函數名〞的形式來調用,編譯器仍將其解釋為靜態(tài)聯(lián)編的“本類名::虛函數名〞,因而這樣會與使用者的意圖不符,應該盡量防止。虛函數表指針〔vptr)及虛基類表指針〔bptr)C++在布局以及存取時間上主要的額外負擔是由virtual引起的,包括:virtualfunction機制:用以支持一個有效率的“執(zhí)行期綁定〞;virtualbaseclass:用以實現屢次出現在繼承體系中的基類,有一個單一而被共享的實體。19:一般情況下,下面哪些操作會執(zhí)行失?。俊病场捕囗椷x擇〕〔2023?搜狗〕classA{public:stringa;voidfl(){printf("HelloWorld");}voidf2(){a="HelloWorld";printf("%s",a.c_str());}virtualvoidf3(){printf("HelloWorld");}virtualvoidf4(){a="HelloWorld";printf("%s",a.c_str());}};A*aptr=NULL;aptr->f1();B.A*aptr=NULL;aptr->f2();C.A*aptr=NULL;aptr->f3();D.A*aptr=NULL;aptr->f4();解答:BCD。因為A沒有使用任何成員變量,且fl函數是非虛函數〔不存在于具體對象中〕,是靜態(tài)綁定的,所以A不需要使用對象的信息,故正確。在B中使用了成員變量,而成員變量只能存在于對象中:C中f3是虛函數,需要使用虛表指針〔存在于具體對象中);D同C??梢夿CD都需要有具體存在的對象,故不正確。20:請問下面代碼的輸出結果是什么?classA{public:A(){a=l;b=2;}private:inta;intb;};classB{public:B(){c=3;}voidprint(){cout<<c;}private:intc;};intmain(intargc,char*argv[]){Aa;B*pb=(B*)(&a);pb->print();return0;}解答:1。這里將一個指向B類型的指針指向A類型的對象,由于函數print并不位于對象中,且print是非虛函數,故執(zhí)行靜態(tài)綁定〔假設是動態(tài)綁定,那么需要virtual的信息,而對象a中不存在virtual信息,那么執(zhí)行會出錯)。當調用print函數時,需要輸出c的值,程序并不知道指針pb指向的對象不是B類型的對象,只是盲目地按照偏移值去取,c在類B的對象中的偏移值跟a在類A的對象中的偏移值相等(都位于對象的起始地址處),故取到a的值1。21:sizeof(Test)=4?sizeof(s)=4?sizeof(testl)=1?classTest{inta;staticdoublec;}Test*s;classtest1{};解答:sizeof(Test)=4,因為static數據成員并不存放在類的對象中。sizeof(s)=4,因為s為一個指針。sizeof(testl)=l,因為空類大小為1。22:以下表達式在32位機器編譯環(huán)境下的值為〔〕。〔2023???低暋砪lassA{};classB{public:B();virtual?B();};classC{private:#pragmapack(4)inti;shortj;floatk;char1[64];longm;char*p;#pragmapack()};classD{private:#pragmapack(1)inti;shortj;floatk;char1[64];longm;char*p;#pragmapack()};intmain(void){printf("%d\n",sizeof(A));printf("%d\n",sizeof(B));printf("%d\n",sizeof(C));printf("%d\n",sizeof(D));return0;}A.1、4、84、82 B.4、4、82、84C.4、4、84、82 D.1、4、82、82解答:A。類B的大小為4是因為B中有指針vptr,可參考圖9-1。23:下面代碼的輸出結果是什么?intmain(){typedefvoid(*Fun)(void);Baseb;FunpFun=NULL;cout<<"虛函數表地址:"<<(int*)(&b)<<endl;cout<<"虛函數表_第―個函數地址:"<<(int*)*(int*)(&b)<<endl;//InvokethefirstvirtualfunctionpFun=(Fun)*((int*)*(int*)(&b));//Base::f()pFun();pFun=(Fun)*((int*)*(int*)(&b)+1);//Base::g()pfun();pFun==(Fun)*((int*)*(int*)(&b)+2);//Base::h()pFun();return0;}解答:實際運行結果如下:〔Windows7+VS2023/Linux+GCC4.1.3)虛函數表地址:001EFC90虛函數表一第一個函數地址:00A47874Base::fBase:gBase:h通過這個例如,我們可以看到,我們可以通過強行把&b轉成int*,取得虛函數表的地址,然后,再次取址就可以得到第一個虛函數的地址了,也就是Base::f(),這在上面的程序中得到了驗證〔把int*強制轉成了函數指針〕。圖示如下:&b注意:在上面這個圖中,在虛函數表的最后多加了一個結點,這是虛函數表的結束結點,就像字符串的結束符’\0’—樣,其標志了虛函數表的結束。這個結束標志的值在不同的編譯器下是不同的。在Windows7+VS2023下,這個值是NULL。同時類Base的對象大小為4,即類中僅有一個指針vplr(指向虛函數表)。24:畫出以下類A、B、C、D的對象的虛函數表。classA{public:virtualvoida(){cout<<"a()inA"<<endl;}virtualvoidb(){cout<<"b()inA"<<endl;}virtualvoidc(){cout<<"c()inA"<<endl;}virtualvoidd(){cout<<"d()inA"<<endl;}};classB:publicA{public:voida(){cout<<"a()inB"<<endl;}voidb(){cout<<"b()inB"<<endl;}};classC:publicA{public:voida(){cout<<"a()inC"<<endl;}voidb(){cout<<"b()inC"<<endl;}};classD:publicB,publicC{public:voida(){cout<<"a()inD"<<endl;}voidd(){cout<<"d()inD"<<endl;}};解答:如下所示:A::aA::bA::cA::dA的對象vptr以上為A類對象的虛函數表,每個格子記錄一個函數的地址。B::aB::bA::cA::dB的對象vptr可見,單基繼承時,僅有一個vptr。B類中的函數a與b覆蓋了A類中的同名函數,故虛函數表中對應位置替換為新函數的地址。c的對象vptrD的對象可見,單基繼承時,僅有一個vptr。C類中的函數a與b覆蓋了AD的對象可見,多基繼承時,有幾個基類就有幾個vptr。D類中的函數a與d覆蓋了B類中的同名函數,故虛函數表中對應位置替換為新函數的地址。D類中的函數a與d覆蓋了C類中的同名函數,故虛函數表中對應位置替換為新函數的地址。25:如下代碼的輸出結果是什么?classX{};classY:publicvirtualX{};classZ:publicvirtualX{};classA:publicY,publicZ{};intmain(){cout<<"sizeof(X):"<<sizeof(X)<<endl;cout<<"sizeof(Y):"<<sizeof(Y)<<endl;cout<<"sizeof(Z):"<<sizeof(Z)<<endl;cout<<"sizeof(A):"<<sizeof(A)<<endl;解答:1,4,4,8。X類是空的,為什么sizeof(X)=l呢?事實上,在前面章節(jié)介紹struct的sizeof值時已經介紹過原因,這是因為事實上X并不是空的,它有一個隱晦的1字節(jié),那是編譯器安插進去的一個byte。這使得classX的objects得以在內存中配置獨一無二的地址。以下圖給出X、Y、Z的對象布局。derivedclassY事實上Y和Z的大小受到三個因素的影響:語言本身所造成的額外負擔。當語言支持虛基類〔virtualbaseclasses)時,就會造成一些額外負擔。在子類中,這個額外負擔反映在bptr上,即增加了一個指針。編譯器對于特殊情況所做的優(yōu)化處理。現在的編譯器一般會對空虛基類提供特殊支持〔如VS2023)。在這個策略下,一個空虛基類由于有了一個指針bptr,故不需再像空類一樣占用1個字節(jié),也就是說因為有了成員,就不再需要原本為了空類而安插的1個byte。Alignment的限制〔如果需要的話),就是字節(jié)對齊。因此,Y和Z的大小都是4字節(jié),其對象內僅包含一個bptr,且不需要對齊處理。下面我們討論A的大小。這里需要注意的是:一個虛基類子對象只會在繼承類中存在一份實體,不管它在繼承體系中出現了多少次。如圖9-2所示,classA的占用空間由下面幾局部構成:被大家共享的唯——個classX實體,大小為1B,目前的編譯器通常都做了優(yōu)化,省去這單單為了占位的1B,故此局部為0;BaseclassY的大小〔為4B)減去“因virtualbaseclassX而配置〞的大小〔此題中為0),故結果為4B;BaseclassZ的大小〔為4B)減去“因virtualbaseclassX而配置〞的大小〔此題中為0),故結果為4B;classA自己的大?。?B;前述四項總和,共8B。然后考慮字節(jié)對齊,不需要對齊,故sizeof(A)為8。注意:關于C++對象模型的更深入研究,可參考《深度探索(:抖對象模型》一書。26:假設A為抽象類,以下聲明〔〕是正確的?〔2023?迅雷〕A.Afun(int); B.A*p;C.intfun(A) D.AObj;解答:B。抽象類不能定義對象,但是可以作為指針或者引用類型使用。假設在A和C選項中的A后面加上&或*就是對的。27:抽象類為什么不能實例化?〔2023?阿里云〕解答:抽象類中的純虛函數沒有具體的實現,所以沒方法實例化。28:C++用于類型轉換的4個操作符是_,_,_,_?(2023?騰訊〕解答:dynamiccast,constcast,staticcast,reinterpret_cast;reinterpret_cast在引入命名的強制類型轉換操作符之前,顯式強制轉換用圓括號將類型括起來實現:int*ip;char*pc=(char*)ip;效果與使用reinterpret_cast符號相同。int*ip;char*pc==reinterpret_cast<char*>(ip);const_castconst_cast,顧名思義,將轉換掉表達式的const性質。constchar*pc_str;char*pc=const_cast<char*>(pc_str);只有使用const_cast才能將const性質轉換掉。在這種情況下,試圖使用其他三種形式的強制轉換都會導致編譯時的錯誤。類似地,除了添加或刪除const特性,用const_cast符來執(zhí)行其他任何類型轉換,都會引起編譯錯誤。29:怎么才能讓ptr指向value?constdoublevalue=0.0f;double*ptr=NULL;解答:強制類型轉換,去掉const屬性,如:ptr=const_cast<double*>(value);static_cast編譯器隱式執(zhí)行的任何類型轉換都可以由static_cast顯式完成:doubled=97.0;inti=static_cast<int>(d);等價于:doubled=97.0;inti=d;僅當類型之間可隱式轉換時〔除類層次間的下行轉換以外),staticcast的轉換才是合法的,否那么將出錯。類層次間的下行轉換是不能通過隱式轉換完成的,請看下例。classbase{};classchild:publicbase{};base*b;child*c;c=static_cast<child*>(b);//下行轉換,正確c=b;//編譯不正確但使用static_cast完成下行轉換〔把基類指針或引用轉換成子類指針或引用〕,由于沒有動態(tài)類型檢查,所以是不平安的。30:下面程序運行后的結果為〔〕。〔2023?網易游戲〕charstr[]="gladtotestsomething";char*p=str;P++;int*p1=static_cast<int*>(p);p1++;p=static_cast<char*>(p1);printf("%s\n",p);解答:編譯錯誤。在第4章我們介紹了C++類型的指針之間不含有隱式轉換(void*除外、const的某些用法為了兼容C語言也可隱式轉換),需要顯式轉換。故char*不能隱式轉換為int*,而僅當類型之間可隱式轉換時〔除類層次間的下行轉換以外),statiC_Cast的轉換才是合法的,否那么將出錯。假設改為:charstr[]="gladtotestsomething";char*p=str;P++;int*pl=(int*)(p);//orint*pl=reiriterpret_cast<int*>(p);pl++;p=(char*)(pi);//orp=reinterpret_cast<char*>(pl);printf("%s\n",p);那么輸出totestsomething。dynamic_cast31:下面〔〕會使這段程序編譯錯誤?〔2023?趨勢科技〕classA{public:A(){}};classB:publicA{public:B(){}};A*pb=newB();Bb;A.A*pa=dynamic_cast<A*>(pb); B.A*pa=static_cast<A*>(pb);C.Aa=static_cast<A>(b); D.Aa=dynamic_cast<A>(b);E.Noneofabove解答:D。用dynamic_cast進行轉換時,待轉換的類型只能是指針或引用,故D錯誤。A中:A*pa=dynamic_cast<A*>(pb);由于pb本身就是A*類型,實際上不需要轉換,事實上,假設將A項改為:A*pa=dynamic_cast<B*>(pb);那么編譯錯誤,提示“運行時dynamic_cast的操作數必須包含多態(tài)類類型〞。B中,實際上也并不需要轉換。C中B類繼承自A類,故B類對象b可隱式轉換為A類對象,故C正確。dynamic_cast主要用于類層次間的上行轉換和下行轉換。dynamic_cast運算符可以在執(zhí)行期決定真正的類型。如果下行轉換是平安的〔也就說,如果基類指針或者引用確實指向一個派生類對象),這個運算符會傳回轉型過的指針。如果downcast不平安,這個運算符會傳回空指針〔也就是說,基類指針或者引用沒有指向一個派生類對象)。在類層次間進行上行轉換時,dynamic_cast和static_cast的效果是一樣的;在進行下行轉換時,dynamic_cast具有類型檢查的功能,比static_cast更平安。32:下述代碼中,假設調用函數func的實參指向一個B類型的對象,語句1和語句2有什么差異?classB{public:B():b(1){}virtualvoidfoo(){};intb;};classD:publicB{public:D():d(2);intd;};voidfunc(B*pb){D*pd1=static_cast<D*>(pb); //語句1cout<<pd1->b<<endl;cout<<pd1->d<<endl;D*pd2=dynamic_cast<D*>(pb); //語句2cout<<pd2->b<<endl;cout<<pd2->d<<endl;}解答:在上面的代碼段中,如果pb指向一個D類型的對象,即B*pb=newD();func(pb);那么pdl和pd2是一樣的,并且對這兩個指針執(zhí)行D類型的任何操作都是平安的,語句1與語句2后的輸出語句都輸出1與2;但是,如果pb指向的是一個B類型的對象,即B*pb=newB();func(pb);那么pdl將是一個指向B對象的指針,對它進行D類型的操作將是不平安的〔如訪問d),輸出d的值時,將會是一個垃圾值,延后了錯誤的發(fā)現;而pd2將是一個空指針,對空指針進行操作,將會發(fā)生異常,從而能夠更早地發(fā)現錯誤。33:例2中,當B中無虛函數時,會發(fā)生什么?解答:B要有虛函數,否那么語句2會編譯出錯,VS2023會提示“運行時dynamic_cast的操作數必須包含多態(tài)類型〞;static_cast那么沒有這個限制。dynamic_cast運行時類型檢查需要運行時類型信息,而這個信息存儲在類的虛函數表〔關于虛函數表的概念,詳細可見本章〕中,只有定義了虛函數的類才有虛函數表,沒有定義虛函數的類是沒有虛函數表的,故會編譯錯誤。34:語句1與語句2效果是否相同?語句3與語句4呢?classBase1{virtualvoidfl(){cout<<"Base1::f1"<<endl;}};classBase2{virtualvoidf2(){cout<<"Base2::f2"<<endl;}};classDerived:publicBasel,publicBase2{voidf1(){cout<<"Derived::f1"<<endl;}voidf2(){cout<<"Derived::f2"<<endl;}Basel*pb=newDerived;Derived*pDl=dynamic_cast<Derived*>(pD); //語句1Berived*pD2=static_cast<Derived*>(pD); //語句2Base2*pB1=d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論