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

下載本文檔

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

文檔簡介

C++復習資料(源代碼)西安財經大學信息學院軟件工程1202:羅偉著⑴析構順序模型#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classA{public:A(int,string);?A();private:intid;stringmessage;};A::A(intid2,stringmessage2){id=id2;message=message2;cout<<"對象:”<<id<<"構造函數正在運行:"<<set\M4)<<message<<endl;cout?"\n";}A::?A(){cout?(id==2||id==6)?"\n":HH;cout<〈”對象:”<<id<<”析構函數正在運行:”<<set>A44)<<message<<endl;cout?"\n";}voidcreat(void);Afirst(l,”全局對象”);intmain(){cout<<”主函數現在執行:\n”《endl;Asecond(2,”(主函數中的局部對象)”);staticAthird(3,”(主函數中的靜態對象)”);creat();cout<ぐ主函數再次執行:\n";Aforth(4,”(主函數中的局部對象)”);cout<<”主函數執行完畢、n”;return0;}voidcreat(void){cout?"creat函數開始執行:\n"?endl;Afifth(5;,(creat中的局部對象)”);staticAsixth(6/*(creat中的靜態對象)”);Aseventh。,”(creat中的局部對象)”);cout?"creat函數結束:\n"?endl;}析構時先析構局部(動態)對象,后析構全局(靜態)對象。靜態變量(對象)等價于全局變量(對象),動態變量(對象)等價于局部變量(對象)。當函數退出程序段(包括主函數或者自定義的函數段)開始調用析構函數,和構造函數調用的順序相反。(2):const模型#include<iostream>usingnamespacestd;classA{public:A(intc=O,inti=0);〃這里是為對象設置默認值,若不對私有變量賦值則使用默認值;同時A(int=。,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數據和引用數據變量必須定義時為其賦值。采用成員初始化器,const數據一定以后就不能被修改。Const成員函數不能修改對象。而const對象只能調用const函數,非const函數可以調用const和非const函數。Static成員變量可看成全局變量,可以被公有地訪問。即類名::變量名。(3)組合模型:#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析構函數:、n”;print();}intdate::cheakday(inttestday)const{staticconstintdayspermonth[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};if(O<testday&&testday<dayspermonth[month])returntestday;if(monthニニ2&&testdayニニ29&&(year%400==01|(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&birthdate,constdate&hiredate):birth(birthdate),hire(hiredate){intlenth=strlen(first);strncpy(firstname,first,lenth);firstname[lenth]='\O';lenth=strlen(last);strncpy(lastname,last,lenth);lastname[lenth]='\O';cout<<”姓名:"<<firstname<<""<<lastname;}voidemployee::print()const{cout?firstname?""?lastname?":"?"hired"?"\n";hire.print();birth.print();}employee::?employee。{cout?"employee析構函數:"<<firstname<<""<<lastname;}intmain。{datebirth(7,26,1993);datehire(6,7,2014);employeemanager("羅","偉",birth,hire);cout?"\n";manager.print。;return0;)組合:成員對象也要用成員初始化器賦值。⑷友元函數模型#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&CJntvae){C.x=vae;}intmain(){countA;cout?"A的初值:,'?"\nn;A.print();setx(Az6);cout?HA的新值:“〈ぐ、n”;A.print();return0;}⑸this指針模型:#include<iostream>usingnamespacestd;classtest{public:test(int=1);voidprint()const;private:intx;};test::test(intvae):x(vae)(}voidtest::print()const{cout?"x=n?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]?ncout?"\n";}intmain(){constintA=5;constintB=6;constintC=7;inta[A]={l,2,3,4/5);floatb[B={LI22,3344556.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)zstackptr(newT[size]),top(-1){cout<〈”構造函數運行完畢:\n";)template<typenameT>boolstack<T>::push(constT&ave){if(!(isfull()))

