實(shí)驗(yàn)項(xiàng)目1 C++運(yùn)行環(huán)境及基礎(chǔ)語法_第1頁
實(shí)驗(yàn)項(xiàng)目1 C++運(yùn)行環(huán)境及基礎(chǔ)語法_第2頁
實(shí)驗(yàn)項(xiàng)目1 C++運(yùn)行環(huán)境及基礎(chǔ)語法_第3頁
實(shí)驗(yàn)項(xiàng)目1 C++運(yùn)行環(huán)境及基礎(chǔ)語法_第4頁
已閱讀5頁,還剩89頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

世界因?yàn)榕缘恼Q生,顯得分夕卜美麗!只個(gè)小小的問候,卻是一個(gè)濃濃的真意!女2實(shí)驗(yàn)項(xiàng)目1 C++運(yùn)行環(huán)境及基礎(chǔ)語法實(shí)驗(yàn)?zāi)康模菏煜++的開發(fā)運(yùn)行環(huán)境掌握C++的基本語法熟悉結(jié)構(gòu)化程序設(shè)計(jì)實(shí)驗(yàn)內(nèi)容:最簡單的C++程序運(yùn)行調(diào)試實(shí)驗(yàn)步驟:輸入下面程序并運(yùn)行,記錄運(yùn)行結(jié)果#include<iostream>usingnamespacestd;intmain(){cout<<"myfirstcppprogram,,?endl;return0;}問題:main函數(shù)的返回值有什么含義?程序中main可以定義為void類型嗎?可以去掉最后的retun0語句嗎?修改程序,并編譯,注意屏幕提示,解釋結(jié)果返回的值的意思是程序的結(jié)束標(biāo)志。當(dāng)返回值為VOID時(shí),此時(shí)無須加上返回值。也可以去掉最后的0,此時(shí)的返回類型為VOIDo修改后的程序:#include<iostream>intmain(){std::cout<<,/myfirstcppprogram,/?std::endl;return0;)答:運(yùn)行的結(jié)果://myfirstcppprogram//Pressanykeytocontinue程序中的usingnamespacestd;有什么作用?如果不要計(jì)算機(jī)會(huì)有和提示?修改程序,刪除usingnamespacestd;并讓程序能運(yùn)行作用:命名空間是為了防止名字(符號(hào))沖突而把一系列的類型、變量、函數(shù)放在一起的一種方式,命名控件要和變量作用域放在一起來理解,在作用域范圍內(nèi)使用命名空間就可以訪問該命名空間內(nèi)定義的符號(hào)。提示如下:compiling...I.cppE:\first\1.cpp(3):errorC2065:'cout':undeclaredidentifierE:\first\1.cpp(3):errorC2297:'?':illegal,rightoperandhastype'char[21]'E:\first\1.cpp(3):errorC2065:'endl':undeclaredidentifier執(zhí)行cl.exe時(shí)出錯(cuò).l.obj-1error(s),0warning(s)提示:使用std::coutStd::cout<<,/returntook!”〈<endl;實(shí)驗(yàn)內(nèi)容.結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)下面程序是從鍵盤輸入一個(gè)數(shù),并求其階乘:注意:重新建一個(gè)工程,不要在一個(gè)工程中有多個(gè)main函數(shù)出現(xiàn)#include<iostream>usingnamespacestd;intmain(){intn,fact;cin?"inputanum:""?n; 〃這條語句有錯(cuò),應(yīng)怎么改?注意cin和cout的區(qū)別for(inti=1;i<n;i++){fact=fact*i;}cout?n?"!="?fact?endl;return0;}驗(yàn)證:輸入5,應(yīng)該是120,那么20的階乘呢?怎么解釋結(jié)果?注意初始化和變量的范圍提示:從變量的作用域上考慮問題:修改程序,在程序最后輸出循環(huán)變量i的值注意程序中的語句:for(inti=1;i<n;i++){,和以前C程序的寫法有什么區(qū)別?說明這種把變量定義在()中的含義及其局限#include<iostream>usingnamespacestd;intmain(){DOUBLEn,fact;cout<<z/inputanum”;〃改正過后結(jié)果;cin?n;fact=l;for(inti=l;i<n+l;i++){fact=fact*i;}cout<<n<<z,!=z/<<fact<<endl;return0;答:就是將FACT的初定義為1;將CIN的輸入直接接要輸入的變量;INT的范圍在65353的范圍這內(nèi)因此當(dāng)輸入階乘為20時(shí)它的結(jié)果遠(yuǎn)遠(yuǎn)大于它的長度此時(shí)需要修改它的類型長度即將它修改為DOUBLE類型即可。。。將INT放在括號(hào)里面的作用與在外面定義的作用是不同的INT放在里面表示它只實(shí)驗(yàn)內(nèi)容引用和函數(shù)修改如下程序,使其能調(diào)用swap函數(shù)對參數(shù)進(jìn)行交換:#include<iostream>usingnamespacestd;voidswap(inta,intb){ 〃在此將此語句改為:voidswap(int&a,int&b)intt;t=a;a=b;b=t;)intmain(){inta=1,b=6;cout?"beforeswap:\n"?"ais:"?a?"bis:"?b?endl;swap(a,b);cout?"afterswap:\n"?"ais:"?a?"bis:"?b?endl;return0;}提示:使用引用改正過后的結(jié)果是:^J*E:\first\Debuc\3.exe* 日回口befoi*eswap:ais:1bis:6afterswap:aisbisPressanykeytocontinue.實(shí)驗(yàn)內(nèi)容函數(shù)的重載和默認(rèn)參數(shù)從鍵盤上輸入年齡(實(shí)數(shù))和性別(用字符M和F表示),輸出對應(yīng)信息.要求如下鍵盤輸入如:18.6F,則輸出19yearsold,female19.4M,則輸出19yearsold,male年齡采用四舍五入,如果不會(huì),可以不實(shí)現(xiàn),只取整即可編寫print函數(shù)來處理(輸出),要求函數(shù)可以用任意順序的參數(shù)調(diào)用,程序結(jié)構(gòu)如下intmain(){floatyear;charsex;輸入print(year,sex)print(sex,year)print(); 〃這里輸出0yearsold,male,即默認(rèn)是。歲,malereturn0;)程序不要改變main函數(shù)結(jié)構(gòu),編寫printf函數(shù)(思考需要編寫幾個(gè)?)提示:如何實(shí)現(xiàn)四舍五入?可以采用變量+0.5取整#include<iostream.h>#usingnamespacestd;#include<iostream>#include<string>usingnamespacestd;〃這里輸出years和sex順序不同,但方法體是相同的。voidprint(floatyear,charsex){inty=0;y=(int)year;if(sex==,m'|sex==,M')cout<<year<<"yearsold,male/z<<endl;elsecout<<year<<*yearsold,female“〈<endl;〃出參數(shù)順序不同意外,其它都是相同的。voidprint(charsex,floatyear){inty=0;y=(int)year;if(sex=='m'||sex=='M')cout<〈year<<,zyearsold,malez,?endl;elsecout?year<<"yearsold,femalez,<<endl;}〃這里輸出0yearsold,male,即默認(rèn)是。歲,malevoidprint(){cout?*0yearsold,malez,<<endl;}intmain(){floatyear;〃變量year存放年齡變量。charsex;〃變量sex存放性別變量。charinput[20];〃存放輸入字符串。charyears[20];〃存放輸入字符串中年齡字符數(shù)組。chardot[20];〃存放輸入字符數(shù)組中小數(shù)點(diǎn)以后的小數(shù)部分?jǐn)?shù)組。char*p;〃存放小數(shù)點(diǎn)后第一位數(shù)值,用于判斷是否進(jìn)行四舍五入。若大于5則總體值+1。p=dot;cout<<*pleaseinputyournameandsex(.eg.22M)*?endl;cin>>input;〃輸入字符數(shù)組?!ㄗ址?dāng)?shù)組最后一位一定是性別,首先提取出來存放在sex變量中。sex=inputEstrlen(input)-1];〃將輸入數(shù)組除最后一個(gè)字符以外的字符串傳入年齡數(shù)組。for(inti=0;i<strlen(input)-l;i++){years[i]=input[i];〃在年齡數(shù)組中獲取小數(shù)點(diǎn)最近的數(shù)值,放入P中。for(intj=0;j<strlen(years);j++){if(years[j]=='.'){*p=years[j+1];::〃判斷,若atoi(p)大于5,則年齡整體+1,若小于5,則年齡整體不變。if(atoi(p)>=5)year=(float)(atoi(years)+1);elseyear=(float)atoi(years);〃調(diào)用print函數(shù)。Pring函數(shù)要進(jìn)行重載。print(year,sex);print(sex,year);print();〃這里輸出0yearsold,male,即默認(rèn)是0print();歲,malereturn0;2.3實(shí)驗(yàn)項(xiàng)目2運(yùn)用類和對象進(jìn)行程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康恼莆疹惖亩x掌握對象的成員變量,成員函數(shù)的使用掌握對象成員訪問控制的設(shè)定實(shí)驗(yàn)內(nèi)容類基本語法練習(xí)#include<iostream>usingnamespacestd;classTime//定義Time類{public://數(shù)據(jù)成員為公用的inthour;intminute;intsec;intmain(){Timet1;//定義t1為Time類對象cin?t1.hour;〃輸入設(shè)定的時(shí)間cin?t1.minute;cin?t1.sec;cout?t1.hourk^":"?t1.minute?^^:"?t1.sec?endl;return0:)改寫程序,要求:改寫后的程序:#include"stdafx.h"#include,/iostream,/usingnamespacestd;classTimepublic:Time();voidprinttime(); 〃實(shí)現(xiàn)輸出時(shí)間函數(shù)voidsettime(int,int,int);〃實(shí)現(xiàn)時(shí)間的的格式設(shè)置private: 〃將成員函數(shù)改為私有的inthour;intminute;intsec;};Time::Time(){hour=minute=sec=0;)voidTime::settime(inth,intm,ints){hour=(h>=0&&h<24)?h:0;minute=(m>=0&&m<60)?m:0;sec=(s>=0&&s<60)?s:0;:voidTime::printtime(){cout?hour?":"<<minute<<":"?sec;}intmain(){inti;Timetl;tl.settime⑵8,8);cout<<”時(shí)???間?是?:";tl.printtime();cout?endl;cin>>i;printf("pause");return0;}〃①將數(shù)據(jù)成員改為私有的;在上面已經(jīng)實(shí)現(xiàn)了〃②將輸入和輸出的功能改為由成員函數(shù)實(shí)現(xiàn);在上面已經(jīng)實(shí)現(xiàn)了〃③在類體內(nèi)定義成員函數(shù)在上面已經(jīng)實(shí)現(xiàn)了然后編譯和運(yùn)行程序。請分析什么成員應(yīng)指定為公用的?什么成員應(yīng)指定為私有的?什么函數(shù)最好放在類中定義?什么函數(shù)最好在類外定義?外部成員就應(yīng)該定義為公有的,屬性成員應(yīng)該定義為私有的。函數(shù)聲明應(yīng)該放在類中,方便用戶調(diào)用的函數(shù)應(yīng)該放在類的外部下面程序設(shè)計(jì)了一個(gè)日期類如下,通過成員函數(shù)init來初始化,print輸出classDate{inty,m,d;voidinit(){y=year;m=month;d=day;}voidprint(){cout?y?"year"?m?"month"?d?"day"?endl;)}intmain(){Dated;d.init();d.print();return0;}程序問題1:程序有3處錯(cuò)誤,試改正提示:類定義格式,注意最后的分號(hào)在類定義完之后需要加分號(hào)init函數(shù)是否要參數(shù)需要帶參數(shù)注意成員函數(shù)的訪問屬性,公有還是私有是公有的PUBLI改正后的程序:#include"stdafx.h"#include"iostream”usingnamespacestd;classDate{public:voidinit(int,int,int);voidprint();private:intyear,month,date;);voidDate::init(inty,intm,intd){year=y;month=m;date=d;voidDate::print(){cout<<,,date:,,<<year<<,,-0,?<<month<<,,-0//<<date<<endl;intmain(){Dated;inti;d.init(1990,8,9);d.print();cin>>i;return0;④把程序分成3個(gè)部分(文件),main函數(shù)所在的文件main,cpp,類的聲明time.h,類的定義time.cpp。三個(gè)文件在同一個(gè)工程中。注意:哪些要包含頭文件。⑤〃選做:(在頭文件中使用頭文件衛(wèi)士(#ifndef……)來保護(hù)頭文件可以被多次包含程序:問題2.根據(jù)上面修改的類,繼續(xù)添加成員函數(shù),要求能進(jìn)行日期相減得到相差的天數(shù),日期可以加上一個(gè)數(shù),得到新的日期.為簡化程序,設(shè)每個(gè)月都是30天.#include<iostregun>usingnamespacestd;classDate{inty,m,d;public:voidinit(intyear,intmonth,intday){y=year;m=month;d=day;)voidprint(){cout?y?*year month"<<d<<"day*?endl;}intsubDate(Date&d){intdy;intdm;intdd;if(this->y>d.y)dy=(this->y-d.y)*360; 〃把年求出并計(jì)算出它的天數(shù)elsedy=(d.y-this->y)*360;

