C++復(fù)習(xí)資料(源代碼)_第1頁
C++復(fù)習(xí)資料(源代碼)_第2頁
C++復(fù)習(xí)資料(源代碼)_第3頁
C++復(fù)習(xí)資料(源代碼)_第4頁
C++復(fù)習(xí)資料(源代碼)_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C++復(fù)習(xí)資料(源代碼)

西安財經(jīng)大學(xué)信息學(xué)院軟件工程1202:羅偉著

⑴析構(gòu)順序模型

#include<iostream>

#include<string>

#include<iomanip>

usingnamespacestd;

classA

{public:

A(int,string);

~A();

private:

intid;

stringmessage;};

A::A(intid2,stringmessage?)

{id=id2;

message=message2;

cout<<”對象構(gòu)造函數(shù)正在運行:"v<set\M4)<<message<<endl;

cout?"\nn;

)

A::~A()

{cout?(id==2||id==6)?"\n":"

cout<<“對象:析構(gòu)函數(shù)正在運行:"<<setv\^4)<<message<<endl;

cout?"\n";

}

voidcreat(void);

Afirst(l,“全局對象)

intmain()

{cout<<”主函數(shù)現(xiàn)在執(zhí)行:\n"?endl;

Asecond。,”(主函數(shù)中的局部對象)”);

staticAthird⑶"(主函數(shù)中的靜態(tài)對象)”);

creat();

cout<<”主函數(shù)再次執(zhí)行:\n";

Aforth(4J(主函數(shù)中的局部對象)”);

cout<<”主函數(shù)執(zhí)行完畢\n”;

return0;

}

voidcreat(void)