stackptr[++top]=ave;returntrue;}elsereturnfalse;}template<typenameT>boolstack<T>::pop(T&vae){if(lisemptyO){vae=stackptr[top-];returntrue;}elsereturnfalse;}intmain(){stack<double>A(7);doublevae=l.l;cout?"l將元素依次進棧:\n”;while(A.push(vae)){cout?vae?'7';vae+=l.l;}cout<ぐ、nl棧滿,無法進棧:\n";cout<〈”將元素依次出棧:\n";while(A.pop(vae))cout?vae?'7,;cout<ぐ、nl棧空,無法出棧:、n”;stack<int>B(6);intvoe=2;cout?"2將元素依次進棧:、n”;while(B.push(voe)){cout?voe?*7';voe++;}cout<ぐ、n2棧滿,無法進棧:、n”;cout<ぐ將元素依次出棧:、n”;while(B.pop(voe))cout?voe?'7';cout<ぐ、n2棧空,無法出棧:、n”;return0;

7,6.6,5.5,4.4,3.3,2.2,1.12榜滿,將兀素7,6.6,5.5,4.4,3.3,2.2,1.12榜滿,將兀素2棧空,無法出棧:(7):this指針的級聯調用模型:#include<iostream>#include<iomanip>usingnamespacestd;classtime{public:time(int=ljnt=l,int=l);time&settime(int,int,int);time&sethour(int);time&setminute(int);time&setsecond(int);voidprintuniversal()const;voidprintstandard()const;private:inthour;intminute;intsecond;|;time::time(inthjntmjnts){settime(h,m,s);}time&time::settime(inthhjntmmjntss){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くぐ全國標準時間:'n“;cout?((hour==011hour==12)?0:hour%24)?":"?setw(2)?minute?setw(2)?":"?setw(2)?second?((hour>=0&&hour<12)?|"AM":"PM',)?"\nn;}voidtime::printuniversal()const{cout(ぐ全國統ー時間:'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(25/25/25),sethour(25).setminute(25).setsecond(25);cout<ぐ輸出更改后Al的時間格式:'n”;Al.printuniversal();Al.printstandard();return0;「ヨ,一B式

:格:

日6日日■■的ー16準:1的ー27準:2改ー25準25風統?標5筆包標4墨:;標:出國:2國:2出國:3國:3出國:2國25璽18全18璽16全16肇25全1:⑻:new,delete,ロ運算符模型#include<iostream>#include<iomanip>#include<cstring>usingnamespacestd;classA{public:A(constchar*const,constchar*const);~A();constchar*getfirstname()const{returnfirstname;}constchar*getlastname()const{returnlastname;}staticintgetcount(){returncount;}private:char*firstname;char*lastname;staticintcount;};intA::count=0;A::A(constchar*constfirst,constchar*constlast){firstname=newchar[(strlen(first))+l];strcpy(firstname,first);lastname=newchar[(strlen(last))+l];strcpy(lastname,last);count++;coutくぐ構造函數正在為此對象服務:"<<lastname?setw⑵<<firstname<<"\n";

A::~A(){cout<<"析構函數正在為此對象服務:"<<lastname<<setw(2)<<firstname<<"\n";delete[]firstname;delete[]lastname;count—;11intmain(){coutくぐ未定義時的對象個數:“<<A::getcount()くぐ、n”;A*Alptr=newA("邁克爾?ヴ喬丹”);A*A2ptr=newA(“凱文.“,“杜朗特“);cout<<“定以后的對象個數:“<<A::getcount()<<“ヽn“;cout<〈“輸出Al的信息:“<<Alptr->getlastname()<<setw(2)<<Alptr->getfirstname()<<“\n“;cout<<“輸出A2的信息:“<<Alptr?>getlastname()<<setw(2)<<Alptr?>getfirstname()<<“\n“;deleteAlptr;Alptr=O;deleteA2ptr;A2ptr=O;cout<<“析構后的人數:"?A::getcount()?"\n";return0;_^^^【婁婁な白白婁婁下

ハ函函后AlA2_^^^【婁婁な白白婁婁下

ハ函函后AlA2函函后歩為個再:f為為?.

刈在息在募:0象象-1-:2、し、スー:ー、:-.'.スヌ:二>二>ヌヌR.s.^^ケケn又D又免ふ象象一:/*#include<iostream>#include<cstring>usingnamespacestd;classdate{public:date(int=lJnt=lJnt=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ロ3]={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;elsereturn28;)date::?date。{cout?"date析構函數:、n”;print();}voiddate::print()const{cout?"date類print函數:'n”;cout?month?7"?day?7"?year?,,\n";}classA{public:A(constchar*const,constchar*const,constdate&,constdate&);voidprint()const;一A();private:charfirstname[25];charlastname[25];constdatebirth;constdatehire;);A::A(constchar*constfirst,constchar*const last,const date&birthdate,constdate&hiredate):birth(birthdate),hire(hiredate){intlenth=strlen(last);strncpy(lastname,last,lenth);lastname[lenth]=,\O,;lenth=strlen(first);strncpy(firstname,first,lenth);firstname[lenth]='\O';cout<<"姓名為:"<<lastname?firstname;voidA::print()const{cout?"A類print函數:、n”;cout<<”雇員姓名:“<<lastname<<firstname<<”被錄取為manager\n";hire.print();birth.print();}A::?A(){cout?"A類析構函數:“<<lastname<<firstname<<"\n";}intmain(){datebirth(7,26,1993);datehire(6,7,2014);Amanager(”偉ヴ羅ッbirth,hire);manager.print();return0;)7(9):函數的重載電話模型:重載為(有元函數)全局函數#include<iostream>#include<iomanip>#include<cstring>usingnamespacestd;classphonenumber{friendistream&operator?(istream&,phonenumber&);friendostream&operator?(ostream&,constphonenumber&);private:stringareacode;stringexchange;stringline;};ostream&operator?(ostream&output,constphonenumber&A){output?"("?A.areacode?,')"?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<ぐ輸出號碼ヘバ;cout?A;return0;}鍵入號碼:02387884215綸出號碼:(023)8788-4215(10)運算符重載ー數組模型:#include<iostream>#include<iomanip>include<stdlib.h>usingnamespacestd;classarray{friendostream&operator?(ostream&,constarray&);friendistream&operator?(istream&zarray&);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?":\nn;exit(l);}returnptr[i];}intarray::operator[](inti)const{if(i<0||i>size){cerr?":"?i?":\n,';exit⑴;}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;}array::?array。{delete[]ptr;}intmain(){arrayAl⑺;arrayA2;cout<ぐ輸出A!的大小:""Al.getsize()<<”\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()"”\n輸出A2:\n"?A2;if(A1!=A2)cout?"Al!=A2:\n"?"fflAl初始化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;輸出A1的大小:ク輸出乳:00i屮?-LjLTIl-U0000000A2的大小:10A2:00000000重新輸入Ai,A2:123456789101112131415161718額岀虱的大小:?輸岀Al:1234567撿岀A2的大小:10輸岀A2:89101112131415161717用Al初強化A3:領出A3的大小:7輸岀A3:1234567用A2初始化A1:A1==A2:Al[51-13輸岀Al:Al[51=1000輸岀A3:89101112100014151617(11):繼承派生一一雇傭模型#include<iostream>#include<cstring>usingnamespacestd;classE{public:E(conststring&,conststring&,conststring&/double=0.0/double=0.0);voidsetfirstname(conststring&first){firstname=first;}stringgetfirstname()const{returnfirstname;voidsetlastname(conststring&last){lastname=last;}stringgetlastname()const{returnlastname;}voidsetid(conststring&id2){id=id2;}stringgetid()const{returnid;}voidsetgrosssales(doublesales){grosssales=(sales>0)?sales:0.0;}doublegetgrosssales()const{returngrosssales;}voidsetrate(doubleratel){rate=(ratel>O)?ratel:O.O;}doublegetrate()const{returnrate;}doublemoney()const{returngrosssales*rate;}voidprint()const;private:stringfirstname;stringlastname;stringid;doublegrosssales;doublerate;};E::E(conststring&first,conststring&last,const string&idl,double saleszdoubleratel):firstname(first)Jastname(last)Jd(idl){setgrosssales(sales);setrate(ratel);}voidE::print()const{cout<<”員エ信息:\n',?firstname?","?lastname<<"\n身份證號:"?id?"\n毛銷售額:"?grosssales?"\n提成率:"?rate?"\n實際エ資:"<<grosssales*rate<vendl;}intmain(){EA("wei"/"luo'7z8000/0.56);cout?"員エ名:"?A.getfirstname()?"\n員エ姓:"?A.getlastname()?"\n身份證號:

"?A.getid()?n\n毛銷售額:"<<A.getgrosssales()くぐ、n提成率:"?A.getrate()?"\n本月實際エ資:"<<A.money()?endl;A.setgrosssales(lOOOO);A.setrate(0.6);cout<ぐ更改后的員エ銷售業績信息ヘバ;A.print();return0;}盒證隹頃工頭魚lu證售率エエ工^^月改エ盒證隹頃工頭魚lu證售率エエ工^^月改エ1,^^際員員量提本更員茸毛提買:w:1號額.?^£息。號額..資8056資エ00(13)雇傭模型一繼承派生#include<iostream>#include<cstring>usingnamespacestd;classE{public:E(conststring&,conststring&,conststring&,double=0.0,double=0.0);voidsetfirstname(conststring&first){firstname=first;}stringgetfirstname()const{returnfirstname;}voidsetlastname(conststring&last){lastname=last;}stringgetlastname()const{returnlastname;}voidsetid(conststring&id2){id=id2;stringgetid()const{returnid;}voidsetgrosssales(doublesales){grosssales=(sales>0)?sales:0.0;}doublegetgrosssales()const{returngrosssales;}voidsetrate(doubleratel){rate=(ratel>0)?ratel:0.0;}doublegetrate()const{returnrate;}doublemoney()const{returngrosssales*rate;}voidprint()const;protected:stringfirstname;stringlastname;stringid;doublegrosssales;doublerate;};E::E(conststring&first,const string&last,const string&idl,doublesales,doubleratel):firstname(first),lastname(last),id(idl){setgrosssales(sales);setrate(ratel);}voidE::print()const{cout<ぐ員エ信息:\n"?firstname?",M?lastname?"\n身份證號:,,?id?"\n毛銷售額:"?grosssales?"\n提成率:"?rate?H\n實際エ資:"<<grosssales*rate?endl;}classBE:publicE{public:BE(conststring&,conststring&,conststring&,double=0.0,double二。.〇,double二〇.〇);voidsetbasewage(doublewage2){basewage=(wage2>0)?wage2:0;)doublegetbasewage()const{returnbasewage;voidprint()const;doublemoney()const;private:

doublebasewage;};BE::BE(conststring&first,conststring&last,conststring&idl,doublesales,doubleratel,doublewage):E(first,last,idl,sales,ratel){setbasewage(wage);}doubleBE::money()const{returnbasewage+rate*grosssales;}voidBE::print()const{cout<<"基本工資型員エ信息:、n"<<"員エ名:"<<firstname<<”\n員エ姓:"<<lastname?"\n員エ身份證號:"?id?"\n毛銷售額:"?grosssales?"\n提成率:"?rate?"\n基本工資:"<<basewage<<"\n實際エ資:"?basewage+grosssales*rate;}intmain(){BEB("天","李",,5000,0.6,1000);cout<〈"員エ信息:、n"<<"員エ名:"<<B.getfirstname()?"\n員エ姓:""B.getlastname()<<"、n員エ身份證號:"<<B.getid()<<"、n毛銷售額:"<<B.getgrosssales()?"、n提成率:""B.getrate()<<"、n員エ基本工資:""B.getbasewage。;B.setbasewage(1200);B.setrate(0.58);cout?"\n更改后的員エ銷售業績信息:、n";B.print();cout?"\n實際エ資:$""B.money();return0;身隹n率養エ蠢身售率工エエT-T-T身隹n率養エ蠢身售率工エエT-T-Tエ覇エ策エエエ^W際際<:沃律禦:0,Q?姿舞:0.資資資號00資エ員號息

亠一日

。業息

00隹楫

1-HIE匸

:用「一(14)繼承派生一雇傭模型#include<iostream>#include<cstring>usingnamespacestd;classE{public:E(conststring&,conststring&,conststring&,double=0.0,double=0.0);voidsetfirstname(conststring&first){firstname=first;}stringgetfirstname()const{returnfirstname;}voidsetlastname(conststring&last){lastname=last;}stringgetlastname()const{returnlastname;}voidsetid(conststring&id2){id=id2;}stringgetid()const{returnid;}voidsetgrosssales(doublesales){grosssales=(sales>0)?sales:0.0;}doublegetgrosssales()const{returngrosssales;)voidsetrate(doubleratel){rate=(ratel>0)?ratel:0.0;}doublegetrate()const{returnrate;}doublemoney()const{returngrosssales*rate;}voidprint()const;private:stringfirstname;stringlastname;stringid;doublegrosssales;doublerate;);E::E(const string&first,const string&last,const string&idl,double sales.doublerateljifirstnamejfirstjjastnameflastjjdfidl){setgrosssales(sales);setrate(ratel);}voidE::print()const{coutvv”員エ信息:\n"?firstname?"/"?lastname?"\n身份證號:"?id?"\n毛銷售額:"?grosssales?"\n提成率:H?rate?"\n提成工資:"?grosssales*rate?endl;}classBE:publicE{public:BE(conststring&,conststring&,conststring&,double二〇.〇,double二〇.〇,double二〇.〇);voidsetbasewage(doublewage2){basewage=(wage2>0)?wage2:0;}doublegetbasewage()const{returnbasewage;}voidprint()const;doublemoney()const;private:doublebasewage;};BE::BE(conststring&first,conststring&last,conststring&idl,doublesales,doubleratel,doublewage):E(first,last,idl,sales,ratel){setbasewage(wage);}doubleBE::money()const{returnbasewage+E::money();}voidBE::print()const{cout<<”基本工資型員エ信息:、n";E::print();cout<<"基本工資\n”<<basewage?"\n實際エ資:“<<basewage+E::money();}intmain(){BEB("天ヴ李,5000,0.6,1000);cout<<"員エ信息:、n"<<"員エ名:"<<B.getfirstname()〈ぐ、n員エ姓:”〈〈B.getlastname()〈ぐ、n員エ身份證號:”〈〈B.getid。〈ぐ、n毛銷售額:”〈〈B.getgrosssales()〈ぐ、n提成率:”〈〈B.getrate()〈ぐ、n員エ基本工資:"?B.getbasewage();B.setbasewage(1200);B.setrate(0.58);cout?"\n更改后的員エ銷售業績信息:、n”;

B.print();cout?"\n實際エ資:$"<<B.money();return0;自』士ーユ窗:。業息並隹宿:1銷エ資エ員自』士ーユ窗:。業息並隹宿:1銷エ資エ員?天空證:5.6エ。費!心,為:0本的資息號額.?資資資拈I,????メスq??-/<rrk-1,?:,??:>???:?身售率養エ信交證售率工工エ丁丄エエ工覇エ室工片^^室00際上貝員員員毛提員婁員天身毛提簟12實宀}引用基類的數據成員的方法:將基類數據成員聲明為protected,則派生類成員函數就可以直接訪問private數據正如基類成員函數訪問自身的數據成員ー樣。將基類數據成員聲明為private〇則此時派生類成員函數不能直接引用基類數據成員。要通過設定基類SET和GET成員函數來間接操縱數據成員。若在派生類成員函數中要引用基類成員函數則必須使用〃基類名::成員函數”的格式返回一個值來引用基類數據成員。(15)繼承派生,析構調用順序ーー雇傭模型#include<iostream>#include<cstring>usingnamespacestd;classE{public:E(conststring&,conststring&,conststring&,double=0.0,double=0.0);?E(){cout<<“基類析構函數:、n”;print();}voidsetfirstname(conststring&first){firstname=first;stringgetfirstname()const{returnfirstname;}voidsetlastname(conststring&last){lastname=last;stringgetlastname()const{returnlastname;}voidsetid(conststring&id2){id=id2;}stringgetid()const{returnid;}voidsetgrosssales(doublesales){grosssales=(sales>0)?sales:0.0;}doublegetgrosssales()const{returngrosssales;)voidsetrate(doubleratel){rate=(ratel>0)?ratel:0.0;}doublegetrate()const{returnrate;}doublemoney()const{returngetgrosssales()*getrate();}voidprint()const;private:stringfirstname;stringlastname;stringid;doublegrosssales;doublerate;);E::E(const string&first,const string&last,const string&idl,doublesales,doubleratel):firstname(first),lastname(last),id(idl){cout<<"基類構造函數\n:";setgrosssales(sales);setrate(ratel);}voidE::print()const{cout<<"基類print函數:、n";cout<<”員エ信息:\n"?getfirstname()?",H?getlastname()?"\n身份證號:“"getid()?”\n

毛銷售額:"?getgrosssales()?"\n提成率:"?getrate()?"\n提成工資:"?getgrosssales()*getrate()?endl;classBE:publicE{public:BE(conststring&,conststring&,conststring&,double=0.0/double=0.0/double=0.0);?BE(){coutくぐ派生類析構函數:、n”;print();}voidsetbasewage(doublewage2){basewage=(wage2>0)?wage2:0;}doublegetbasewage()const{returnbasewage;}voidprint()const;doublemoney()const;private:doublebasewage;};BE::BE(conststring&first,conststring&last,conststring&idl,doublesales,doubleratel,doublewage):E(first,last,idl,sales,ratel){cout<〈”派生類構造函數:";setbasewage(wage);}doubleBE::money()const{returnbasewage+E::money();}voidBE::print()const{coutくぐ派生類print函數,員エ信息:、n”;E::print();cout<〈”基本工資、n"?basewage<<"、n實際エ資:"<<basewage+E::money();)intmain(){{EAl("wei","luo",,8000,0.5);)cout?endl;BEA2("tian","li",,10000,0.48,800);cout?endl;BEA3("^";'^"/,12000,0.3,1800);cout?endl;return0;析構函數::p£nt函數:エ資:5ザ0基類析構函數:巴int析構函數::p£nt函數:類構造函數:生類構造函數:生類類構造函數:生類構造函數:生類‘偽證號售額:8000成率:0-5成工資:4000構函數:,int函數?員エ信息、:t函數:冊證號售額:12000是成率:0.3噴エ鄭3600鉢エ資800餞證號售説I2000成率:0.3成工資:3600生類種構函數:生類p£nt函數,員エ信息:類段如t函數:サ證號售額:10000文率:0.48な士資:4800際エ資:5600基類析構函數:類Mint函數:■:100000.48:4800(16)繼承派生多態ーー雇傭模型#include<iostream>#include<cstring>usingnamespacestd;classE{public:E(conststring&,conststring&,conststring&,double二〇?〇,double二〇?〇);voidsetfirstname(conststring&first){firstname=first;}stringgetfirstname()const{returnfirstname;}voidsetlastname(conststring&last){lastname=last;}stringgetlastname()const{returnlastname;voidsetid(conststring&id2){id=id2;}stringgetid()const{returnid;}voidsetgrosssales(doublesales){grosssales=(sales>0)?sales:0.0;}doublegetgrosssales()const{returngrosssales;)voidsetrate(doubleratel){rate=(ratel>O)?ratel:O.O;}doublegetrate()const{returnrate;}virtualdoublemoney()const{returngetgrosssales()*getrate();}virtualvoidprint()const;private:stringfirstname;stringlastname;stringid;doublegrosssales;doublerate;};E::E(const string&first,const string&last,const string&idl,double sales,doubleratel):firstname(first),lastname(last),id(idl){coutくぐ基類構造函數:、n”;setgrosssales(sales);setrate(ratel);}voidE::print()const{cout<ぐ基類print函數:'n”;cout<<"員エ信息:\n"?getfirstname()?"/"?getlastname()?H\n身份證號:"?getid()?"\n毛銷售額:"?getgrosssales()?M\n提成率:"?getrate()?"\n提成工資:"?getgrosssales()*getrate()?endl;}classBE:publicE{public:BE(conststring&,conststring&,conststring&,double二〇,〇,double二〇。double=0.0);voidsetbasewage(doublewage2){basewage=(wage2>0)?wage2:0;}doublegetbasewage()const{returnbasewage;}virtualvoidprint()const;virtualdoublemoney()const;private:doublebasewage;};BE::BE(conststring&first,conststring&last,conststring&idl,doublesales,doubleratel,doublewage):E(first,last,idl,sales,ratel){cout(ぐ派生類構造函數:\n";setbasewage(wage);}doubleBE::money()const{returnbasewage+E::money();)voidBE::print()const{cout<<"派生類print函數,員エ信息:、n”;E::print();cout<<”基本工資、n”<<basewage?”\n實際エ資:"<<basewage+E::money()<<”\n”;}intmain(){Ee("wei","luo",,,10000,0.5);E*eptr=0;BEbe("tian","liH,,8000,0.4,1800);BE*beptr=0;cout?"e.print():\n";e.print();cout<〈”將基類指針指向基類對象:'n”;eptr=&e;cout?"eptr->print():\n";eptr->print();cout<〈”將派生類指針指向派生類對象:、n”;beptr=&be;cout?"beptr->print():\n";beptr->print();cout〈ぐ將基類指針指向派生類對象體現同名函數的多態性:\n";eptr=&be;cout?"eptr->print():\nH;eptr->print();return0;

曇類均造函數:塞類構造函數:盤生共構造函數:e.printO曇類均造函數:塞類構造函數:盤生共構造函數:e.printO:基類ppint函數:bepti*->printく):區生類p£nt函數,員エ信息:基主print函數:身份證號:S1052219930726733X身份證號銷售額:身份證號銷售額:10000提成率:0.5提成工資:5000畐基類キ旨針指向基類對象:基類代セt函斂:員エ信息:ナ證號售額:10000碎:‘0.5握成率:0.4fet32081800實應エ資:5000搭建類籍針指向派生類對象體現同名函數的多態性5pti*->pi*int〇:派生主print展J數,員エ信息:復類p£nt函數:員エ信息::5000tian,li:5000份證號舊就8000是成率:0.4成工資:3200笨エ資800HE行エ杏.B000(17)繼承派生多態一雇傭模型:(18)多態的向上映射模型:將派生類對象地址賦給基類指針,用派生類對象給基類對象(對象引用)賦值。#include<iostream>usingnamespacestd;classShape(public:virtualdoubleArea()const(return0.0;}〃純虛函數,在派生類中重載virtualvoidPrint()const=0;);classPoint:publicShape(intx,y;〃點的x和y坐標public:Point(int=0,int=0);/Z構造函數voidSetPoint(inta,intb);/Z設置坐標intGetX()const〃取x坐標returnx;intGetY()const〃取y坐標returny;)virtualvoidPrint()const;〃輸出點的坐標};Point::Point(inta,intb):x(a)zy(b){cout?"point對象構造函數運行完畢:\n";}voidPoint::SetPoint(inta,intb)y=b;}voidPoint::Print()const(cout<<“坐標為ぐ<vT?x?","?y?'],;}classCircle:publicPoint{doubleradius;public:Circle(intx=0,inty=0,doubler=0.0);voidSetRadius(doubler); 〃設置半徑doubleGetRadius()const; 〃取半徑virtualdoubleArea()const;〃計算面積avirtualvoidPrint()const; 〃輸出圓心坐標和半徑);Circle::Circle(intajntb,doubler):Point(a,b),radius(r){cout?"circle對象構造函數運行完畢へn”;}voidCircle::SetRadius(doubler){radius=(r>=0?r:0);}doubleCircle::GetRadius()const{returnradius;}doubleCircle::Area()constreturn3.14159*radius*radius;voidCircle::Print()const{cout?"圓心坐標:\n”;Point::Print();cout?圓半徑=M?radius?"\n?|?^:"?Area()?"\nM;}voidvirtualViaPointer(constShape*);voidvirtualViaReference(constShape&);intmain(){〃創建point、circle對象Pointpoint(30,50);Circlecircle(120,80,10,0);〃輸出point、circle>rectangle對象信息point.Print();cout?endl;circle.Print();〃定義基類對象指針Shape*arrayOfShapes[2];arrayOfShapes[0]=&point;arrayOfShapes[1]=&circle;〃通過基類對象指針訪問派生類對象cout?"向上映射:把派生類對象的地址賦給基類指針\n“;for(inti=0;i<2;i++)(virtualViaPointer(arrayOfShapes[i]);}cout<<"向上映射:用派生類對象給基類對象賦值、n";for(intj=0;j<2;j++){virtualViaReference(*arrayOfShapes[j]);}return0;}〃通過基類對象指針訪問虛函數實現動態綁定voidvirtualViaPointer(constShape*baseClassPtr){baseClassPtr->Print();cout?"面積:"?baseClassPtr->Area()?endl;}〃通過基類對象引用訪問虛函數實現動態綁定voidvirtualViaReference(constShape&baseClassRef)baseClassRef.Print();cout?"面積="?baseClassRef.Area()?endl;)(19):#include<iomanip>usingnamespacestd;classtime{friendostream&operator<<(ostream&,consttime&);public:time(int,int,int);time&operator++();private:intsecond;intminute;inthour;);time::time(ints,intmjnth){hour=h;minute=m;second=s;if(second>60)second=0;if(minute>60)minute=0;if(hour>24)hour=24;}time&time::operator++(){++second;if(second>=60)

{++minute;second=0;++minute;if(minute>=60){++hour;minute=O;if(hour>=24)hour=0;)}return*this;}ostream&operator?(ostream&output/consttime&t){output<<":\n"<<t.hour<<":"<<t.minute<<":"<<t.second<<”\n”;returnoutput;|intmain(){time11(59,59,23);cout?tl;++tl;cout?tl;cout?++tl;return0;}(20)函數的重載模型:String類模型#include<iostream>#include<iomanip>#include<cstring>#include<cstdlib>usingnamespacestd;classString{friendostream&operator<<(ostream&,constString&);friendistream&operator?(istream&,String&);public:String(constchar*);String(constString&);?String。;constString&operator=(constString&);constString&operator+=(constString&);booloperator!()const;booloperator==(constString&)const;booloperator!=(constString&rightjconst{return!(*this==right);}booloperator<(constString&)const;booloperator>(constString&right)const{returnright<*this;}booloperator<=(constString&right)const{return!(right<*this);}booloperator>=(constString&right)const{return!(*this<right);}char&operator[](int);charoperator[](int)const;Stringoperator()(intJnt=0)const;intgetlenth()const{returnlenth;}private:intlenth;char*sptr;voidsetstring(constchar*);};String::String(constchar*s):lenth(s!=O?strlen(s):O){coutくぐ形參為const字符指針的構造函數運行中……,并輸出S:"?s?"\n";setstring(s);}String::String(constString©):lenth(copy.lenth){cout?”形參為const對象的構造函數運行中……,并輸出S:M?copy.sptr?"\n";setstring(copy.sptr);)constString&String::operator=(constString&right){if(&right!=this){delete[]sptr;lenth=right.lenth;setstring(right,sptr);}elsecout<ぐ

溫馨提示

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

評論

0/150

提交評論