if(this->m>d.m)dm=(this->m-d.m)*30; 〃取出它的月份并用天數(shù)表示elsedm=(d.m-this->m)*30;if(this->d>d.d)dd=(this->d-d.d); 〃取出它的天數(shù)elsedd=(d.d-this->d)*1;returndy+dm+dd;}DateaddNum(intnum){intdy,dm,dd;dy=num/360;的年份dm=(num-(360*dy))/30;的月份dd=(num-dy*360-dm*30)/I;的天數(shù)this->y=this->y+dy;this->m=this->m+dm;this->d=this->d+dd;〃傳遞一個(gè)數(shù)并計(jì)算出它〃傳遞一個(gè)數(shù)并計(jì)算出它〃傳遞一個(gè)數(shù)并計(jì)算出它〃傳遞一個(gè)數(shù)并計(jì)算出它〃傳遞一個(gè)數(shù)并計(jì)算出它〃當(dāng)前年與它進(jìn)行相加〃當(dāng)前月與它進(jìn)行相加〃當(dāng)前日對它進(jìn)行相加);intmain(){Datedl,d2,d3;dl.init(1900,2,1);d2.init(1900,1,1);cout?*thedatetotal:*?dl.subDate(d2)?endl;〃輸出計(jì)算后的天數(shù)d3=dl.addNum(5);〃計(jì)算出它加后的年月日d3.print();return0;)提示:增加成員函數(shù)intsubDate(Dated){ 返回一個(gè)值DateaddNum(intnum){ 〃/返回在main函數(shù)中驗(yàn)證如下Dated1,d2,d3;d1.init(1900,2,1);d2.init(1900,1,1);cout?d1.subDate(d2); 〃結(jié)果為30d3=d1.add(5);d3.print(); //d1是1900,2,6思考:addNum(int 函數(shù)的返回值是否可以定義為void?即這樣使用:d1.add(5);d1.print();d1自身的日期加5,如果要這么做,addNum函數(shù)要如何修改?提示:注意區(qū)分當(dāng)前對象,如果需要返回當(dāng)前對象自己,可以使用return*this;this是指向當(dāng)前對象的指針,*this表示當(dāng)前對象改正過后的程序:#include<iostream>usingnamespacestd;classDate{inty,m,d;public:voidinit(intyear,intmonth,intday){if(month>12||day>30){cout?,,dataerror/,?endl;exit(0);}else{y=year;m=month;d=day;}}voidprint(){cout<<y<<z/year month day”〈〈endl;〃傳遞一個(gè)數(shù)并計(jì)算〃傳遞一個(gè)數(shù)并計(jì)算〃傳遞一個(gè)數(shù)并計(jì)算〃傳遞一個(gè)數(shù)并計(jì)算〃當(dāng)前年與它進(jìn)行相〃當(dāng)前月與它進(jìn)行相〃當(dāng)前日對它進(jìn)行相DateaddNum(intnum){intdy,dm,dd;dy=num/360;出它的年份dm=(num-(360*dy))/30;出它的月份dd=(num-dy*360-dm*30)/1;出它的天數(shù)this->y=this->y+dy;加this->m=this->m+dm;加this->d=this->d+dd;加return*this;intsubDate(Date&d){intdata=(this->y*12*30+(this->m-l)*30+this->d)-(d.y*12*30+(d.m-l)*30+d.d);returndata;}};intmain(){Datedl,d2,d3;dl.init(1900,25,1);d2.init(1900,1,1);cout<<,,thedatetotal:z/?dl.subDate(d2)<<endl;〃輸出計(jì)算后的天數(shù)d3=dl.addNum(5);〃計(jì)算出它加后的年月日d3.print();d3.print();return0;iJ程序:問題3.修改前面的程序,初始化一個(gè)錯(cuò)誤的日期,如Datedl;dl.init(1900,13,45);程序可以運(yùn)行么?怎么修改程序保證程序不會(huì)輸出一個(gè)錯(cuò)誤的日期voiderror(){if(y>24|y<0|m>60|m<0|d>60||d<0){cout<<"Timeerrorz/<<endl;exit(0);}提示:如果初始化出錯(cuò)了后面的就沒必要運(yùn)行下去了,可以用函數(shù)exit(0)結(jié)束程序通過這個(gè)例子程序思考對象的安全性,如何保證對象是正常的,能不能把日期的年月EJ開放給使用者等程序:問題4:(選作)使用下面公式增加求星期幾的成員函數(shù)計(jì)算星期可以用蔡勒(Zeller)公式(只適合于1582年10月15日之后的情形)w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符號(hào)含義如下:c:世紀(jì)(年的高兩位數(shù));y:年(年的低兩位數(shù));m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計(jì)算,比如2005年1月1日要看作2004年的13月1日來計(jì)算);d:日;[]代表取整,即只要整數(shù)部分可以考慮增加如下一個(gè)weekDay()函數(shù)weekDay(){〃下面的y,m,d分別代表年月日y=y%100;if(m==1){m=13;y=y-1;}elseif(m==2){m=14;y=y-1;}intweek=(26*(m+1)/10+y+y/4-2*y/100+y/400+d-1)%7;//week是一個(gè)整數(shù),1表示是星期一,2是星期二,……0則是星期天)算算今天星期幾,看看公式是否準(zhǔn)確程序:問題5.參照日期類,自己設(shè)計(jì)一個(gè)時(shí)間類,能初始化,可以輸出,進(jìn)行時(shí)間相減等操作說明:時(shí)間的表示可以自行擬定,一般是“時(shí)分秒”形式,可以增加毫秒,采用12或24小時(shí)制都可以。設(shè)計(jì)好了后大家可以互相交換“使用”一下,看看誰設(shè)計(jì)的類最好用2.3.2實(shí)驗(yàn)內(nèi)容運(yùn)算符重載問題1:以下有類Point,請?zhí)砑舆m當(dāng)成員函數(shù)以便Point對象可以進(jìn)行運(yùn)算classPoint{intx,y;public:voidinit(inta,intb){x=a;y=b;}voiddisp(){cout?x?>,"?y?endl;));intmain(){Pointa,b,c;a.init(1,2); b.init(3,4)c=a+b;c.disp();}#include<iostream>#include<math.h>usingnamespacestd;classPoint{intx,y;

〃初始化public:〃初始化voidinit(intaintb){x=a;y=b;)Pointoperator+(constPoint&a){〃實(shí)現(xiàn)兩個(gè)復(fù)數(shù)相加的運(yùn)算符重載函數(shù)的方法Points;s.x=this->x+a.x;s.y=this->y+ay;returns;}voiddisp(){cout<<"twocomplexrealizedrealaddis:"<<x<<endl;cout<<"twocomplexrealizedimageaddis:"<<y<<endl;}};intmain(){Pointa,bfc;ainit(1,2);b.init(3z4);c=a+b;〃調(diào)用運(yùn)算符重載函數(shù)c.dispO;return0;}采用2種方式重載+運(yùn)算符:成員函數(shù)和全局函數(shù)方式提不:成員函數(shù)方式Pointoperator+(constPoint&a)全局函數(shù)方式Pointoperator+(constPoint&a,constPoint&b)全局函數(shù)方式下要注意成員訪問限制,可以使用友元或其他方式思考:這兩種方式你更喜歡用哪一種?有什么優(yōu)缺點(diǎn)?#include<iostream>usingnamespacestd;classPoint{public:intx,y;//x,?y是?坐?標(biāo)括?public:voidinit(inta,intb){x=a;y=b;}voiddisp(){cout<<,zxArray:〃z/<<,zyArray:/z<<y<<endl;}Pointadd(Pointp){PointtempPoint;tempPoint.init(x+p.x,y+p.y);returntempPoint;)Pointoperator+(constPoint&a){Pointtemp;temp,x=x+a.x;temp.y=y+a.y;returntemp;}思考:后面的答案:#include<iostream.h>#includemath.h>classPoint{private:intx;inty;public:voidinit(inta,intb)〃初始化x=a;y=b;}friendPointoperator+(constPoint&a,constPoint&b){Points;s.x=a.x+b.x;s.y=a.y+byreturns;)voiddisp(){cout<<"twocomplexrealizedrealaddis:"<<x<<endl;cout<<"twocomplexrealizedimageaddis:"<<y<<endl;intmain(){Pointab,c;ainit(1,2);b.init(3f4);c=a+b;〃調(diào)用運(yùn)算符重載函數(shù)c.dispO;return0;}問題2:設(shè)計(jì)一個(gè)復(fù)數(shù)類Complex,能進(jìn)行復(fù)數(shù)的減法和輸出,在main函數(shù)中的應(yīng)用如下intmain(){Complexc1,c2,c3;intr,i;cout?Aninputfirst,randi:"cin?r?i;c1.init(r,i);cout?n\ninputsecond/andi:"cin?r?l;c2.init(r,i);c3=c2-c1;cout?c3;return0;}Changedtheforomasfollows:includeiostream.h>includemath.h>classComplex{intre;intim;public:voidinit(inta,intb)〃初始化re=a;im=b;}friendComplex operator-(Complexc1,Complexc2){Complexd;d.re=c1.re-c2.re;d.im=c1.im-c2.im;returnd;}voiddisp(){cout<<"twocomplexrealizedrealsubis:"<<re<<endl;cout<<"twocomplexrealizedimagesubis:"<<im<<endl;intmain(){Complexc1zc2zc3; 〃創(chuàng)建三個(gè)對象intrj; 〃實(shí)部虛部的值cout<<"\ninputfirst/andi:"<<endl;//cin>>r>>i;c1.init(7,7);〃當(dāng)前對象來調(diào)用cout<<"\ninputsecond/andi:"<<endl;//cin>>r;c2.init(8,9);c3=c1-c2;c3.disp();return0;提示:重載?運(yùn)算符不能使用成員函數(shù)形式2.3.3實(shí)驗(yàn)內(nèi)容構(gòu)造和析構(gòu)函數(shù)設(shè)計(jì)日期類Date,滿足如下要求生成對象可以不帶參數(shù).如Datea,默認(rèn)日期是1900-1-1可以帶亞洲日期格式參數(shù).如Datea(1990,l,l)可以帶歐洲日期格式參數(shù).如 Datea(l,1,1990) 月,日,年格式可以輸出,如cout?a;按年月日輸出說明:為簡化程序,規(guī)定字符串的月日必須用2位表示提示:歐洲亞洲舊期格式可以使用if語句判斷,比如年小于12則表示月在main函數(shù)中驗(yàn)證是否正確Datea(l990,1,1),b(3,5,l990),c;cout?a?b?c;看結(jié)果是否正確問題1:修改設(shè)計(jì)的日期類,增加“時(shí)間“成員,要求時(shí)間成員是類對象。如下:classTime{inthour;public:Time(inth){hour=h;));classDate{Timet;);提示:此問題是解決“類中包含其他對象成員”的問題,需要注意的是Date類構(gòu)造函數(shù)的寫法,Date類構(gòu)造函數(shù)應(yīng)該有4個(gè)參數(shù),如何把時(shí)間傳遞給其Time成員,必須使用構(gòu)造參數(shù)表的形式才可以。如下面形式:Date(inty, ):year(y), t(time){…}問題2:修改Time類的構(gòu)造函數(shù),使其有默認(rèn)參數(shù),則Date類構(gòu)造函數(shù)可以不用構(gòu)造參數(shù)表形式思考:構(gòu)造參數(shù)表有什么作用?什么時(shí)候需要問題3:選做:a)重載Date的<(小于)運(yùn)算符,比較日期.自己定義比較規(guī)則b)從鍵盤讀入若干個(gè)日期,放入到數(shù)組或向量vector中c)用對日期排序輸出#include<iostream>usingnamespacestd;classTime{private:inthour;public:Time(){}Time(inth){hour=h;}voidsetTime(inth){hour=h;}intgetTime(){returnhour;)};classDate{private:inty,m,d;Timet;public:Date(Timetim):t(tim){ 〃構(gòu)1造i函一數(shù)篦加6上?參?數(shù)篦列表括?)Date(intyear,intmonth,intday){y=year;m=month;d=day;)voidsetTime(inth){t.setTime(h);}voidprint(){cout<<y<<zz:zz<<m<<zz:zz<<d<<zz:〃<<t.getTime()<<endl;});intmain(){Dateb(1900,1,1);b.setTime(1);b.print();return0;提示:如果使用數(shù)組,則解決方法同c語言(自己編寫排序函數(shù));如果使用向量,則可以如下解決:向量定義vector<Date>vecDate;放入到向量用push_back(...)重載<運(yùn)算符后,不需要指定比較函數(shù),直接使用C++提供的sort排序(或者自己編寫排序函數(shù)),如sort(v.begin(),v.end());使用sort函數(shù)要帶頭文件〈algorithm〉2.3.4實(shí)驗(yàn)內(nèi)容I/O流和文件操作.編程:從鍵盤輸入若干個(gè)數(shù),以0結(jié)束,把這些數(shù)字寫入到磁盤文件data,dat中提示:注意循環(huán)條件的寫法,此處沒有指定循環(huán)次數(shù),可以用while循環(huán),并注意變量的初始值文件操作需要有頭文件fstream,注意文件的打開方式.從文件data.dat中讀出數(shù)據(jù),并把其中的素?cái)?shù)顯示在屏幕上,并統(tǒng)計(jì)輸出有多少個(gè)素?cái)?shù)。#include/zfstream.h〃#include"math.boolprime(intx);voiddatainput();voidmain(){intx;intnum;ifstreammyfile; 〃定"義?文?件t對?象6datainput();myfile.open(z/data,dat”,ios::binary);〃文?件t打洙?開anum=O;if(myfile){cout<<〃當(dāng)獺?前。的?素?數(shù)篦為a:毗,z<<endl;while(myfile.good()) //good()是?ifstream中D的?函一數(shù)篦,?判口別健是?否?到?文?件t末?尾2(myfile.read((char*)&x,sizeofx);if(prime(x)){cout<<x<<endl;num++;}}cout?/z素?數(shù)篦個(gè)?數(shù)籥為a:毗zz<<num<<endl;else(cout<</zopenerr/z<<endl;boolprime(intx)(inti,j;if(x<=l)returnfalse;j=int(sqrt(x));for(i=2;i<=j;i++){if(x%i==0)returnfalse;returntrue;voiddatainput()(intx;ofstreamofs("data.dat〃,ios::binary);x=l;cout<<〃請?輸?入?數(shù)筋據(jù)Y,?0結(jié)竦?。£z/?endl;while(x){cin>>x;ofs.write((char*)&x,sizeofx);)ofs.close();2.4實(shí)驗(yàn)項(xiàng)目3面向?qū)ο蟪绦蛟O(shè)計(jì)綜合應(yīng)用實(shí)驗(yàn)?zāi)康恼莆彰嫦驅(qū)ο蟮脑O(shè)計(jì)方法掌握面向?qū)ο笾械睦^承多態(tài)的概念掌握面向?qū)ο蟮漠惓8拍罴笆褂昧私饽0?,學(xué)會(huì)使用標(biāo)準(zhǔn)類實(shí)驗(yàn)內(nèi)容多態(tài)與虛函數(shù)基本概念.有一個(gè)汽車類Vehicle,將它作為基類派生出小車類Car、卡車為類Truck和輪船類Boat,定義message函數(shù)用來顯示各類信息。1)在基類汽車類Vehicle類中,定義一個(gè)虛函數(shù)message(),用來顯示信息;(2)在各個(gè)派生類中,重新定義message()函數(shù),以顯示各自的信息;(3)在測試函數(shù)中,定義基類指針ptr,當(dāng)它指向不同的對象時(shí),則執(zhí)行不同對象所對應(yīng)類的成員函數(shù)message()。#include<iostream.h>classVehicle〃車輛類Vehicle定義所有車輛共有的屬性是“車輪數(shù)”,“重量”{public:virtualvoidmessage(){cout?"Vehiclemessage\n";}private:intwheels;floatweigth;};〃汽車類Car定義classCar:publicVehicle{public:voidmessage(){cout?"Carmessage\n";}private:intpassengerjoad;};〃卡車類Truck定義classTruck:publicVehicle{public:voidmessage(){cout?"Truckmessage\n";}private:intpassengerjoad;floatpayload;};〃輪船類Boat定義classBoat:參考Truck補(bǔ)充完整voidmain(){Vehiclevehicle,*ptr;〃定義一個(gè)基類Vehicle對象vehicle和基類指針ptrCarcar;〃定義一個(gè)Car類對象carTrucktruck;〃定義一個(gè)Truck類對象truckBoatboat;〃定義一個(gè)Boat類對象boatptr=&vehicle;〃將指針ptr指向基類對象ptr->message();〃調(diào)用基類成員函數(shù)ptr=&car;〃將指針ptr指向Car類對象ptr->message();〃調(diào)用Car類成員函數(shù)ptr=&truck;〃將指針ptr指向Truck類對象ptr->message();〃調(diào)用Truck類成員函數(shù)ptr=&boat;〃將指針ptr指向boat類對象ptr->messag();〃調(diào)用Boat類成員函數(shù))如果把基類的message不定義為virtual,結(jié)果是一樣么?實(shí)際試一下,并說明為什么Sinclude<iostream.h>classVehicle〃車輛類Vehicle定義所有車輛共有的屬性是〃車輪數(shù)〃,〃重量〃{public:virtualvoidmessage(){cout〈〈“Vehiclemessage\n/z;}private:intwheels;floatweigth;);〃汽車類Car定義classCar:publicVehicle{public:voidmessage(){cout<<,zCarmessage\nz,;}private:intpassengerload;);〃卡車類Truck定義classTruck:publicVehicle{public:voidmessage(){cout〈〈“Truckmessage\nz,;}private:intpassenger_load;floatpayload;};///////////////////〃輪船類Boat定義classBoat:publicVehicle{//參考Truck補(bǔ)充完整private:public:voidmessage(){cout<<,zBoatmessage\nz/;}private:intsize;intweight;);voidmain()(Vehiclevehicle,*ptr;〃定義一個(gè)基類Vehicle對象vehicle和基類指針ptrCarcar;〃定義一個(gè)Car類對象carTrucktruck;〃定義一個(gè)Truck類對象truckBoatboat;〃定義一個(gè)Boat類對象boatptr=&vehicle;〃將指針ptr指向基類對象ptr->message();〃調(diào)用基類成員函數(shù)ptr=&car;〃將指針ptr指向Car類對象ptr->message();〃調(diào)用Car類成員函數(shù)ptr=fetruck;〃將指針ptr指向Truck類對象ptr->message();〃調(diào)用Truck類成員函數(shù)ptr=&boat;〃將指針ptr指向boat類對象ptr->message();〃調(diào)用Boat類成員函數(shù))2.從基類的圖形類中派生出兩個(gè)類。一個(gè)派生類是立方體類,在該類中,基類的x,y做作矩形的長和寬;另一個(gè)派生類是圓類,在該類中,新添加了成員是半徑radius,半徑的值等于x,y的坐標(biāo)到原點(diǎn)的距離。#include<iostream.h>#include<math.h>classGraph〃定義一個(gè)圖形基類{floatx,y;public:Graph(floatxx,floatyy){x=xx;y=yy;)floatarea(){return0;}};classRect:publicGraph〃由圖形類派生出立方體{floatlength,width,high;public:Rect——補(bǔ)充構(gòu)造函數(shù){……}floatarea(){returnlength*width;}};classCircle:publicGraph〃由圖形類派生出圓類{doubleradius;public:Circle——補(bǔ)充構(gòu)造函數(shù)doublearea(){return3.1416*radius*radius;}};intmain(){Graphs0(10,10);Rects1(10,10);Circles2(10,10);coutvv"原面積="vvs0.area()?endl;〃調(diào)用基類的area()coutvv"矩形面積="<<s1.area()?endl;〃調(diào)用矩形的area()coutvv”圓的面積="<<s2.area()?endl;〃調(diào)用圓類的area()coutvv"面積="vvs2.Graph::area()vvendl;〃調(diào)用基類的area()return0;)提示:派生類構(gòu)造函數(shù)因?yàn)樾枰跏蓟悓ο?,需要使用?gòu)造參數(shù)表形式問題:修改程序,把基類的area改為純虛函數(shù),并增加一個(gè)純虛函數(shù)display,用它來顯示面積。并結(jié)合本題目說明純虛函數(shù)的作用。#include<iostream.h>#include<math.h>classGraph〃定義一個(gè)圖形基類{floatx,y;public:Graph(floatxx,floatyy){X二XX;y=yy;floatarea(){return0;}floatvolvm(){return0;});classRect:publicGraph〃由圖形類派生出立方體{floatx,y,h;public://Rect 補(bǔ)充構(gòu)造函數(shù)Rect(floatxx,floatyy,floathh):Graph(xx,yy){x=xx;y=yy;h二hh;}virtualfloatarea(){returnx*y;}virtualfloatvolvm(){returnx*y*h;}};classCircle:publicGraph〃由圖形類派生出圓類{doubleradius;//doublex,y;public://Circle 補(bǔ)充構(gòu)造函數(shù)Circle(double xx,doubleyy):Graph(xx,yy){radius=sqrt(xx*xx+yy*yy);}virtualdoublearea(){return3.14*radius*radius;}virtualdoublevolvm(){return4/3*radius*radius*radius;});intmain(){GraphsO(10,10);Rectsl(2,3,5);Circles2(3,4);cout原面積=〃<<sO.area()<<endl;//調(diào)用基類的area()cout<<〃原體積=〃<<sO.volvm()<<endl;〃調(diào)用基類的volvm()cout 矩形面積=〃<<sl.area()<<endl;〃調(diào)用矩形的area()cout<<“原體積=〃<<si.volvm()<<endl;〃調(diào)用基類的volvm()cout<<”圓的面積=〃<<s2.area()<<endl;〃調(diào)用圓類的area()cout原體積=〃<<s2.volvm()<<endl;〃調(diào)用基類的volvm()cout<</z面積="<<s2.Graph::area()<<endl;〃調(diào)用基類的area()cout<〈〃原體積=〃<<s2.Graph::volvm()<<endl;〃調(diào)用基類的volvm()return0;2.4.2實(shí)驗(yàn)內(nèi)容多態(tài)的綜合應(yīng)用現(xiàn)在有一數(shù)據(jù)文件data,dat,其中存放了立方體、圓柱體、球形的若干數(shù)據(jù),如下形式:Cube256Cylinder37Sphere5Cylinder49Cube348Cube123文件數(shù)據(jù)說明:立方體cube的長寬高數(shù)據(jù),圓柱體cylinder的底面半徑、和高的數(shù)據(jù),球形sphere的半徑,可以自己增加一些數(shù)據(jù)?,F(xiàn)在要從文件中讀出數(shù)據(jù),并輸出相應(yīng)形態(tài)的體積(立方體的體積公式:長X寬X高;圓柱體體積:底面積X高;球體積:4/3*圓周率*半徑的立方)提示:考慮通用性,即數(shù)據(jù)文件可能有很多記錄,此題需要使用循環(huán)讀取數(shù)據(jù)為了能讓程序更具擴(kuò)展性,可以使用多態(tài)來解決(比如,以后如果數(shù)據(jù)文件中加入了圓錐體、正方體等的數(shù)據(jù),那么你的程序能適用嗎?)參考的程序結(jié)構(gòu)如下classVolume{體積虛函數(shù)或純虛函數(shù)};classCube:publicVolume{覆蓋虛函數(shù));classCylinder:publicVolume{覆蓋虛函數(shù)};classSpherepublicVolume{覆蓋虛函數(shù)};floatcalVol(Volume*v){計(jì)算體積)intmain(){定義數(shù)組或向量(注意類型應(yīng)該是指針或引用)打開文件讀入數(shù)據(jù)創(chuàng)建對象存放到數(shù)組或向量中遍歷數(shù)組或向量,調(diào)用calVol函數(shù)求出體積)SimpleprogramCodeasfollows:#include/zstdafx.h〃ttinclude^iostream^#include<math.h>usingnamespacestd;classVolume//體?積y虛存函一數(shù)麓或6純?虛6函~數(shù)篦protected:floatx,y,z;public:Volume(floatxx=0,floatyy=0,floatzz=0){}virtualfloatCalVolume()=0;virtualvoidDisplay()=0;};〃立i?方?體?類;t?classCube:publicVolume〃覆2蓋?虛6函一數(shù)解(private:floatlength,width,high;public:Cube(floatxx,floatyy,floatzz):Volume(xx,yy,zz)(length=xx;width=yy;high=zz;}floatCalVolume()(returnlength*width*high;}voidDisplay(){cout?z,立i?方?體?體?積y:,,<<CalVolume()<<endl;〃圓2柱體?類;t?classCylinder:publicVolume〃覆2蓋?虛。函一數(shù)篦(private:floatradius,high;public:Cylinder(floatrr,floathh)radius=rr;high=hh;floatCalVolume()(return3.1416*radius*radius*high;}voidDisplay(){cout?z,圓2柱0體?體?積y:,z<<CalVolume()<<endl;)};〃球6體?體?積yclassSphere:publicVolume〃覆2蓋?虛6函一數(shù)解{private:floatr;public:Sphere(floatrr)r=rr;floatCalVolume()return(4/3)*3.1416*r*r*r;voidDisplay()cout<<”球。體?體?積y:,z<<CalVolume()<<endl;intmain(){inta;Volume*ptr;Cubevl(10,10,10);Cylinderv2(2,4);Spherev3(3);ptr=&vl;ptr->Display();ptr=&v2;ptr->Display();ptr=&v3;ptr->Display();cin>>a;return0;}Thecomplexcodearelistedasfollows:#include"fstream.h"#include"math.h"#include"stdlib.h"#definePAI3.1415926#include"string.h"classVol(public:virtualdoublecalVol(Vbl*v)=0;);classcube:publicVol{doublelength,width,high;public:cube(double1,doublew,doubleh)(length=l;width=w;high=h;)-cube()1)doublecalVol(Vol*v););classCylinder:publicVol{doubleradius,high;public:Cylinder(doubler,doubleh)radius=r;high=h;)doublecalVbl(Vol*v););classSphere:publicVol(doubleradius;public:Sphere(doubler)(radius=r;)doublecalVol(Vol*v););doublecube::calVbl(Vol*v)(doublevol;cube*point;vol=point->length*point->width*point->high;returnvol;)doubleCylinder::calVol(Vol*v){doublevol;Cylinder*point;point=(Cylinder*)v;vol=point->radius*point->radius*PAI*point->high;returnvol;)doubleSphere::calVol(Vol*v){doublevol;Sphere*point;point=(Sphere*)v;vol=(4*point->radius*point->radius*point->radius*PAI)/3;returnvol;)structlinkllinkl*next;);structlink2{Cylinder*point;link2*next;);structlink3{Sphere*point;link3*next;);voidmain(){doublelength,width,high,radius;link1*pointl,*ptl,*head1=NULL;//Cube;link2*point2,*pt2,*head2=NULL;//Cylinder;link3*point3,*pt3,*head3=NULL;//Sphere;Cylinder*c2;Sphere*c3;charbuf[20];ifstreammfs("data.dat");if(mfs)(while(mfs.good())(mfs.getline(buf,20,'');if(strcmp(buf,"Cube")==O){mfs.getline(buf,2O,'');length=atof(buf);mfs.getline(buf,2O,'');width=atof(buf);mfs.getline(buf,20);high=atof(buf);cl=newcube(length,width,high);〃建立鏈表if(headl==NULL)head1=newlinkl;headl->point=cl;head1->next=NULL;pointl=head1;)else{pointl=head1;while(pointl)(ptl=pointl;point1=point1->next;)pointl=newlinkl;pointl->point=cl;point1->next=NULL;ptl->next=pointl;if(strcmp(buf,"Cylinder")==O)mfs.getline(buf,20,'');radius=atof(buf);mfs.getline(buf,20);high=atof(buf);c2=newCylinder(radius,high);〃建立鏈表if(head2==NULL){head2=newlink2;head2->point=c2;head2->next=NULL;point2=head2;)elsepoint2=head2;while(point2)point2=point2->next;point2=newlink2;point2->point=c2;point2->next=NULL;pt2->next=point2;if(strcmp(buf,"Sphere")==O)mfs.getline(buf,20);radius=atof(buf);c3=newSphere(radius);〃建立鏈表if(head3==NULL)head3=newlink3;head3->point=c3;head3->next=NULL;point3=head3;elsepoint3=head3;while(point3)(pt3=point3;point3=point3->next;)point3=newlink3;point3->point=c3;point3->next=NULL;pt3->next=point3;elsecout?"openerr"?endl;)inti=0;point1=head1;〃遍歷鏈表while(pointl)|i++;cl=pointl->point;cout?i?"CubeVd1="?cl->calVol(c1)?endl;point1-pointl->next;}i=0;point2-head2;〃遍歷鏈表while(point2)(i++;c2-point2->point;cout?i?"CylinderVol="?c2->calVol(c2)?endl;point2=point2->next;i=0;point3=head3;〃遍歷鏈表while(point3)(i++;c3=point3->point;cout?i?"SphereVol="?c3->calVol(c3)?endl;point3=point3->next;5實(shí)驗(yàn)項(xiàng)目4小型綜合程序設(shè)計(jì)(選做)從以下兩個(gè)題目中選擇一個(gè).編寫C++程序模擬一個(gè)流水賬記錄系統(tǒng)假設(shè)商店經(jīng)銷的各種類型的電視,記錄電視銷售情況,每天盤點(diǎn)時(shí)可以給出統(tǒng)計(jì)結(jié)果一種方案:從鍵盤輸入售出的電視型號(hào)和價(jià)格等信息,最后輸入end,把銷售信息輸出到文件保存,并輸出統(tǒng)計(jì)結(jié)果擴(kuò)展需求:假設(shè)商店經(jīng)營范圍擴(kuò)大,還經(jīng)營其他的電器,對你的程序進(jìn)行擴(kuò)展,看能不能適應(yīng)新的改變。要求盡量少的改變以前代碼。假設(shè)對數(shù)據(jù)統(tǒng)計(jì)的要求提高,如可以根據(jù)電視的價(jià)格范圍進(jìn)行統(tǒng)計(jì),電視銷售數(shù)量進(jìn)行統(tǒng)計(jì)等,再對程序進(jìn)行擴(kuò)展,看能否適應(yīng)改變2.職員管理系統(tǒng)要求:職員分為若干類:總經(jīng)理,部門經(jīng)理,普通員工,臨時(shí)工等。職員管理系統(tǒng)在這里主要解決他們的工資發(fā)放問題,每類員工的工資計(jì)算方法不一樣。職員的數(shù)據(jù)(自己設(shè)計(jì),但應(yīng)包括姓名,工號(hào),實(shí)發(fā)工資等基本信息),存放在文本文件中,格式自定.可以從鍵盤輸入職工信息,添加到磁盤的文本文件中.可以根據(jù)職工的姓名查找.可以排序輸出.可以指定刪除某個(gè)職工信息做完后可以根據(jù)你所知道的公司實(shí)際情況想一想程序是否可行,以后如果要修改應(yīng)如何著手?如果要做一個(gè)“稍微實(shí)際”一點(diǎn)的職員管理系統(tǒng),還需要考慮什么?附錄:編輯器vi的使用:注意命令都需要在命令模式下輸入移動(dòng)光標(biāo)類命令h:光標(biāo)左移一個(gè)字符1:光標(biāo)右移一個(gè)字符space:光標(biāo)右移一個(gè)字符Backspace:光標(biāo)左移一個(gè)字符k或Ctrl+p:光標(biāo)上移一行j或Ctrl+n:光標(biāo)下移一行Enter:光標(biāo)下移一行w或W:光標(biāo)右移一個(gè)字至字首b或B:光標(biāo)左移一個(gè)字至字首e或E:光標(biāo)右移一個(gè)字j至字尾):光標(biāo)移至句尾(:光標(biāo)移至句首):光標(biāo)移至段落開頭(:光標(biāo)移至段落結(jié)尾gg:到文件開頭nG:光標(biāo)移至第n行首G:gg:到文件開頭n+:光標(biāo)下移n行n-:光標(biāo)上移n行n$:光標(biāo)移至第n行尾H:光標(biāo)移至屏幕頂行M:光標(biāo)移至屏幕中間行L:光標(biāo)移至屏幕最后行0:(注意是數(shù)字零)光標(biāo)移至當(dāng)前行首$:光標(biāo)移至當(dāng)前行尾屏幕翻滾類命令Ctrl+u:向文件首翻半屏Ctrl+d:向文件尾翻半屏Ctrl+f:向文件尾翻一屏Ctrl+b;向文件首翻一屏插入文本類命令i:在光標(biāo)前I:在當(dāng)前行首a:光標(biāo)后A:在當(dāng)前行尾o:在當(dāng)前行之下新開一行0:在當(dāng)前行之上新開一行r:替換當(dāng)前字符R:替換當(dāng)前字符及其后的字符,直至按ESC鍵S:從當(dāng)前光標(biāo)位置處開始,以輸入的文本替代指定數(shù)目的字符S:刪除指定數(shù)目的行,并以所輸入文本代替之new或nCW:修改指定數(shù)目的字n:表示一個(gè)數(shù)字nCC:修改指定數(shù)目的行刪除命令(以下命令的n表示數(shù)字)ndw或ndW:刪除光標(biāo)處開始及其后的n-1個(gè)字do:刪至行首d$:刪至行尾ndd:刪除當(dāng)前行及其后n-1行dd:刪除當(dāng)前行x或X:刪除一個(gè)字符,x刪除光標(biāo)后的,而X刪除光標(biāo)前的Ctrl+u:刪除輸入方式下所輸入的文本u:撤銷操作搜索及替換命令(pattem指要搜索的字符串):/pattern:從光標(biāo)開始處向文件尾搜索pattern?pattern:從光標(biāo)開始處向文件首搜索patternn:在同一方向重復(fù)上一次搜索命令N:在反方向上重復(fù)上一次搜索命令:s/pl/p2/g:將當(dāng)前行中所有pl均用p2替代:nl,n2s/pl/p2/g:將第nl至n2行中所有pl均用p2替代:g/pl/s〃p2/g:將文件中所有pl均用p2替換最后行方式命令(指命令行顯示在vi的最下面,以下的nl、n2、n3表示數(shù)字):nl,n2con3:將nl行到n2行之間的內(nèi)容拷貝到第n3行下:nl,n2mn3:將nl行到n2行之間的內(nèi)容移至到第n3行下:nl,n2d:將nl行到n2行之間的內(nèi)容刪除:w:保存當(dāng)前文件:efilename:打開文件filename進(jìn)行編輯:x:保存當(dāng)前文件并退出:q:退出vi:q!:不保存文件并退出vi:!command:執(zhí)行shell命令command:nl,n2w!command:將文件中nl行至n2行的內(nèi)容作為command的輸入并執(zhí)行之,若不指定nl,n2,則表示將整個(gè)文件內(nèi)容作為command的輸入:r[command:將命令command的輸出結(jié)果放到當(dāng)前行。復(fù)制粘貼命令:拷貝另外一個(gè)文件到當(dāng)前文件::r文件名在純文本終端下:選定文本塊,使用v(按v后,進(jìn)入到可視模式,即可以使用光標(biāo)鍵選擇文本:命令模式輸入“v”(小寫)來按字符選定,輸入“V”(大寫)來按行選定,或輸入“Ctrl-V”來按方塊選定)復(fù)制選定塊到緩沖區(qū),使用y復(fù)制整行,用yy在同一編輯窗打開第二個(gè)文件,用:sp[filename]在多個(gè)編輯文件之間切換,用CTRL+ww剪切塊,用d剪切整行用dd粘貼緩沖區(qū)中的內(nèi)容,用P命令前面加數(shù)字表示重復(fù)次數(shù),加字母表示使用的緩沖區(qū)名稱。獲取幫助,用:help[內(nèi)容或命令]設(shè)置vim語法高亮顯示和自動(dòng)縮進(jìn)vi在編輯c文件時(shí),可以通過設(shè)置vim的配置文件來進(jìn)行語法高亮和縮進(jìn),這樣看的更清楚,vi還有很多插件,可以方便C++的編譯運(yùn)行,如自動(dòng)補(bǔ)全等,需要的可在vim網(wǎng)站下載1、配置文件的位置在目錄/etc/下面,有個(gè)名為vimrc的文件,這是系統(tǒng)中公共的vim配置文件,對所有用戶都有效。而在每個(gè)用戶的主目錄下,都可以自己建立私有的配置文件,命名為:".vimrc”(Linux下以.開頭的文件表示是隱藏文件,需要使用Is-a可以看見)。例如,/root目錄下,通常已經(jīng)存在一個(gè).vimrc文件,用戶xiaoli的配置文件在/home/xiaoli下,沒有可以自己建。2、設(shè)置語法高亮顯示1)打開vimrc(當(dāng)然可以用vi),添加以下語句來使得語法高亮顯示:syntaxon2)如果此時(shí)語法還是沒有高亮顯示,那么在/etc目錄下的profile文件中添加以下語句:exportTERM=xterm-color3、設(shè)置Windows風(fēng)格的C/C++自動(dòng)縮進(jìn)(添加以下set語句到vimrc中)1)設(shè)置(軟)制表符寬度為4:settabstop=4setsofttabstop=42)設(shè)置縮進(jìn)的空格數(shù)為4setshiftwidth=43)設(shè)置自動(dòng)縮進(jìn):即每行的縮進(jìn)值與上一行相等;使用noautoindent取消設(shè)置:setautoindent4)設(shè)置使用C/C++語言的自動(dòng)縮進(jìn)方式:setcindent5)如果想在左側(cè)顯示文本的行號(hào),可以用以下語句:setnu使用g++編譯C++程序多個(gè)源文件生成可執(zhí)行程序如果多于一個(gè)的源碼文件在g++命令中指定,它們都將被編譯并被鏈接成一個(gè)單一的可執(zhí)行文件。下面是一個(gè)名為speak.h的頭文件;它包含一個(gè)僅含有一個(gè)函數(shù)的類的定義:/*speak.h*/#include<iostream>classSpeak(public:voidsayHello(constchar*);下面列出的是文件speak.cpp的內(nèi)容:包含sayHello()函數(shù)的函數(shù)體:/*speak.cpp*/#include"speak.h"voidSpeak::sayHello(constchar*str)(std::cout?"Hello"?str?"\n";I文件hellospeak.cpp內(nèi)是一個(gè)使用Speak類的程序:/*hellospeak.cpp*/#include"speak.h"intmain(intargc,char*argv[])Speakspeak;speak.sayHello("world");return(O);)下面這條命令將上述兩個(gè)源碼文件編譯鏈接成一個(gè)單一的可執(zhí)行程序:$g++hellospeak.cppspeak.cpp-ohellospeak這里說一下為什么在命令中沒有提到“speak.h”該文件(原因是:在“speak.cpp”中包含有"#include"speak.h"”這句代碼,它的意思是搜索系統(tǒng)頭文件目錄之前將先在當(dāng)前目錄中搜索文件“speak.h"。而,,speak.h"正在該目錄中,不用再在命令中指定了)源文件生成對象文件選項(xiàng)-c用來告訴編譯器編譯源代碼但不要執(zhí)行鏈接,輸出結(jié)果為對象文件。文件默認(rèn)名與源碼文件名相同,只是將其后綴變?yōu)?。。例如,下面的命令將編譯源碼文件hellospeak.cpp并生成對象文件hellospeak.o:$g++-chellospeak.cpp命令g++也能識(shí)別.o文件并將其作為輸入文件傳遞給鏈接器。下列命令將編譯源碼文件為對象文件并將其鏈接成單一的可執(zhí)行程序:$g++-chellospeak.cpp$g++-cspeak.cpp$g++hellospeak.ospeak.o-ohellospeak選項(xiàng)-o不僅僅能用來命名可執(zhí)行文件。它也用來命名編譯器輸出的其他文件。例如:除了中間的對象文件有不同的名字外,下列命令生將生成和上面完全相同的可執(zhí)行文件:$g++-chellospeak.cpp-ohspkl.o$g++-cspeak.cpp-ohspk2.o$g++hspkl.ohspk2.o-ohellospeak使用gdb調(diào)試程序以下內(nèi)容部分轉(zhuǎn)自http://blog./haoel/archive/2003/07/02/2879.aspxGDB是GNU開源組織發(fā)布的一個(gè)強(qiáng)大的UNIX下的程序調(diào)試工具?;蛟S,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調(diào)試,但如果你是在UNIX平臺(tái)下做軟件,你會(huì)發(fā)現(xiàn)GDB這個(gè)調(diào)試工具有比VC.BCB的圖形化調(diào)試器更強(qiáng)大的功能。所謂“寸有所長,尺有所短”就是這個(gè)道理。一般來說,GDB主要幫忙你完成下面四個(gè)方面的功能:.啟動(dòng)你的程序,可以按照你的自定義的要求隨心所欲的運(yùn)行程序。.可讓被調(diào)試的程序在你所指定的調(diào)置的斷點(diǎn)處停住。(斷點(diǎn)可以是條件表達(dá)式).當(dāng)程序被停住時(shí),可以檢查此時(shí)你的程序中所發(fā)生的事

.動(dòng)態(tài)的改變你程序的執(zhí)行環(huán)境。從上面看來,GDB和一般的調(diào)試工具沒有什么兩樣,基本上也是完成這些功能,不過在細(xì)節(jié)上,你會(huì)發(fā)現(xiàn)GDB這個(gè)調(diào)試工具的強(qiáng)大,大家可能比較習(xí)慣了圖形化的調(diào)試工具,但有時(shí)候,命令行的調(diào)試工具卻有著圖形化工具所不能完成的功能。一個(gè)調(diào)試示例IOeB§io.h>intfunc(intn)tintsum=0,i:.,ior(i=1;i<=h;i++){sum+=i;returnsum;使用GDB使用GDB調(diào)試:編譯生成執(zhí)行文件:注意:要帶-g參數(shù)一Wall表示顯示注意:要帶-g參數(shù)一Wall表示顯示所有警告信息啟動(dòng)GDBSoftwareFoundation,Inc.

version3orlaterarefreetochangeandredistributeit.totheextentpermittedbylaw.Typew.con血品匿機(jī)%86-linux-gnu”…ireadldbObrary yov/liDthreagjdb.sp.._/一至一 ——二.一J命令箱當(dāng)于list,從第一仃開始列出源碼。#include<stdio.h>intfunc(intn)intsum==0,i;..for(i=1;i<=n;i++)1 sum+=i;igdb)}etumsu里;土一工z?、八人人 苴接回車表不,重復(fù)上一次命令realomtrealintmain()nti;lt.蝴第圖OS;i++)80483b2:filetst.c,I量斷點(diǎn),在源程序第16行處。斷點(diǎn),在函數(shù)func()入口oint2at0x804837a:filetst.c,nobreakDispEnbZV1—w1oinomMe

溫馨提示

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

評(píng)論

0/150

提交評(píng)論