{cout?"creat函數(shù)開始執(zhí)行:\n"?endl;

Afifth(5J(creat中的局部對象)”);

staticAsixth(6,"(creat中的靜態(tài)對象)");

Aseventh(7/'(creat中的局部對象)");

cout?"creat函數(shù)結(jié)束:\n"?endl;

)

析構(gòu)時先析構(gòu)局部(動態(tài))對象,后析構(gòu)全局(靜態(tài))對象。靜態(tài)變量(對象)等價于全局

變量(對象),動態(tài)變量(對象)等價于局部變量(對象)。當(dāng)函數(shù)退出程序段(包括主函數(shù)

或者自定義的函數(shù)段)開始調(diào)用析構(gòu)函數(shù),和構(gòu)造函數(shù)調(diào)用的順序相反。

(2):const模型

#include<iostream>

usingnamespacestd;

classA

{public:

A(intc=OJnti=0);〃這里是為對象設(shè)置默認(rèn)值,若不對私有變量賦值則使用默認(rèn)值;同時

A(int=O,int=O)還可以改為A(intc=O,inti=O)的形式//

voidaddA()

{count+=a;

)

voidprint()const;

private:

intcount;

constinta;

);

A::A(intc,inti):count(c),a(i)

(

}

voidA::print()const

{cout?"countis"?count?""?"ais:"?a;

)

intmain()

{Avae,vbe(12/12);

vae.print();

cout?"\n";

vbe.print();

cout?"\n";

vbe.addA();

vbe.print();

return0;

)

Const數(shù)據(jù)和引用數(shù)據(jù)變量必須定義時為其賦值。采用成員初始化器,const數(shù)據(jù)一定以后就

不能被修改。Const成員函數(shù)不能修改對象。而const對象只能調(diào)用const函數(shù),非const函

數(shù)可以調(diào)用const和非const函數(shù)。Static成員變量可看成全局變量,可以被公有地訪問。即

類名::變量名。

⑶組合模型:

#include<iostream>

#include<cstring>

usingnamespacestd;

classdate

{public:

date(int=l,int=l,int=1900);

voidprint()const;

~date();

private:

intmonth;

intday;

intyear;

intcheakday(int)const;

);

date::date(intmnjntdyjntyr)

{month=(0<mn&&mn<=12)?mn:l;

year=yr;

day=cheakday(dy);

print();

)

voiddate::print()const

{cout?month?7"?day?7"?year?"\n"?endl;

)

date::~date()

{cout?"date析構(gòu)函數(shù):\n";

print();

)

intdate::cheakday(inttestday)const

{staticconstintdayspermonth[13]

{0,31,28,31,30,31,3031,31,30,313031

);

if(O<testday&&testday<dayspermonth[month])

returntestday;

if(month==2&&testday==29&&(year%400==011(year%4==0&&year&100!=0)))

returntestday;

elsereturn28;

)

classemployee

{public:

employee(constchar*const,constchar*const,constdate&,constdate&);

voidprint()const;

~employee();

private:

charfirstname[25];

charlastname[25];

constdatebirth;

constdatehire;

);

employee::employee(constchar*constfirst,constchar*constlast,constdate&birthdatezconst

date&hiredate):birth(birthdate),hire(hiredate)

{intlenth=strlen(first);

strncpy(firstnamezfirst,lenth);

firstname[lenth]='\O';

lenth=strlen(last);

strncpy(lastnamejastjenth);

lastname[lenth]='\O';

cout?"^fc^:"?firstname?""?lastname;

)

voidemployee::print()const

{cout?firstname?""?lastname?":"?',hired"?"\n";

hire.print();

birth.print();

}

employee::~employee()

{cout?"employee析構(gòu)函數(shù):"<<firstname<<""<<lastname;

)

intmain()

{datebirth(7,26,1993);

datehire(6,7,2014);

employeemanager(“羅偉”,birth,hire);

cout?"\n";

manager.print();

return0;

}

組合:成員對象也要用成員初始化器賦值。

⑷友元函數(shù)模型

#include<iostream>

usingnamespacestd;

classcount

{friendvoidsetx(count&,int);

public:

count(int=5);

voidprint()const;

private:

intx;

);

count::count(intx2):x(x2)

voidcount::print()const

{cout?,,x="?x?"\n";

)

voidsetx(count&C,intvae)

{C.x=vae;

}

intmain()

{countA;

cout?"A的初值:H?"\n";

A.print();

setx(A,6);

cout?"A的新值

A.print();

return0;

)

(5)this指針模型:

include<iostream>

usingnamespacestd;

classtest

{public:

test(int=1);

voidprint()const;

private:

intx;};

test::test(intvae):x(vae)

(

)

voidtest::print()const

{cout?"x="?x;

cout?"\nthis->="?this->x;

cout?"\n(*this).x="?(*this).x;

)

intmain()

{testA(6);

A.print();

return0;

)

⑹模板模型

/*#include<iostream>

usingnamespacestd;

template<typenameT>

voidprintarray(constT*array,intn)

{inti;

for(i=0;i<n;i++)

cout?array[i]?"H;

cout?"\n";

)

intmain()

{constintA=5;

constintB=6;

constintC=7;

inta[A]={l,2,3A5};

floatb[B]={l.l,2.2,3.3,4.4,5.5,6.6};

charc[C]="ABCDEF";

printarray(a,A);

printarray(b,B);

printarray(c,C);

return0;

}*/

include<iostream>

usingnamespacestd;

template<typenameT>

classstack

{public:

stack(int=10);

boolisfull()

{returntop==size-l;

)

boolisempty()

{returntop==-l;

)

boolpush(constT&);

boolpop(T&);

private:

intsize;

T*stackptr;

inttop;

);

template<typenameT>

stack<T>::stack(ints):size(s>0?s:10),stackptr(newT[size]),top(-1)

{coutvv”構(gòu)造函數(shù)運行完畢:\n”;

)

template<typenameT>

boolstack<T>::push(constT&ave)

stackptr[++top]=ave;

returntrue;}

else

returnfalse;

)

template<typenameT>

boolstack<T>::pop(T&vae)

{if(!isempty())

{vae=stackptr[top-];

returntrue;

}

else

returnfalse;

}

intmain()

