C常见英文面试笔试题.docx
《C常见英文面试笔试题.docx》由会员分享,可在线阅读,更多相关《C常见英文面试笔试题.docx(18页珍藏版)》请在冰豆网上搜索。
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);Membertomembercopy(shallowcopy)
WhatarealltheimplicitmemberfunctionsoftheclassOrwhatareallthefunctionswhichcompilerimplementsforusifwedon'tdefineone.
defaultctor
copyctor
assignmentoperator
defaultdestructor
addressoperator
Whatisconversionconstructor
constructorwithasingleargumentmakesthatconstructorasconversionctoranditcanbeusedfortypeconversion.
forexample:
classBoo
{
public:
Boo(inti);
};
BooBooObject=10;forexample:
classBoo
{
doublevalue;
public:
Boo(inti)
operatordouble()
{
returnvalue;
}
};
BooBooObject;
doublei=BooObject;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.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)(ij)
template:
template
Tmin(Ti,Tj)
{
returnij;
}
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};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=;
doublevalue=cube+temp);classparent
{
voidShow()
{
cout<<"i'mparent"<}
};
classchild:
publicparent
{
voidShow()
{
cout<<"i'mchild"<}
};
parent*parent_object_ptr=newchild;
parent_object_ptr->show().
classparent
{
virtualvoidShow()
{
cout<<"i'mparent"<}
};
classchild:
publicparent
{
voidShow()
{
cout<<"i'mchild"<}
};
parent*parent_object_ptr=newchild;
parent_object_ptr->show()Thisbaseclassiscalledabstractclassandclientwon'tabletoinstantiateanobjectusingthisbaseclass.
Youcanmakeapurevirtualfunctionorabstractclassthisway..
classBoo
{
voidfoo()=0;
}
BooMyBoo;Soapointerwithtwobytealignmenthasazerointheleastsignificantbit.Andapointerwithfourbytealignmenthasazeroinboththetwoleastsignificantbits.Andsoon.Morealignmentmeansalongersequenceofzerobitsinthelowestbitsofapointer.
Whatproblemdoesthenamespacefeaturesolve
Multipleprovidersoflibrariesmightusecommonglobalidentifierscausinganamecollisionwhenanapplicationtriestolinkwithtwoormoresuchlibraries.Thenamespacefeaturesurroundsalibrary'sexternaldeclarationswithauniquenamespacethateliminates消除thepotentialforthosecollisions.
namespace[identifier]{namespace-body}
Anamespacedeclarationidentifiesandassignsanametoadeclarativeregion.
Theidentifierinanamespacedeclarationmustbeuniqueinthedeclarativeregioninwhichitisused.Theidentifieristhenameofthenamespaceandisusedtoreferenceitsmembers.
Whatistheuseof'using'declaration
Ausingdeclarationmakesitpossibletouseanamefromanamespacewithoutthescope范围operator.
WhatisanIterator迭代器class
Aclassthatisusedtotraversethrough穿过theobjectsmaintainedbyacontainerclass.Therearefivecategoriesofiterators:
inputiterators,outputiterators,forwarditerators,bidirectionaliterators,randomaccess.Aniteratorisanentitythatgivesaccesstothecontentsofacontainerobjectwithoutviolatingencapsulationconstraints.Accesstothecontentsisgrantedonaone-at-a-timebasisinorder.Theordercanbestorageorder(asinlistsandqueues)orsomearbitraryorder(asinarrayindices)oraccordingtosomeorderingrelation(asinanorderedbinarytree).Theiteratorisaconstruct,whichprovidesaninterfacethat,whencalled,yieldseitherthenextelementinthecontainer,orsomevaluedenotingthefactthattherearenomoreelementstoexamine.Iteratorshidethedetailsofaccesstoandupdateoftheelementsofacontainerclass.Somethinglikeapointer.
Whatisadangling悬挂pointer
Adanglingpointerariseswhenyouusetheaddressofanobjectafteritslifetimeisover