版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
程序設計實習作業(yè)解答作業(yè)二:魔獸世界之一描述:魔獸世界的西面是紅魔軍的司令部,東面是藍魔軍的司令部。兩軍的司令部都會制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號、生命值、攻擊力這三種屬性。
雙方的武士編號都是從1開始計算。紅方制造出來的第n個武士,編號就是n。同樣,藍方制造出來的第n個武士,編號也是n。武士在剛降生的時候有一個生命值。在每個整點,雙方的司令部中各有一個武士降生。紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環(huán)制造武士。藍方司令部按照lion、dragon、ninja、iceman、wolf的順序循環(huán)制造武士。制造武士需要生命元。制造一個初始生命值為m的武士,司令部中的生命元就要減少m個。如果司令部中的生命元不足以制造某個按順序應該制造的武士,那么司令部就試圖制造下一個。如果所有武士都不能制造了,則司令部停止制造武士。給定一個時間,和雙方司令部的初始生命元數(shù)目,要求你將從0點0分開始到雙方司令部停止制造武士為止的所有事件按順序輸出。作業(yè)二:魔獸世界之一描述:魔獸世界的西面是紅魔軍的司令部,東面是藍魔軍的司令部。兩軍的司令部都會制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號、生命值、攻擊力這三種屬性。
雙方的武士編號都是從1開始計算。紅方制造出來的第n個武士,編號就是n。同樣,藍方制造出來的第n個武士,編號也是n。武士在剛降生的時候有一個生命值。在每個整點,雙方的司令部中各有一個武士降生。紅方司令部按照iceman、lion、wolf、ninja、dragon的順序循環(huán)制造武士。藍方司令部按照lion、dragon、ninja、iceman、wolf的順序循環(huán)制造武士。制造武士需要生命元。制造一個初始生命值為m的武士,司令部中的生命元就要減少m個。如果司令部中的生命元不足以制造某個按順序應該制造的武士,那么司令部就試圖制造下一個。如果所有武士都不能制造了,則司令部停止制造武士。給定一個時間,和雙方司令部的初始生命元數(shù)目,要求你將從0點0分開始到雙方司令部停止制造武士為止的所有事件按順序輸出。作業(yè)二:魔獸世界之一作業(yè)二:魔獸世界之一1寫出下面程序的運行結果解析:return返回時,產(chǎn)生臨時變量,調(diào)用拷貝構造函數(shù),函數(shù)完全返回后,臨時變量銷毀,n減小41
驗證:插入print語句類和對象的基本概念—作業(yè)三2寫出下面程序的運行結果
解析:構造函數(shù)和復制構造函數(shù)的調(diào)用注意區(qū)分:Sampleb=a;d=a;切記:不同的編譯選項可能會影響程序結果eg.Realsevs.Debug建議:賦值構造函數(shù)參數(shù)使用const.9不優(yōu)化:22優(yōu)化:205
類和對象的基本概念—作業(yè)三Returnvalueoptimization原始版本原始版本實現(xiàn)偽碼優(yōu)化版本實現(xiàn)偽碼ReturnvalueoptimizationOptionsgcc-fno-elide-constructorsVisualC++/Od/O2擴展閱讀:NamedReturnValueOptimizationinVisualC++2005Returnvalueoptimization(wikipedia)2寫出下面程序的運行結果
解析:構造函數(shù)和復制構造函數(shù)的調(diào)用注意區(qū)分:Sampleb=a;d=a;切記:不同的編譯選項可能會影響程序結果eg.Realsevs.Debug建議:賦值構造函數(shù)參數(shù)使用const.9不優(yōu)化:22優(yōu)化:205
類和對象的基本概念—作業(yè)三3程序輸出結果如下,請?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;}類和對象的基本概念—作業(yè)三自動類型轉換之構造函數(shù)轉換自動類型轉換:如果編譯器看到一個表達式或函數(shù)調(diào)用了一個不合適的類型,它經(jīng)常會將當前類型轉到所需要的類型。構造函數(shù)轉換:如果一個構造函數(shù)函數(shù)能把另一類型對象(或引用)作為它的單個參數(shù),那么這個構造函數(shù)允許編譯器執(zhí)行自動類型轉換。4程序輸出結果如下,請?zhí)羁?+4i5+6i補足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(); }類和對象的基本概念—作業(yè)三構造函數(shù)Complex(){};Complex(constchar*a){
…}另一種思路重載賦值操作符Complex&operator=(constchar*a){
…}演示類和對象的基本概念—作業(yè)三Print()函數(shù)限制了只做正數(shù)答案只是參考完整的Complex類還需要完善5程序輸出結果如下,請?zhí)羁?0補足Sample類的成員函數(shù),不能增加成員變量classSample{ public: intv; Sample(intn):v(n){};};main(){ Samplea(5); Sampleb=a; cout<<b.v;}Sample(constSample&x){v=2*x.v;}類和對象的基本概念—作業(yè)三6程序輸出結果如下,請?zhí)羁誘hisHello補足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();}類和對象的基本概念—作業(yè)三補足成員函數(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);}類和對象的基本概念—作業(yè)三7程序輸出結果如下,請?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){}類和對象的基本概念—作業(yè)三1程序輸出結果如下,請?zhí)羁?,1請寫出被隱藏的部分,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è)三2程序輸出結果如下,請?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è)三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è)三3寫一個二維數(shù)組類Array2,使得下面程序的輸出結果是:0,1,2,3,4,5,6,7,8,9,10,11next0,1,2,3,4,5,6,7,8,9,10,11運算符重載—作業(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èi)部如何實現(xiàn)?運算符重載—作業(yè)三注:重載的實際上是第二維的[],第一維的[]直接調(diào)用int型一維數(shù)組的定義運算符重載—作業(yè)三第二種解法:4程序輸出結果如下,寫一個HugeInt類3)100004)100005)100016)10006運算符重載—作業(yè)三有多少人沒有把代碼編譯運行就提交了?我是編譯器?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è)三Again:標準答案只是參考,同樣存在問題1寫一個Mystring類,使得程序輸出結果如下:
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()//構造函數(shù)
{p=NULL;}MyString(char*t)//構造函數(shù){p=newchar[strlen(t)+1];strcpy(p,t);}MyString(constMyString&s)//復制構造函數(shù){p=newchar[strlen(s.p)+1];strcpy(p,s.p);}Mystring類(1)繼承和多態(tài)—作業(yè)四~MyString()//析構函數(shù){if(p)delete[]p;}MyStringoperator+(constMyString&s)//+號重載,這里表示//兩個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)//+號重載,這里表示//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)//賦值號重載
{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)//[]號重載
{returnp[n];}MyString&operator+=(char*s)//+=號重載
{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)//<<號重載{o<<s.p;returno;}MyStringoperator+(char*s,constMyString&t)//+號重載,這里是字符串+MyString的情形{charq[100];strcpy(q,s);strcat(q,t.p);returnMyString(q);}Mystring類(5)繼承和多態(tài)—作業(yè)四//<,==,>號的重載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è)六:魔獸世界之二兩軍的司令部都會制造武士。武士一共有dragon、ninja、iceman、lion、wolf五種。每種武士都有編號、生命值這兩種屬性。
有的武士可以擁有武器。武器有三種,sword,bomb,和arrow,編號分別為0,1,2。不同的武士有不同的特點。dragon可以擁有一件武器。編號為n的dragon降生時即獲得編號為n%3的武器。dragon還有“士氣”這個屬性,是個浮點數(shù),其值為它降生后其司令部剩余生命元的數(shù)量除以造dragon所需的生命元數(shù)量。ninjia可以擁有兩件武器。編號為n的ninjia降生時即獲得編號為n%3和(n+1)%3的武器。iceman有一件武器。編號為n的iceman降生時即獲得編號為n%3的武器。lion有“忠誠度”這個屬性,其值等于它降生后其司令部剩余生命元的數(shù)目。wolf沒特點。請注意,在以后的題目里,武士的士氣,生命值,忠誠度在其生存期間都可能發(fā)生變化,都有作用,武士手中的武器隨著使用攻擊力也會發(fā)生變化。作業(yè)六:魔獸世界之二作業(yè)六:魔獸世界之二問題沒使用類把類當全局變量,只用來保存數(shù)據(jù)類設計得不好,結構層次不清晰只有很少幾位同學的作業(yè)達到要求希望找點時間對照參考答案多思考1寫出下面程序的運行結果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寫出下面程序的運行結果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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《立秋健康養(yǎng)生》課件
- 2021學年天津市楊村一中、寶坻一中等四校高一下學期期末聯(lián)考地理試題
- 小學一年級20以內(nèi)數(shù)學口算練習題大全
- 國際貿(mào)易試卷答案解讀
- 幼兒園傳染病預防工作領導小組
- 年度第一學期歷史科期末考試試卷
- 高考語文分鐘專題突破(2):字形
- 北京市大興區(qū)2022-2023學年高三上學期期末試卷英語試題
- 餐飲娛樂場所保安工作經(jīng)驗
- 能源行業(yè)話務員工作心得
- 《心系國防 強國有我》 課件-2024-2025學年高一上學期開學第一課國防教育主題班會
- 港區(qū)船塢工程施工組織設計
- 2024年北京平谷區(qū)初三九年級上學期期末數(shù)學試題
- 2024年新人教版道德與法治七年級上冊全冊教案(新版教材)
- 初中物理期末復習+專題5+綜合能力題+課件++人教版物理九年級全一冊
- 2024年國開電大 統(tǒng)計學原理 形成性考核冊答案
- 幼兒園大班語言課件:不怕冷的大衣
- 2024年1月國開電大法律事務??啤镀髽I(yè)法務》期末考試試題及答案
- 2024全國能源行業(yè)火力發(fā)電集控值班員理論知識技能競賽題庫(多選題)
- 因式分解(分組分解法)專項練習100題及答案
- 冶煉煙氣制酸工藝設計規(guī)范
評論
0/150
提交評論