浙江大学C++课件Word格式.docx
《浙江大学C++课件Word格式.docx》由会员分享,可在线阅读,更多相关《浙江大学C++课件Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
![浙江大学C++课件Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/123765e4-2d56-4426-9e2a-71147b7caadc/123765e4-2d56-4426-9e2a-71147b7caadc1.gif)
classAprivate:
intk;
/hiddenimplementationfloatb;
public:
voidSetK(intk)/memberfunctionk=k;
a.k=777;
/.Xa.GetK()constructor(initialization)destructor(cleanup)classStack;
五五.2InheritanceclassBasic;
classDerive1:
publicBasic;
五五.3Polymorphism(多态性)五五.3.1StaticPolymorphismOverloading五五.3.1.1functionOverloading(函数重载函数重载)五五.3.1.2operatorOverloading(操作符重载操作符重载)classComplexdoublem_r;
doublem_i;
Complex(doubler=0.0,doublei=0.0)m_r=r;
m_i=i;
voidoperator()(doubler,doublei)m_r=r;
Complexoperator+(constComplex&
c)constreturnComplex(m_r+c,m_r,m_i+c,m_i);
doubleGetR()constreturm_r;
doubleGetI()constreturm_i;
classComplexPtrComplex*m_ptr;
ComplexPtr(Complex&
c)m_ptr=c;
constComplexPtr&
operator=(Complex*constptr)m_ptr=ptr;
return*this;
Complex*operator-()constreturnm_ptr;
Complex&
operator*()return*m_ptr;
operator(inti)returnm_ptri;
constComplex&
operator(inti)constreturnm_ptri;
ComplexPtr&
operator+()m_ptr+;
operator+(int)m_ptr+;
voidmain()Complexc(3,4);
ComplexPtrptr(c);
coutGetR()endl;
cout(*ptr).GetR()endl;
ptr=newComplex10;
ptr1(5.6);
ptr2=ptr1+c;
+ptr;
ptr+;
DefaultArguments(默认参数)五五.3.1.3Redefining(重定义重定义)namehidingOverriding(重写,覆盖,超载,过载)五五.3.2DynamicpolymorphismUpcasting(向上类型转换)VirtualFunctionIncrementaldevelopment(增量式开发)六.File&
Stream六六.1Textfilecout123.567endl;
k=123;
coutk;
cout.fill($);
cout.precision(8);
cout.width(7);
cout.setf(ios:
hex);
cout23endl;
fstreamin(in.txt,ios:
in);
fstreamout(out.txt,ios:
out);
if(!
in)return;
while(!
in.eof()charch=in.get();
out.put(ch);
六六.2Binaryfilereadwrite七.Templates七七.1FunctiontemplatestemplateTMax(Tx,Ty)return(xy?
x:
y);
七七.2Classtemplates#includeconstintSTACKSIZE=50;
templateclassStackT*m_pItem;
intm_top;
intm_size;
Stack(intsize=STACKSIZE)m_size=size;
m_pItem=newintsize;
m_top=-1;
voidPush(Titem)m_pItem+m_top=item;
TPop();
templateTStack:
Pop()returnm_pItemm_top-;
voidmain()Stacks(10);
inti;
for(i=0;
i10;
i+)s.Push(i);
i+)couts.Pop()endl;
八.Exceptionhandling八八.1assert八八.2returntrue/false八八.3try/catchthrow#includeclassOverflow;
classUnderflow;
constintSTACKSIZE=50;
voidPush(Titem)if(m_top=m_size-1)throwOverflow();
m_pItem+m_top=item;
Pop()if(m_top0)throwUnderflow();
returnm_pItemm_top-;
voidmain()Stacks(3);
tryfor(i=0;
catch(Overflowobj)coutStackOverflowendl;
catch(Underflow)coutStackUnderflowendl;
globaldataareastackheap九.Copy-constructorT(constT&
)overloading=overloadingT(const&
T)classStringchar*p;
intl;
String(char*s=null)if(s)l=:
strlen(s);
p=newcharl+1;
:
strcpy(p,s)elsep=null;
l=0;
String(constString&
s)if(s.p)l=:
strlen(s.p);
strcpy(p,s.p)elsep=null;
String()deletep;
Strings1(“Hi”);
Strings2=s1;
一十.Virtualdestructors&
Purevirtualfunctions(虚析构函数与纯虚函数)Abstractbaseclasses(抽象基类)classBaseint*p;
Base(intsize)p=newintsize;
Base()deletep;
classDerive:
publicBasechar*s;
Derive(intsize):
Base(size)s=newcharsize;
Derive()s=newcharsize;
Base*pB=newDerive(10);
deletepB;
一十一.Run-timetypeidentification(RTTI)typeid(t).name()#includeclassBase;
publicBase;
voidmain()Base*bp=newDerive;
couttypeid(*bp).name()endl;
一十二.C+explicitcastsdynamic_castdowncastingstatic_castupcastingreinterpret_castconst_castBaseb;
Derived;
Base*bp;
Derive*dp;
bp=dynamic_cast(&
d);
bp=&
b;
dp=dynamic_cast(bp);
bp=*d;
Derive&
dr1=dynamic_cast(*bp);
dr2=dynamic_cast(b);
一十三.HowC+implementslatebindingVTABLEVPTR一十四.StaticmembersclassAstaticintm;
intn;
Aa1,a2;
A1.m=7;
A*ap=newA;
coutmm+=12;
coutm”,”;
deleteaplcouta1.m;
一十五.NamespacenamespaceAintm;
namespaceBintm;
voidFb()m=3;
n=4;
voidFa()B:
m+=7;
m=23;
voidF()m=8;
A:
m=9;
B:
m=10;
一十六.Pointertoclassmember一十七.MultipleinheritanceclassBase1inti;
classBase2inti;
publicBase1,publicBase2floatf;
intgetInt()returni;
floatgetFloat()returnf;