{stack<double>A(7);

doublevae=l.l;

cout?"l將元素依次進(jìn)棧:\n“;

while(A.push(vae))

{cout?vae?'7';

vae+=l.l;

)

coutv<”\nl棧滿,無法進(jìn)棧:\n”;

cout<<"將元素依次出棧:\n";

while(A.pop(vae))

n

cout?vae?"/;

cout<<”\nl棧空,無法出棧:\n”;

stack<int>B(6);

intvoe=2;

cout?"2將元素依次進(jìn)棧:\n”;

while(B.push(voe))

,,

{cout?voe?/";

voe++;

}

cout?”\n2棧滿,無法進(jìn)棧:\n";

cout<<"將元素依次出棧:\n";

while(B.pop(voe))

cout?voe?'7,;

cout?”\n2???,無法出棧:\n";

return0;

1.1,2.2,3.3,4.4,5.5,6.6,7.7

將元第

7.7,6.6,5.5,4.4,3.3,2.2,1.1

1??眨瑹o濤出我:

2,3,4,5,6,7.

2棧滿,

將元素

7,6?5,4,3,2,

2???,無法出棧:

⑺:this指針的級聯(lián)調(diào)用模型:

#include<iostream>

#include<iomanip>

usingnamespacestd;

classtime

{public:

time(int=lzint=l,int=l);

time&settime(intJntJnt);

time&sethour(int);

time&setminute(int);

time&setsecond(int);

voidprintuniversal()const;

voidprintstandard()const;

private:

inthour;

intminute;

intsecond;

);

time::time(inthjntmjnts)

{settime(hzmzs);

)

time&time::settime(inthhjntmm,intss)

{sethour(hh);

setminute(mm);

setsecond(ss);

return*this;

)

time&time::sethour(inthl)

{hour=(hl>=0)?hl:0;

return*this;

)

time&time::setminute(intml)

{minute=(ml>=0&&ml<60)?ml:0;

return*this;

)

time&time::setsecond(intsi)

{second=(sl>=0&&sl<60)?sl:0;

return*this;

)

voidtime::printstandard()const

{cout<<“全國標(biāo)準(zhǔn)時間:\n”;

cout?((hour==011hour==12)?0:hour%24)?":"?setw(2)?minute?setw(2)?n:"?setw(2)?se

cond?((hour>=0&&hour<12)?"AM":"PM")?"\n";

)

voidtime::printuniversal()const

{cout<<“全國統(tǒng)一時間:\n”;

cout?setw(2)?setw(2)?hour?":"?setw(2)?minute?":,,?setw(2)?second?"\n";

)

intmain()

{timeAl(18,25,16);

timeA2(16/34/27);

cout<<“輸出Al的時間格式:\n“;

Al.printuniversal();

Al.printstandard();

cout<<”輸出A2的時間格式:\n";

A2.printuniversal();

A2.printstandard();

Al.settime(25z25,25).sethour(25).setminute(25).setsecond(25);

cout<<“輸出更改后Al的時間格式:\n";

Al.printuniversal();

Al.printstandard();

return0;

2

-

出加的0寸各式

0

國一0寸

統(tǒng):

:2

18

兼16

-

全國準(zhǔn)n

-

H

m

M

、

5

6M

:2

-

18格式

:1

^出筆的

3

<

-

n

H

國一3:

M

w繁

:3標(biāo)時間

16

全國27準(zhǔn)?

?

4

M

:3

7P

1寸、可格式

16日

量出:2改

ihh

q

A1間

J

國■

一■

:2標(biāo)時

25

全國25準(zhǔn)

1

PM

:

25

25

模型

算符

,口運

,delete

⑻:new

m>

ostrea

de<i

#inclu

ip>

oman

de<i

#inclu

string>

de<c

#inclu

std;

pace

ames

usingn

A

class

lic:

{pub

st);

*con

tchar

cons

onst,

har*c

nstc

A(co

~A();

nst

e()co

stnam

getfir

char*

const

e;

tnam

nfirs

{retur

)

nst

e()co

astnam

*getl

tchar

cons

ame;

nlastn

{retur

)

)

ount(

intgetc

static

nt;

ncou

{retur

)

:

private

me;

firstna

char*

e;

lastnam

char*

nt;

intcou

static

);

t=0;

coun

intA::

st)

onstla

har*c

nstc

rst,co

nstfi

ar*co

stch

(con

A::A

l];

st))+

