C++常见英文面试笔精彩试题.docx
《C++常见英文面试笔精彩试题.docx》由会员分享,可在线阅读,更多相关《C++常见英文面试笔精彩试题.docx(20页珍藏版)》请在冰豆网上搜索。
C++常见英文面试笔精彩试题
C/C++Programminginterviewquestionsandanswers
BySatishShetty,July14th,2004
Whatisencapsulation?
?
Containingandhidinginformationaboutanobject,suchasinternaldatastructuresandcode.Encapsulationisolates(使隔离)theinternalcomplexityofanobject'soperationfromtherestoftheapplication.Forexample,aclientcomponentaskingfornetrevenue(收益)fromabusinessobjectneednotknowthedata'sorigin.
Whatisinheritance?
Inheritanceallowsoneclasstoreusethestateandbehaviorofanotherclass.Thederivedclassinheritsthepropertiesandmethodimplementationsofthebaseclassandextendsitbyoverridingmethodsandaddingadditionalpropertiesandmethods.
WhatisPolymorphism?
?
Polymorphismallowsaclienttotreatdifferentobjectsinthesamewayeveniftheywerecreatedfromdifferentclassesandexhibit(展现)differentbehaviors.
Youcanuseimplementation(实现)inheritancetoachievepolymorphisminlanguagessuchasC++andJava.
Baseclassobject'spointercaninvoke(调用)methodsinderivedclassobjects.
YoucanalsoachievepolymorphisminC++byfunctionoverloadingandoperatoroverloading.
Whatisconstructororctor?
Constructorcreatesanobjectandinitializesit.Italsocreatesvtable变量列表?
forvirtualfunctions.Itisdifferentfromothermethodsinaclass.
Whatisdestructor?
Destructorusuallydeletesanyextraresourcesallocatedbytheobject.
Whatisdefaultconstructor?
Constructorwithnoargumentsoralltheargumentshasdefaultvalues.
Whatiscopyconstructor?
Constructorwhichinitializestheit'sobjectmembervariables(byshallowcopying)withanotherobjectofthesameclass.Ifyoudon'timplementoneinyourclassthencompilerimplementsoneforyou.
forexample:
BooObj1(10);//callingBooconstructor
BooObj2(Obj1);//callingboocopyconstructor
BooObj2=Obj1;//callingboocopyconstructor
Whenarecopyconstructorscalled?
Copyconstructorsarecalledinfollowingcases:
a)whenafunctionreturnsanobjectofthatclassbyvalue
b)whentheobjectofthatclassispassedbyvalueasanargumenttoafunction
c)whenyouconstructanobjectbasedonanotherobjectofthesameclass
d)Whencompilergeneratesatemporaryobject
Whatisassignmentoperator?
Defaultassignmentoperatorhandlesassigningoneobjecttoanotherofthesameclass.Membertomembercopy(shallowcopy)
Whatarealltheimplicitmemberfunctionsoftheclass?
Orwhatareallthefunctionswhichcompilerimplementsforusifwedon'tdefineone.?
?
defaultctor
copyctor
assignmentoperator
defaultdestructor
addressoperator
Whatisconversionconstructor?
constructorwithasingleargumentmakesthatconstructorasconversionctoranditcanbeusedfortypeconversion.
forexample:
classBoo
{
public:
Boo(inti);
};
BooBooObject=10;//assigningint10Booobject
Whatisconversionoperator?
?
classcanhaveapublicmethodforspecificdatatypeconversions.
forexample:
classBoo
{
doublevalue;
public:
Boo(inti)
operatordouble()
{
returnvalue;
}
};
BooBooObject;
doublei=BooObject;//assigningobjecttovariableioftypedouble.nowconversionoperatorgetscalledtoassignthevalue.
Whatisdiffbetweenmalloc()/free()andnew/delete?
mallocallocatesmemoryforobjectinheapbutdoesn'tinvokeobject'sconstructortoinitiallizetheobject.
newallocatesmemoryandalsoinvokesconstructortoinitializetheobject.
malloc()andfree()donotsupportobjectsemantics
Doesnotconstructanddestructobjects
string*ptr=(string*)(malloc(sizeof(string)))
Arenotsafe
Doesnotcalculatethesizeoftheobjectsthatitconstruct
Returnsapointertovoid
int*p=(int*)(malloc(sizeof(int)));
int*p=newint;
Arenotextensible
newanddeletecanbeoverloadedinaclass
"delete"firstcallstheobject'sterminationroutine(i.e.itsdestructor)andthenreleasesthespacetheobjectoccupiedontheheapmemory.Ifanarrayofobjectswascreatedusingnew,thendeletemustbetoldthatitisdealingwithanarraybyprecedingthenamewithanempty[]:
-
Int_t*my_ints=newInt_t[10];
...
delete[]my_ints;
whatisthediffbetween"new"and"operatornew"?
"operatornew"workslikemalloc.
Whatisdifferencebetweentemplateandmacro?
?
Thereisnowayforthecompilertoverifythatthemacroparametersareofcompatibletypes.Themacroisexpandedwithoutanyspecialtypechecking.
Ifmacroparameterhasapost-incrementedvariable(likec++),theincrementisperformedtwotimes.
Becausemacrosareexpandedbythepreprocessor,compilererrormessageswillrefertotheexpandedmacro,ratherthanthemacrodefinitionitself.Also,themacrowillshowupinexpandedformduringdebugging.
forexample:
Macro:
#definemin(i,j)(ii:
j)
template:
template
Tmin(Ti,Tj)
{
returnii:
j;
}
WhatareC++storageclasses?
auto
register
static
extern
auto:
thedefault.Variablesareautomaticallycreatedandinitializedwhentheyaredefinedandaredestroyedattheendoftheblockcontainingtheirdefinition.Theyarenotvisibleoutsidethatblock
register:
atypeofautovariable.asuggestiontothecompilertouseaCPUregisterforperformance
static:
avariablethatisknownonlyinthefunctionthatcontainsitsdefinitionbutisneverdestroyedandretains=keepitsvaluebetweencallstothatfunction.Itexistsfromthetimetheprogrambeginsexecution
extern:
astaticvariablewhosedefinitionandplacementisdeterminedwhenallobjectandlibrarymodulesarecombined(linked)toformtheexecutablecodefile.Itcanbevisibleoutsidethefilewhereitisdefined.
WhatarestoragequalifiersinC++?
Theyare..
const
volatile
mutable
Constkeywordindicatesthatmemoryonceinitialized,shouldnotbealteredbyaprogram.
volatilekeywordindicatesthatthevalueinthememorylocationcanbealteredeventhoughnothingintheprogram
codemodifiesthecontents.forexampleifyouhaveapointertohardwarelocationthatcontainsthetime,wherehardwarechangesthevalueofthispointervariableandnottheprogram.Theintentofthiskeywordtoimprovetheoptimizationabilityofthecompiler.
mutablekeywordindicatesthatparticularmemberofastructureorclasscanbealteredevenifaparticularstructurevariable,class,orclassmemberfunctionisconstant.
structdata
{
charname[80];
mutabledoublesalary;
}
constdataMyStruct={"SatishShetty",1000};//initlizedbycomplier
strcpy(MyStruct.name,"ShilpaShetty");//compilererror
MyStruct.salaray=2000;//complierishappyallowed
Whatisreference?
?
referenceisanamethatactsasanalias,oralternativename,forapreviouslydefinedvariableoranobject.
prependingvariablewith"&"symbolmakesitasreference.
forexample:
inta;
int&b=a;
&读amp
Whatispassingbyreference?
Methodofpassingargumentstoafunctionwhichtakesparameteroftypereference.
forexample:
voidswap(int&x,int&y)
{
inttemp=x;
x=y;
y=temp;
}
inta=2,b=3;
swap(a,b);
Basically,insidethefunctiontherewon'tbeanycopyofthearguments"x"and"y"insteadtheyrefertooriginalvariablesaandb.sonoextramemoryneededtopassargumentsanditismoreefficient.
Whendouse"const"referenceargumentsinfunction?
a)Usingconstprotectsyouagainstprogrammingerrorsthatinadvertently不经意的alterdata.
b)Usingconstallowsfunctiontoprocessbothconstandnon-constactualarguments,whileafunctionwithoutconstintheprototypecanonlyacceptnonconstantarguments.
c)Usingaconstreferenceallowsthefunctiontogenerateanduseatemporaryvariableappropriately.
WhenaretemporaryvariablescreatedbyC++compiler?
Providedthatfunctionparameterisa"constreference",compilergeneratestemporaryvariableinfollowing2ways.
a)Theactualargumentisthecorrecttype,butitisn'tLvalue
doubleCube(constdouble&num)
{
num=num*num*num;
returnnum;
}
doubletemp=2.0;
doublevalue=cube(3.0+temp);//argumentisaexpressionandnotaLvalue;
b)Theactualargumentisofthewrongtype,butofatypethatcanbeconvertedtothecorrecttype
longtemp=3L;
doublevalue=cuberoot(temp);//longtodoubleconversion
Whatisvirtualfunction?
Whenderivedclassoverridesthebaseclassmethodbyredefiningthesamefunction,thenifclientwantstoaccessredefinedthemethodfromderivedclassthroughapointerfrombaseclassobject,thenyoumustdefinethisfunctioninbaseclassasvirtualfunction.
classparent
{
voidShow()
{
cout<<"i'mparent"<}
};
classchild:
publicparent
{
voidShow()
{
cout<<"i'mchild"<}
};
parent*parent_object_ptr=newchild;
parent_object_ptr->show()//callsparent->show()i
nowwegotovirtualworld...
classparent
{
virtualvoidShow()
{
cout<<"i'mparent"<}
};
classchild:
publicparent
{
voidShow()
{
cout<<"i'mchild"<}
};
parent*parent_object_ptr=newchild;
parent_object_ptr->show()//callschild->show()
Whatispurevirtualfunction?
orwhatisabstractclass?
Whenyoudefineonlyfunctionprototypeinabaseclasswithoutimplementationanddothecompleteimplementation实现inderivedclass.Thisbaseclassiscalledabstractclassandclientwon'tabletoinstantiateanobjectusingthisbaseclass.
Youcanmakeapurevirtualfunctionorabstractclassthisway..
classBoo
{
voidfoo()=0;
}
BooMyBoo;//compilationerror
WhatisMemoryalignment?
?
Thetermalignmentprimarilymeansthetendency趋向ofanaddresspointerva