



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医崩漏护理查房
- 碧绿的大圆盘课件
- 2025年 广西中烟考试笔试试卷附答案
- 值班主管培训
- 肾内科护理会诊
- 重症超声心脏分段超声
- 中职心理健康第十课
- 中医一般护理常规
- 中餐服务培训
- 大数据视域下事业单位档案管理的优化路径研究
- 医疗器械考试题及答案三类
- 智慧检验与大数据分析知到智慧树期末考试答案题库2025年温州医科大学
- 2024年汽车驾驶员(技师)新版试题及答案
- 2024北京海淀区六年级(下)期末数学试题及答案
- 成都市都江堰市青城山小学-心向往之 行必能至-五年级下英语期末家长会【课件】
- 三级养老护理员职业技能鉴定理论考试题(附答案)
- 创造性思维与创新方法(大连民族大学)知到网课答案
- 学校校园餐自查报告
- 2024年广东省陆河县事业单位公开招聘教师岗笔试题带答案
- 2025重庆水务环境控股集团有限公司招聘6人笔试参考题库附带答案详解
- 办公技能实操考试试题及答案
评论
0/150
提交评论