n(fir

(strle

char[

new

ame=

{firstn

irst);

ame,f

(firstn

strcpy

+l];

ast))

len(l

[(str

char

ew

me=n

lastna

;

ejast)

nam

y(last

strcp

t++;

coun

”;

v”\n

ame<

<firstn

W2)<

<<set\

name

<<last

服務(wù):"

此對象

正在為

造函數(shù)

?”構(gòu)

cout

A::~A()

{cout<<”析構(gòu)函數(shù)正在為此對象服務(wù):"<<lastname<<setw(2)<<firstname<<”\n”;

delete[]firstname;

delete[]lastname;

count-;

intmain()

{cout<<"未定義時的對象個數(shù):"<<A::getcount()?"\n”;

A*Alptr=newA("邁克爾喬丹)

A*A2ptr=newA(“凱文杜朗特”);

cout<<”定以后的對象個數(shù)iZvA=getcountOvCn”;

cout<<“輸出Al的信息:"<<Alptr->getlastname()<<setw(2)<<Alptr->getfirstname()<<”\n”;

cout<<沖俞出A26\l{sM:',?Alptr->getlastname()?setw(2)?Alptr->getfirstname()?"\n";

deleteAlptr;

Alptr=O;

deleteA2ptr;

A2ptr=O;

cout<<”析構(gòu)后的人數(shù):"<<A::getcount()<<”\n”;

return0;

丹邁

函:03

為T

afi

翳特

函HIR-

以P

個i':M,RR

以^V

史2

、5

^丹

Al5霜S.

H莒

A2函

S.務(wù)

U為

務(wù)

二:/*#include<iostream>

#include<cstring>

usingnamespacestd;

classdate

{public:

date(int=lzint=l,int=1900);

~date();

voidprint()const;

private:

intmonth;

intday;

intyear;

intcheakday(int)const;

};

date::date(intmmjntddjntyr)

{month=(0<mm<=12)?mm:0;

year=yr;

day=cheakday(dd);

print();

)

intdate::cheakday(inttest)const

{staticconstintdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

if(O<test&&test==days[month])

returntest;

if(month==2&&test==29&&((year%400==0)11(year%4==0&&year%100!=0)))

returntest;

else

return28;

}

date::~date()

{cout?"date析構(gòu)函數(shù):\n";

print();

)

voiddate::print()const

{cout?Kdate類print函數(shù):\n";

cout?month?7"?day?7"?year?"\n";

)

classA

{public:

A(constchar*const,constchar*constzconstdate&,constdate&);

voidprint()const;

~A();

private:

charfirstname[25];

charlastname[25];

constdatebirth;

constdatehire;

};

A::A(constchar*constfirst,constchar*constlast,constdate&birthdate,const

date&hiredate):birth(birthdate),hire(hiredate)

{intlenth=strlen(last);

strncpy(lastnamejastjenth);

lastname[lenth]='\O';

lenth=strlen(first);

strncpyffirstnamejirstjenth);

firstname[lenth]='\O';

cout<<“姓名為:"<<lastname?firstname;

voidA::print()const

{cout?"A類print函數(shù):\n";

cout<<"雇員姓名:"<<lastname<<firstname<<,'被錄取為manager\n";

hire.print();

birth.print();

)

A::~A()

{cout?"A類析構(gòu)函數(shù):“<<lastname<<firstname<<”\n”;

)

intmain()

{datebirth。,26,1993);

datehire(6,7,2014);

Amanager(“偉”J羅'birth,hire);

manager.print();

return0;

)*/

(9):函數(shù)的重載電話模型:重載為(有元函數(shù))全局函數(shù)

#include<iostream>

#include<iomanip>

include<cstring>

usingnamespacestd;

classphonenumber

{friendistream&operator?(istream&zphonenumber&);

friendostream&operator?(ostream&,constphonenumber&);

private:

stringareacode;

stringexchange;

stringline;

);

ostream&operator?(ostream&output,constphonenumber&A)

{output?"("?A.areacode?")H?A.exchange?"-"?A.line?"\n";

returnoutput;

)

istream&operator?(istream&input,phonenumber&A)

{input?setw(3)?A.areacode;

input?setw(4)?A.exchange;

input?setw(4)?A.line;

returninput;

)

intmain()

{phonenumberA;

cout<<”鍵入號碼:\n”;

cin?A;

cout<<”輸出號碼:\n”;

cout?A;

return0;

)

鍵入號碼:

023

8788

4215

輸出號碼:

<023>8788-4215

(10)運算符重載一數(shù)組模型:

#include<iostream>

#include<iomanip>

#include<stdlib.h>

usingnamespacestd;

classarray

{friendostream&operator?(ostream&,constarray&);

friendistream&operator?(istream&,array&);

public:

array(int=10);

array(constarray&);

~array();

constarray&operator=(constarray&);

booloperator==(constarray&);

booloperator!=(constarray&);

int&operator[](int);

intoperator[](int)const;

intgetsize()const

{returnsize;

}

private:

intsize;

int*ptr;

);

array::array(ints):size((s>0?s:10))

{ptr=newint[size];

for(inti=0;i<size;i++)

ptr[i]=O;

)

array::array(constarray&A)

{size=A.size;

ptr=newint[size];

for(inti=0;i<size;i++)

ptr[i]=A.ptr[i];

)

constarray&array::operator=(constarray&a)

{if(&a!=this)

{if(size!=a.size)

{delete[]ptr;

size=a.size;

ptr=newint[size];

}

for(inti=0;i<size;i++)

ptr[i]=a.ptr[i];

)

)

boolarray::operator==(constarray&right)

{if(size!=right.size)

returnfalse;

for(inti=0;i<size;i++)

if(ptr[i]!=right.ptr[i])

returnfalse;

returntrue;

)

boolarray::operator!=(constarray&right)

{return!(*this==right);

)

int&array::operator[](inti)

{if(i<0||i>size)

{cerr?":"?i?,,:\n";

exit⑴;

)

returnptr[i];

)

intarray::operator[](inti)const

{if(i<0||i>size)

{cerr?":"?i?":\n";

exiHl);

)

returnptr[i];

)

ostream&operator?(ostream&output,constarray&A)

{inti;

for(i=O;i<A.size;i++)

(

output?setw(3)?A.ptr[i];

if((i+l)%5==0)

output?endl;

)

if(i%5==0)

output?endl;

returnoutput;

)

istream&operator?(istream&input,array&A)

{for(inti=O;i<A.size;i++)

input?A.ptr[i];

returninput;

}

arrayi^arrayO

{delete[]ptr;

}

intmain()

{arrayAl⑺;

arrayA2;

cout<<"輸出Al的大小:"<<Al.getsize()v<”\n輸出Al:\n"?Al;

cout?"\n輸出A2的大小:“<<A2.getsize()<<”\n輸出A2:\n"?A2;

cout<<"重新輸入Al,A2:\n";

cin?Al;

cin?A2;

cout<<"輸出Al的大小:"<<Al.getsize()?”\n輸出Al:\n"?Al;

cout?"\n輸出A2的大小:''<<A2.getsize()v<”\n輸出A2:\n"?A2;

if(A1!=A2)

cout?"Al!=A2:\n"?HfflAl初始化A3:\n";

arrayA3(A1);

cout<<"輸出A3的大小:"<<A3.getsize()?”\n輸出A3:\n"?A3;

cout?"\n用A2初始化Al:\n";

A1=A2;

if(A1==A2)

cout?"Al==A2:\n";

cout?"Al[5]="?Al[5]?"\n輸出Al:\n";

Al⑸=1000;

cout?"Al[5]="?Al[5]?"\n輸出A3:\n"?Al;

return0;

輸出虱的大小

輸出Ai:

00000

00

法中A2的大

溫馨提示

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

評論

0/150

提交評論