版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序設(shè)計(jì)實(shí)習(xí)作業(yè)解答作業(yè)二:魔獸世界之一描述:魔獸世界的西面是紅魔軍的司令部,東面是藍(lán)魔軍的司令部。兩軍的司令部都會(huì)制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號(hào)、生命值、攻擊力這三種屬性。
雙方的武士編號(hào)都是從1開(kāi)始計(jì)算。紅方制造出來(lái)的第n個(gè)武士,編號(hào)就是n。同樣,藍(lán)方制造出來(lái)的第n個(gè)武士,編號(hào)也是n。武士在剛降生的時(shí)候有一個(gè)生命值。在每個(gè)整點(diǎn),雙方的司令部中各有一個(gè)武士降生。紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環(huán)制造武士。藍(lán)方司令部按照l(shuí)ion、dragon、ninja、iceman、wolf的順序循環(huán)制造武士。制造武士需要生命元。制造一個(gè)初始生命值為m的武士,司令部中的生命元就要減少m個(gè)。如果司令部中的生命元不足以制造某個(gè)按順序應(yīng)該制造的武士,那么司令部就試圖制造下一個(gè)。如果所有武士都不能制造了,則司令部停止制造武士。給定一個(gè)時(shí)間,和雙方司令部的初始生命元數(shù)目,要求你將從0點(diǎn)0分開(kāi)始到雙方司令部停止制造武士為止的所有事件按順序輸出。作業(yè)二:魔獸世界之一描述:魔獸世界的西面是紅魔軍的司令部,東面是藍(lán)魔軍的司令部。兩軍的司令部都會(huì)制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號(hào)、生命值、攻擊力這三種屬性。
雙方的武士編號(hào)都是從1開(kāi)始計(jì)算。紅方制造出來(lái)的第n個(gè)武士,編號(hào)就是n。同樣,藍(lán)方制造出來(lái)的第n個(gè)武士,編號(hào)也是n。武士在剛降生的時(shí)候有一個(gè)生命值。在每個(gè)整點(diǎn),雙方的司令部中各有一個(gè)武士降生。紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環(huán)制造武士。藍(lán)方司令部按照l(shuí)ion、dragon、ninja、iceman、wolf的順序循環(huán)制造武士。制造武士需要生命元。制造一個(gè)初始生命值為m的武士,司令部中的生命元就要減少m個(gè)。如果司令部中的生命元不足以制造某個(gè)按順序應(yīng)該制造的武士,那么司令部就試圖制造下一個(gè)。如果所有武士都不能制造了,則司令部停止制造武士。給定一個(gè)時(shí)間,和雙方司令部的初始生命元數(shù)目,要求你將從0點(diǎn)0分開(kāi)始到雙方司令部停止制造武士為止的所有事件按順序輸出。作業(yè)二:魔獸世界之一作業(yè)二:魔獸世界之一1寫出下面程序的運(yùn)行結(jié)果解析:return返回時(shí),產(chǎn)生臨時(shí)變量,調(diào)用拷貝構(gòu)造函數(shù),函數(shù)完全返回后,臨時(shí)變量銷毀,n減小41
驗(yàn)證:插入print語(yǔ)句類和對(duì)象的基本概念—作業(yè)三2寫出下面程序的運(yùn)行結(jié)果
解析:構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù)的調(diào)用注意區(qū)分:Sampleb=a;d=a;切記:不同的編譯選項(xiàng)可能會(huì)影響程序結(jié)果eg.Realsevs.Debug建議:賦值構(gòu)造函數(shù)參數(shù)使用const.9不優(yōu)化:22優(yōu)化:205
類和對(duì)象的基本概念—作業(yè)三Returnvalueoptimization原始版本原始版本實(shí)現(xiàn)偽碼優(yōu)化版本實(shí)現(xiàn)偽碼ReturnvalueoptimizationOptionsgcc-fno-elide-constructorsVisualC++/Od/O2擴(kuò)展閱讀:NamedReturnValueOptimizationinVisualC++2005Returnvalueoptimization(wikipedia)2寫出下面程序的運(yùn)行結(jié)果
解析:構(gòu)造函數(shù)和復(fù)制構(gòu)造函數(shù)的調(diào)用注意區(qū)分:Sampleb=a;d=a;切記:不同的編譯選項(xiàng)可能會(huì)影響程序結(jié)果eg.Realsevs.Debug建議:賦值構(gòu)造函數(shù)參數(shù)使用const.9不優(yōu)化:22優(yōu)化:205
類和對(duì)象的基本概念—作業(yè)三3程序輸出結(jié)果如下,請(qǐng)?zhí)羁誧lassA{public: intval; A(____________){val=n;}; ___________GetObj(){ return________; }};main(){ Aa;cout<<a.val<<endl;0 a.GetObj()=5; cout<<a.val<<endl;//修改了val5}(intn=0)int&GetObj(){
returnval;}或者A&GetObj(){
return*this;}類和對(duì)象的基本概念—作業(yè)三自動(dòng)類型轉(zhuǎn)換之構(gòu)造函數(shù)轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換:如果編譯器看到一個(gè)表達(dá)式或函數(shù)調(diào)用了一個(gè)不合適的類型,它經(jīng)常會(huì)將當(dāng)前類型轉(zhuǎn)到所需要的類型。構(gòu)造函數(shù)轉(zhuǎn)換:如果一個(gè)構(gòu)造函數(shù)函數(shù)能把另一類型對(duì)象(或引用)作為它的單個(gè)參數(shù),那么這個(gè)構(gòu)造函數(shù)允許編譯器執(zhí)行自動(dòng)類型轉(zhuǎn)換。4程序輸出結(jié)果如下,請(qǐng)?zhí)羁?+4i5+6i補(bǔ)足Complex類的成員函數(shù),不能增加成員變量classComplex{private: doubler,i;public: voidPrint(){cout<<r<<"+"<<i<<"i"<<endl;}};intmain(){ Complexa; a="3+4i"; a.Print(); a="5+6i"; a.Print(); }類和對(duì)象的基本概念—作業(yè)三構(gòu)造函數(shù)Complex(){};Complex(constchar*a){
…}另一種思路重載賦值操作符Complex&operator=(constchar*a){
…}演示類和對(duì)象的基本概念—作業(yè)三Print()函數(shù)限制了只做正數(shù)答案只是參考完整的Complex類還需要完善5程序輸出結(jié)果如下,請(qǐng)?zhí)羁?0補(bǔ)足Sample類的成員函數(shù),不能增加成員變量classSample{ public: intv; Sample(intn):v(n){};};main(){ Samplea(5); Sampleb=a; cout<<b.v;}Sample(constSample&x){v=2*x.v;}類和對(duì)象的基本概念—作業(yè)三6程序輸出結(jié)果如下,請(qǐng)?zhí)羁誘hisHello補(bǔ)足MyString類的成員函數(shù),不能增加成員變量classMyString{ char*p;public: MyString(char*s){ p=newchar[strlen(s)+1]; strcpy(p,s); } ~MyString(){delete[]p;} constchar*c_str(){returnp;}};main(){ MyStrings1("This"),s2=s1; s2.Copy("Hello"); cout<<s1.c_str()<<endl<<s2.c_str();}類和對(duì)象的基本概念—作業(yè)三補(bǔ)足成員函數(shù)voidCopy(char*s){ delete[]p; p=newchar[strlen(s)+1]; strcpy(p,s);}MyString(MyString&o){ p=newchar[strlen(o.p)+1]; strcpy(p,o.p);}類和對(duì)象的基本概念—作業(yè)三7程序輸出結(jié)果如下,請(qǐng)?zhí)羁?,55,5classBase{public: intk; Base(intn):k(n){}};classBig{public: intv; Baseb; Big_____________{} Big_____________{}};main(){ Biga1(5); Biga2=a1; cout<<a1.v<<","<<a1.b.k<<endl; cout<<a2.v<<","<<a2.b.k<<endl;}Big(intn):v(n),b(n){}Big(constBig&x):v(x.v),b(x.b.k){}類和對(duì)象的基本概念—作業(yè)三1程序輸出結(jié)果如下,請(qǐng)?zhí)羁?,1請(qǐng)寫出被隱藏的部分,MyInt的成員函數(shù)里不允許使用靜態(tài)變量classMyInt{ intnVal; public: MyInt(intn){nVal=n;} intReturnVal(){returnnVal;} ….};main(){ MyIntobjInt(10); objInt-2-1-3; cout<<objInt.ReturnVal(); cout<<","; objInt-2-1; cout<<objInt.ReturnVal();}MyInt&operator-(intx){nVal-=x; return*this;}運(yùn)算符重載—作業(yè)三2程序輸出結(jié)果如下,請(qǐng)?zhí)羁?4,5)(7,8)classPoint{private: intx; inty;public: Point(intx_,inty_):x(x_),y(y_){};_____;};_____operator<<(_____,constPoint&p){_____; return______;}main(){cout<<Point(4,5)<<Point(7,8);}運(yùn)算符重載—作業(yè)三classPoint{private: intx; inty;public: Point(intx_,inty_):x(x_),y(y_){};_____;};_____operator<<(_____,constPoint&p){_____; return______;}friendostream&operator
<<(ostream&o,constPoint&p);ostream&operator<<(ostream&o,constPoint&p)o<<"("<<p.x<<","<<p.y<<")"
<<endl;o運(yùn)算符重載—作業(yè)三3寫一個(gè)二維數(shù)組類Array2,使得下面程序的輸出結(jié)果是:0,1,2,3,4,5,6,7,8,9,10,11next0,1,2,3,4,5,6,7,8,9,10,11運(yùn)算符重載—作業(yè)三usingstd::cout;usingstd::endl;intmain(){Array2a(3,4);inti,j;for(i=0;i<3;i++)for(j=0;j<4;j++) a[i][j]=i*4+j;for(i=0;i<3;i++){for(j=0;j<4;j++){ cout<<a(i,j)<<","; }cout<<endl;}cout<<"next"<<endl;Array2b;b=a;for(i=0;i<3;i++){for(j=0;j<4;j++){ cout<<b[i][j]<<","; }cout<<endl;}return0;}運(yùn)算符重載—作業(yè)三有哪些操作??jī)?nèi)部如何實(shí)現(xiàn)?運(yùn)算符重載—作業(yè)三注:重載的實(shí)際上是第二維的[],第一維的[]直接調(diào)用int型一維數(shù)組的定義運(yùn)算符重載—作業(yè)三第二種解法:4程序輸出結(jié)果如下,寫一個(gè)HugeInt類3)100004)100005)100016)10006運(yùn)算符重載—作業(yè)三有多少人沒(méi)有把代碼編譯運(yùn)行就提交了?我是編譯器?voidmain(){ CHugeInta CHugeIntd(9999);+111112; CHugeInttemp2=111112+ cout<<"1)"<<temp<<endl; cout<<"2)"<<temp2<<endl; cout<<"3)"<<++d<<endl;
cout<<"4)"<<d++<<endl; cout<<"5)"<<d<<endl; d+=5; cout<<"6)"<<d<<endl; cout<<"7)"<<d+temp;}運(yùn)算符重載—作業(yè)三Again:標(biāo)準(zhǔn)答案只是參考,同樣存在問(wèn)題1寫一個(gè)Mystring類,使得程序輸出結(jié)果如下:
1.abcd-efgh-abcd-
2.abcd-
3.
4.abcd-efgh-
5.efgh-
6.c
7.abcd-
8.ijAl-
9.ijAl-mnop
10.qrst-abcd-
11.abcd-qrst-abcd-uvwxyz
about
big
me
take
abcd
qrst-abcd-繼承和多態(tài)—作業(yè)四#include<iostream>#include<cstring>usingnamespacestd;classMyString{public:char*p;MyString()//構(gòu)造函數(shù)
{p=NULL;}MyString(char*t)//構(gòu)造函數(shù){p=newchar[strlen(t)+1];strcpy(p,t);}MyString(constMyString&s)//復(fù)制構(gòu)造函數(shù){p=newchar[strlen(s.p)+1];strcpy(p,s.p);}Mystring類(1)繼承和多態(tài)—作業(yè)四~MyString()//析構(gòu)函數(shù){if(p)delete[]p;}MyStringoperator+(constMyString&s)//+號(hào)重載,這里表示//兩個(gè)MyString類型相加的情況{char*q;q=newchar[strlen(p)+strlen(s.p)+1];strcpy(q,p);strcat(q,s.p);MyStringtemp(q);delete[]q;returntemp;}Mystring類(2)繼承和多態(tài)—作業(yè)四
MyStringoperator+(constchar*s)//+號(hào)重載,這里表示//MyString類型+字符串的情形
{char*q;q=newchar[strlen(p)+strlen(s)+1];strcpy(q,p);strcat(q,s);MyStringtemp(q);delete[]q;returntemp;}MyString&operator=(constMyString&s)//賦值號(hào)重載
{if(p!=NULL){delete[]p;}p=newchar[strlen(s.p)+1];strcpy(p,s.p);return*this;}0Mystring類(3)繼承和多態(tài)—作業(yè)四char&operator[](intn)//[]號(hào)重載
{returnp[n];}MyString&operator+=(char*s)//+=號(hào)重載
{char*q;q=newchar[strlen(p)+1];strcpy(q,p);if(p!=NULL){delete[]p;}p=newchar[strlen(p)+strlen(s)+1];strcpy(p,q);strcat(p,s);delete[]q;return*this;}
Mystring類(4)繼承和多態(tài)—作業(yè)四MyStringoperator()(inti,intn){//()重載 char*q;q=newchar[n+1];strncpy(q,p+i,n);q[n]='\0';MyStringtemp(q);delete[]q;returntemp;}};ostream&operator<<(ostream&o,constMyString&s)//<<號(hào)重載{o<<s.p;returno;}MyStringoperator+(char*s,constMyString&t)//+號(hào)重載,這里是字符串+MyString的情形{charq[100];strcpy(q,s);strcat(q,t.p);returnMyString(q);}Mystring類(5)繼承和多態(tài)—作業(yè)四//<,==,>號(hào)的重載intoperator<(constMyString&s1,constMyString&s2){if(strcmp(s1.p,s2.p)<0){return1;}else{return0;}}intoperator==(constMyString&s1,constMyString&s2){if(!strcmp(s1.p,s2.p)){return1;}else{return0;}}intoperator>(constMyString&s1,constMyString&s2){if(strcmp(s1.p,s2.p)>0){return1;}else{return0;}}Mystring類(6)繼承和多態(tài)—作業(yè)四2從string類派生的寫法classMyString:publicstring{public: MyString():string(){} MyString(constchar*s):string(s){} MyString(conststring&s):string(s){} MyStringoperator()(ints,intl) { returnthis->substr(s,l); }};Mystring類(7)繼承和多態(tài)—作業(yè)四作業(yè)六:魔獸世界之二兩軍的司令部都會(huì)制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號(hào)、生命值這兩種屬性。
有的武士可以擁有武器。武器有三種,sword,bomb,和arrow,編號(hào)分別為0,1,2。不同的武士有不同的特點(diǎn)。dragon可以擁有一件武器。編號(hào)為n的dragon降生時(shí)即獲得編號(hào)為n%3的武器。dragon還有“士氣”這個(gè)屬性,是個(gè)浮點(diǎn)數(shù),其值為它降生后其司令部剩余生命元的數(shù)量除以造dragon所需的生命元數(shù)量。ninjia可以擁有兩件武器。編號(hào)為n的ninjia降生時(shí)即獲得編號(hào)為n%3和(n+1)%3的武器。iceman有一件武器。編號(hào)為n的iceman降生時(shí)即獲得編號(hào)為n%3的武器。lion有“忠誠(chéng)度”這個(gè)屬性,其值等于它降生后其司令部剩余生命元的數(shù)目。wolf沒(méi)特點(diǎn)。請(qǐng)注意,在以后的題目里,武士的士氣,生命值,忠誠(chéng)度在其生存期間都可能發(fā)生變化,都有作用,武士手中的武器隨著使用攻擊力也會(huì)發(fā)生變化。作業(yè)六:魔獸世界之二作業(yè)六:魔獸世界之二問(wèn)題沒(méi)使用類把類當(dāng)全局變量,只用來(lái)保存數(shù)據(jù)類設(shè)計(jì)得不好,結(jié)構(gòu)層次不清晰只有很少幾位同學(xué)的作業(yè)達(dá)到要求希望找點(diǎn)時(shí)間對(duì)照參考答案多思考1寫出下面程序的運(yùn)行結(jié)果classB{private:intnBVal;public:voidPrint(){cout<<"nBVal="<<nBVal <<endl;}voidFun(){cout<<"B::Fun"<<endl;}B(intn){ nBVal=n;}};classD:publicB{private:intnDVal;public:voidPrint(){B::Print();cout<<"nDVal="<<nDVal <<endl;}D(intn):B(3*n){nDVal=n;}voidFun(){cout<<"D::Fun"<<endl;}};繼承和多態(tài)—作業(yè)六main(){B*pb; D*pd;Dd(4); d.Fun();pb=newB(2); pd=newD(8);pb->Fun();pd->Fun();pb->Print();pd->Print();pb=&d;pb->Fun();pb->Print();}D::FunB::FunD::FunnBVal=2nBVal=24nDVal=8B::FunnBVal=12繼承和多態(tài)—作業(yè)六2寫出下面程序的運(yùn)行結(jié)果classA{public: A(){} virtualvoidfunc() {cout<<"A::func"<<endl;} ~A(){} virtualvoidfund() {cout<<"A::fund"<<endl;}};classB:publicA{public: B(){func();} voidfun(){func();} ~B(){fund();}};classC:publicB{public: C(){} voidfunc() {cout<<"C::func"<<endl;} ~C(){fund(); } voidfund() {cout<<"C::fund"<<endl;}};main(){ Cc;}繼承和多態(tài)—作業(yè)六A::funcC::fundA::fund3程序輸出
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 購(gòu)銷合同的變更規(guī)定
- 飼料旺季購(gòu)銷合同
- 商務(wù)秘書共同研發(fā)合同
- 房屋買賣合同應(yīng)注意的風(fēng)險(xiǎn)防范
- 全面機(jī)械購(gòu)銷合同全文
- 冰柜超市設(shè)備購(gòu)銷合同
- 專業(yè)人員外包服務(wù)合同
- 紅磚多孔磚定制購(gòu)銷合同
- 招商服務(wù)合同成長(zhǎng)
- 授權(quán)融資借款合同模板
- 動(dòng)物生物技術(shù)(課件)
- EPC總承包項(xiàng)目設(shè)計(jì)的總體安排與資源配置方案
- 浙江省溫州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- 甲醇鈉車間操作規(guī)范流程(堿法)
- 建材行業(yè)重大安全事故隱患檢查表(根據(jù)2022版工貿(mào)行業(yè)重大生產(chǎn)安全事故隱患判定標(biāo)準(zhǔn)編制)
- 隆中對(duì)-完整版獲獎(jiǎng)?wù)n件
- 金屬催化偶聯(lián)反應(yīng)(共30張)課件
- 小學(xué)語(yǔ)文人教五年級(jí)上冊(cè)(統(tǒng)編2023年更新)第六單元-《父愛(ài)之舟》學(xué)歷案
- 《國(guó)民經(jīng)濟(jì)核算》課程教學(xué)大綱
- 2021年商丘市第一人民醫(yī)院醫(yī)護(hù)人員招聘筆試試題及答案解析
- 中職餐飲服務(wù)與管理-完整版PPT課件中職全套教程
評(píng)論
0/150
提交評(píng)論