版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章從結(jié)構(gòu)到類的演變C++中的結(jié)構(gòu)與C中的結(jié)構(gòu)已經(jīng)發(fā)生了質(zhì)的變化。本章通過(guò)實(shí)例,簡(jiǎn)要說(shuō)明結(jié)構(gòu)如何向類變化,從而引入對(duì)象和類的知識(shí)。然后介紹c++標(biāo)準(zhǔn)程序庫(kù)提供的兩個(gè)典型的類。通過(guò)使用這兩個(gè)類,進(jìn)一步熟悉類和對(duì)象,為學(xué)習(xí)面向?qū)ο缶幊檀蛳禄A(chǔ)。12.1結(jié)構(gòu)的演化2.1.1結(jié)構(gòu)發(fā)生質(zhì)的改變1、定義:由相互關(guān)聯(lián)的相同或者不同數(shù)據(jù)類型的數(shù)據(jù)組成的有機(jī)整體。是一種構(gòu)造數(shù)據(jù)類型。2、定義格式struct
[結(jié)構(gòu)體名]{
類型標(biāo)識(shí)符成員名1;類型標(biāo)識(shí)符成員名2;…………….};例:structstudent{charname[20];intage;charsex;};一、c中的結(jié)構(gòu)23、結(jié)構(gòu)體變量的定義結(jié)構(gòu)名稱變量名稱例如:structstudent{
charname[20];intage;charsex;};studentstu1,stu2;只有在定義了結(jié)構(gòu)體變量后系統(tǒng)才為其分配內(nèi)存。定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體變量34、結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量不能整體引用,只能引用變量成員形式:結(jié)構(gòu)體變量名.成員名
例如:structstudent{
charname[20];intage;charsex;};studentstu1,stu2;stu1.age=25;stu1.sex=‘F’;正確的成員使用4#include<iostream>usingnamespacestd;voidmain(){structstudent{charname[20];intage;charsex;};studenta;strcpy(,"zhang");a.age=12;a.sex='m';cout<<<<","<<a.age<<","<<a.sex<<endl;}strcpy():字符串復(fù)制函數(shù)。字符串的賦值不能使用“=”,只能使用函數(shù)來(lái)完成。5C++允許結(jié)構(gòu)中可以定義函數(shù),這些函數(shù)成為成員函數(shù)。如果將原來(lái)的結(jié)構(gòu)成員稱為數(shù)據(jù)成員的話,結(jié)構(gòu)的定義形式為:struct結(jié)構(gòu)名{數(shù)據(jù)成員成員函數(shù)};二、函數(shù)與數(shù)據(jù)共存(理解)定義結(jié)構(gòu)體對(duì)象后,結(jié)構(gòu)體對(duì)象自動(dòng)具有結(jié)構(gòu)體的數(shù)據(jù)成員和成員函數(shù)。可以通過(guò)以下形式來(lái)使用:
對(duì)象名.成員函數(shù)()對(duì)象名.數(shù)據(jù)成員
6structstudent{charname[20];intage;charsex;
voideat(){ cout<<"吃飯了"<<endl; cout<<"喝湯了"<<endl; cout<<"吃飽了"<<endl;}};structstudent{charname[20];intage;charsex;};//結(jié)構(gòu)中只有數(shù)據(jù)//成員函數(shù)//數(shù)據(jù)成員函數(shù)與數(shù)據(jù)共存7voidmain(){ students1; cout<<"name:";cin>>; cout<<"age:";cin>>s1.age; cout<<"sex:";cin>>s1.sex; cout<<<<""<<s1.age<<endl; s1.eat();}structstudent{charname[20];intage;charsex;
voideat(){ cout<<"吃飯了"<<endl; cout<<"喝湯了"<<endl; cout<<"吃飽了"<<endl;}};8structPoint{doublex,y;voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};//數(shù)據(jù)成員//成員函數(shù)函數(shù)與數(shù)據(jù)共存9#include<iostream>//lt2_1.cppusingnamespacestd;structPoint{ doublex,y; voidSetxy(doublea,doubleb) {x=a;y=b;} voidDisplay() {cout<<x<<"\t"<<y<<endl;}};voidmain(){ Pointa; a.Setxy(10.2,5.3); a.Display();cout<<a.x<<"\t"<<a.y<<endl; a.x=20.5; a.y=15.6;a.Display(); cout<<a.x<<"\t"<<a.y<<endl; }//定義結(jié)構(gòu)對(duì)象a//使用成員函數(shù),給數(shù)據(jù)成員賦值//直接使用數(shù)據(jù)成員//使用成員函數(shù),顯示數(shù)據(jù)成員的值//直接使用數(shù)據(jù)成員,并給其賦值10.2 5.310.2 5.320.5 15.620.5 15.6//數(shù)據(jù)成員10#include<iostream>//lt2_1.cppusingnamespacestd;structPoint{ doublex,y; voidSetxy(doublea,doubleb) {x=a;y=b;} voidDisplay() {cout<<x<<"\t"<<y<<endl;}};voidmain(){ Pointa; a.Setxy(10.2,5.3); a.Display();cout<<a.x<<"\t"<<a.y<<endl; a.x=20.5; a.y=15.6;a.Display(); cout<<a.x<<"\t"<<a.y<<endl; }由此例看出,可以通過(guò)結(jié)構(gòu)的成員函數(shù)使用數(shù)據(jù)成員,a.Setxya.Displaya.xa.y也可以直接使用數(shù)據(jù)成員。這稱作結(jié)構(gòu)Point的公有(publie)性質(zhì)11三、封裝性若定義結(jié)構(gòu)體時(shí),使用了private關(guān)鍵字,則產(chǎn)生封裝性。structPoint{doublex,y;voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};public:在結(jié)構(gòu)體中,成員默認(rèn)為public性質(zhì)。private:public:12#include<iostream>usingnamespacestd;structPoint{private:doublex,y;
public:voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};voidmain(){Pointa;a.Setxy(10.2,5.3);a.Display();cout<<a.x<<"\t"<<a.y<<endl;a.x=20.5;a.y=15.6;cout<<a.x<<"\t"<<a.y<<endl;a.Display();}voidmain(){Pointa;a.Setxy(10.2,5.3);a.Display();cout<<a.x<<"\t"<<a.y<<endl;a.x=20.5;a.y=15.6;cout<<a.x<<"\t"<<a.y<<endl;a.Display();}//使用公有的成員函數(shù)error:'x':cannotaccessprivatememberdeclaredinclass'Point'試圖使用私有的數(shù)據(jù)成員私有的數(shù)據(jù)成員必須通過(guò)公有的成員函數(shù)才能使用,這就稱為數(shù)據(jù)的封裝性。這就變成了具有類的性質(zhì)的結(jié)構(gòu)使用了private關(guān)鍵字,則產(chǎn)生封裝性13#include<iostream>usingnamespacestd;structPoint{private:doublex,y;
public:voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};
voidmain(){Pointa;a.Setxy(10.2,5.3);a.Display();}10.2 5.314由上可知:在定義結(jié)構(gòu)時(shí),若使用了private則產(chǎn)生封裝性,表示成員為私有的,只能在結(jié)構(gòu)體內(nèi)部通過(guò)公有成員函數(shù)使用。若未添加private則表示默認(rèn)為public。即:私有成員不可通過(guò)
對(duì)象名.數(shù)據(jù)成員對(duì)象名.成員函數(shù)()形式來(lái)使用也就是說(shuō)封裝之后不可通過(guò)對(duì)象名使用private成員15四、從結(jié)構(gòu)演變一個(gè)簡(jiǎn)單的類使用關(guān)鍵字class代替struct,就是一個(gè)標(biāo)準(zhǔn)的類。structPoint{private:doublex,y;public:voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};結(jié)構(gòu)class類使用類產(chǎn)生對(duì)象的方式和結(jié)構(gòu)一樣。(如:)16#include<iostream>usingnamespacestd;classPoint{private:doublex,y;
public:voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};
voidmain(){Pointa;a.Setxy(10.2,5.3);a.Display();}10.2 5.317課程回顧1、在結(jié)構(gòu)中,沒(méi)有使用private定義的成員,默認(rèn)為
。public2、私有的數(shù)據(jù)成員,必須通過(guò)公有的成員函數(shù)才能使用,這稱為數(shù)據(jù)的
性。封裝3、與結(jié)構(gòu)不同的是,類使用
關(guān)鍵字來(lái)定義,其成員默認(rèn)的性質(zhì)是
。privateclass18類圖的表示類名屬性/成員變量操作(功能)/成員函數(shù)PointXySetxyDisplay19五、使用構(gòu)造函數(shù)初始化對(duì)象因?yàn)轭惥哂蟹庋b性,所以不能使用“對(duì)象名.數(shù)據(jù)成員”的方式對(duì)數(shù)據(jù)成員進(jìn)行初始化。所以為類Point設(shè)計(jì)兩個(gè)專門用于初始化的函數(shù)。其原型如下:因?yàn)轭愂且环N數(shù)據(jù)類型,在聲明一個(gè)類時(shí)系統(tǒng)并不會(huì)為其分配內(nèi)存空間,所以在定義類中的數(shù)據(jù)成員時(shí),不能對(duì)其進(jìn)行初始化。classPoint{private:doublex=10.5,y=5.6;public:voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};錯(cuò)誤Point();Point(double,double);若定義的函數(shù)與某個(gè)已定義函數(shù)重名而參數(shù)類型或個(gè)數(shù)不同,則稱為
。函數(shù)重載在定義類時(shí),與類同名的函數(shù)稱為構(gòu)造函數(shù)。其作用是專門用于初始化對(duì)象。20classPoint{private:doublex,y;public:
Point(){};
Point(doublea,doubleb){x=a;y=b;}voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};voidmain(){Pointa;a.Setxy(10.2,8.9);a.Display();}#include<iostream>usingnamespacestd;//定義對(duì)象a//設(shè)置a的數(shù)據(jù)成員//顯示a的數(shù)據(jù)成員Pointa(10.2,8.9);a.Display();當(dāng)對(duì)象在內(nèi)存中產(chǎn)生時(shí)會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)212.3面向過(guò)程和面向?qū)ο蠛?jiǎn)單了解對(duì)象的含義221、面向過(guò)程的求解步驟:例題:給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長(zhǎng),并輸出。(1)輸入三個(gè)頂點(diǎn)坐標(biāo)A(x1,y1),B(x2,y2),C(x3,y3)(2)計(jì)算(x1,y1)和(x2,y2)距離AB(3)計(jì)算(x1,y1)和(x3,y3)距離AC(4)計(jì)算(x2,y2)和(x3,y3)距離BC(5)輸出三個(gè)距離AB、AC、BC23題解:lt2_6.cpp#include<iostream>#include<cmath>usingnamespacestd;voidmain(){
}24voidmain(){doublex1,y1,x2,y2,x3,y3;doubleAB,AC,BC;cout<<"請(qǐng)輸入A點(diǎn)的坐標(biāo)(x1,y1)";cin>>x1>>y1;cout<<"請(qǐng)輸入B點(diǎn)的坐標(biāo)(x2,y2)";cin>>x2>>y2;cout<<"請(qǐng)輸入C點(diǎn)的坐標(biāo)(x3,y3)";cin>>x3>>y3;AB=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));AC=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));BC=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));cout<<"AB的距離:"<<AB<<endl;cout<<"AC的距離:"<<AC<<endl;cout<<"BC的距離:"<<BC<<endl;}//聲明變量252、面向?qū)ο蟮那蠼獠襟E(給出三角形三個(gè)頂點(diǎn)坐標(biāo),計(jì)算三邊長(zhǎng),并輸出)設(shè)計(jì)類:將點(diǎn)設(shè)計(jì)為一個(gè)類Point,并提供相關(guān)的屬性和操作一個(gè)點(diǎn)對(duì)象:※應(yīng)能存放x,y坐標(biāo);※能在定義時(shí)給出x,y值。※能設(shè)置點(diǎn)的x,y值;※能知道對(duì)象中存放的x,y坐標(biāo)值※能計(jì)算點(diǎn)間距離,Pointx:doubley:doublePoint()Setxy(double,double)Getx()Gety()Getlength()26Pointx:doubley:doublePoint()Setxy(double,double)Getx()Gety()Getlength()classPoint{private:doublex,y;public:Point(){};Point(doublea,doubleb){……}
voidSetxy(doublea,doubleb){……}doubleGetx(){……}doubleGety(){……}doubleGetlength(Pointb){……}};27#include<iostream>#include<cmath>usingnamespacestd;classPoint{……};voidmain(){doubleAB,AC,BC;
Pointa(2.5,3.6),b(4.5,3.6),c(3.5,5.6); AB=a.Getlength(b); AC=a.Getlength(c); BC=b.Getlength(c); cout<<"AB的距離:"<<AB<<endl; cout<<"AC的距離:"<<AC<<endl; cout<<"BC的距離:"<<BC<<endl;}定義對(duì)象同時(shí)給出坐標(biāo)(構(gòu)造函數(shù)初始化方式)計(jì)算距離282.4C++面向?qū)ο蟪绦蛟O(shè)計(jì)特點(diǎn)操作:是對(duì)象動(dòng)態(tài)特征的一個(gè)函數(shù)序列,用函數(shù)來(lái)實(shí)現(xiàn),也稱方法或服務(wù)。稱為成員函數(shù)。和傳統(tǒng)的程序設(shè)計(jì)方法相比,面向?qū)ο蟮某绦蛟O(shè)計(jì)具有抽象、封裝、集成和多態(tài)性等關(guān)鍵要素。一、對(duì)象C++中對(duì)象是描述客觀事物的一個(gè)實(shí)體,是構(gòu)成系統(tǒng)的基本單位??梢允褂脤?duì)象名、屬性和操作三要素來(lái)描述一個(gè)對(duì)象。對(duì)象名:用來(lái)標(biāo)識(shí)一個(gè)具體對(duì)象,屬性:就是描述對(duì)象靜態(tài)特征的一個(gè)數(shù)據(jù)項(xiàng),用數(shù)據(jù)來(lái)表示,稱為數(shù)據(jù)成員。29操作1操作2……操作n屬性1屬性2……屬性n對(duì)象名對(duì)象的結(jié)構(gòu)圖30二、抽象和類如果把程序看作是由一組抽象的對(duì)象組成的,然后將一組對(duì)象的共同特征抽象出來(lái),就形成了“類”的概念。類由類名、一組屬性和一組操作3部分構(gòu)成類的屬性:是性質(zhì)的說(shuō)明。對(duì)象才具有具體的數(shù)據(jù),具體的屬性類的操作:是行為的定義31類是具有相同屬性和操作的一組對(duì)象的集合,它為屬于該類的全部對(duì)象提供統(tǒng)一描述,內(nèi)部主要包括:屬性和操作兩部分?!惻c對(duì)象的關(guān)系:對(duì)象是由一些屬性和操作構(gòu)成的。對(duì)象屬性和操作描述對(duì)象內(nèi)部細(xì)節(jié)。類的作用是定義對(duì)象。
c++中將對(duì)象稱做類的實(shí)例怎樣理解“一個(gè)類的所有對(duì)象具有相同的屬性”?是指屬性的個(gè)數(shù)、名稱、數(shù)據(jù)類型相同,各個(gè)對(duì)象的屬性值則可以互不相同,并且隨著程序的執(zhí)行而變化。32一個(gè)對(duì)象的屬性和操作是緊密結(jié)合的,對(duì)象的屬性只能由這個(gè)對(duì)象的操作來(lái)存取,對(duì)象的操作分為內(nèi)部操作和外部操作,內(nèi)部操作只提供對(duì)象內(nèi)部其他操作使用,不對(duì)外提供。外部操作提供一個(gè)消息接口,通過(guò)這個(gè)接口接收對(duì)象外部的消息并為之提供操作(服務(wù))。三、封裝33對(duì)象內(nèi)部數(shù)據(jù)的不可訪問(wèn)性稱為數(shù)據(jù)隱藏,封裝給數(shù)據(jù)提供了與外界聯(lián)系的接口,無(wú)論是誰(shuí),只有通過(guò)這些接口,使用規(guī)范的格式,才能訪問(wèn)內(nèi)部數(shù)據(jù)。封裝就是把對(duì)象的屬性和操作結(jié)合成一個(gè)獨(dú)立的系統(tǒng)單位,并盡可能隱藏對(duì)象的內(nèi)部細(xì)節(jié)。封裝在類中是通過(guò)存取權(quán)限(如私有的:private、公有的:public)實(shí)現(xiàn)的。34繼承是一個(gè)類獲得另一個(gè)類的特性的機(jī)制。繼承支持層次概念四、繼承(第6章)35不同對(duì)象可以調(diào)用同名函數(shù),但可導(dǎo)致完全不同的行為的現(xiàn)象稱為多態(tài)性。例如除法運(yùn)算/3/23.0/2五、多態(tài)性(第8章)362.5使用類和對(duì)象2.5.1使用string對(duì)象類名類的屬性用于存放字符串類的操作/方法/成員函數(shù)C++標(biāo)準(zhǔn)程序庫(kù)提供了string類和complex類。本節(jié)通過(guò)這兩個(gè)類了解類和對(duì)象的使用。37該類是C++語(yǔ)言中的內(nèi)部預(yù)定義類,要在程序中使用該類時(shí)必須添加頭文件#include<string>38一、string對(duì)象的定義格式:string對(duì)象名如:stringstr1,str2;二、string對(duì)象的初始化string對(duì)象隸屬于string類,所以必須用雙引號(hào)括起來(lái)的字符串進(jìn)行初始化。391、定義的同時(shí)初始化格式:string對(duì)象名(初始值)string對(duì)象名=初始值如:stringstr1(“hello,”);stringstr2=“world”stringstr3=‘world’;stringstr4=‘a(chǎn)’;正確錯(cuò)誤正確初始化的string對(duì)象,可以以數(shù)組的形式使用對(duì)象中的字符串。str1[0]的值是?str2[0]的值是?‘h’‘w’40string對(duì)象使用類似字符數(shù)組&s1[0]表示??&s1[0]+5表示??但s1對(duì)象名不表示地址,數(shù)組名表示地址412、從鍵盤接收字符串給string類對(duì)象賦值。格式:getline(cin,對(duì)象名,結(jié)束字符)第三個(gè)參數(shù)是字符串的結(jié)束符,也就是當(dāng)getline遇到這個(gè)結(jié)束符時(shí),就不在接受輸入了。系統(tǒng)默認(rèn)為回車符’\n’。如:stringstr;getline(cin,str,’\n’);cout<<str<<endl;如果輸入:輸出:(1)使用getline從流cin中讀出字符串給string類的對(duì)象。遇指定字符結(jié)束。422、從鍵盤接受字符串給string類對(duì)象賦值。(2)使用cin讀入一個(gè)字符串給string類對(duì)象賦值,遇空格、回車、tab鍵結(jié)束。格式:cin>>對(duì)象名如:stringstr;getline(cin,str,’\n’);cout<<str<<endl;如:stringstr;cin>>str;cout<<str<<endl;43三、string類常用的幾個(gè)方法(成員函數(shù))1、size():求對(duì)象的長(zhǎng)度。格式:對(duì)象名.成員函數(shù)名例:stringstr=“aboy”;cout<<str.size()<<endl;則輸出結(jié)果為:544例題:請(qǐng)分析一下程序結(jié)果(lt2_7.cpp)#include<iostream>#include<string>usingnamespacestd;voidmain(){stringstr="aboy";intn=0,i=0;while(str[i]!='\0'){ n++; i++;}cout<<"n:"<<n<<endl;cout<<"size:"<<str.size()<<endl;}求字符串長(zhǎng)度。同size函數(shù)452、substr():求字符串的字串格式:substr(intstart,intlength)功能:從start位置開(kāi)始,截取length個(gè)長(zhǎng)度的字符串。注:(1)c++規(guī)定字符串的計(jì)數(shù)從0開(kāi)始。例如:stringstr=“wishyouhappy!”;stringnewstr=str.substr(5,3);cout<<newstr<<endl;程序輸出:注:(2)截取的起始位置必須位于字符串中,否則出錯(cuò)。注:(3)如果截取的長(zhǎng)度大于字符串長(zhǎng)度,則自動(dòng)截取到末尾。463、find():字符串檢索格式:find(要查找的字符串,開(kāi)始查找的位置)功能:從指定位置開(kāi)始查找所需的字符串,如果找到了,則返回字符串在主串中的位置,如果沒(méi)有沒(méi)到則返回-1。如果沒(méi)有指定開(kāi)始查找的位置,則系統(tǒng)默認(rèn)為0。例如:strings=“howareyou?“intn=s.find(“are”,0);則n的值為:4“how”“me”0-147例題:以下程序是輸入一個(gè)美國(guó)格式的日期(月日,年),(用字符串來(lái)接受日期)。然后轉(zhuǎn)換成”XX年XX月XX”日的形式輸出。例如:輸入313,2011則輸出2011年3月31日。48#include<iostream>usingnamespacestd;voidmain(){}#include<string>data,day,month,year;stringcout<<"Enterthedate(e.g.331,2011):";getline(cin,data,'\n');inti=data.find("");data.substr(0,i);month=data.find(",");intk=day=data.substr(,);stringdata.substr(,);cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl;i+1k-i-1year=k+14494、+:將前后兩個(gè)字符串連接strings1="you",s2="happy";cout<<s1+""+s2<<endl;注:字符串也可與單個(gè)字符常量相加。如上例中:cout<<s1+’’+s2<<endl;50#include<iostream>usingnamespacestd;voidmain(){}#include<string>data,day,month,year;stringcout<<"Enterthedate(e.g.331,2011):";getline(cin,data,'\n');inti=data.find("");data.substr(0,i);month=data.find(",");intk=day=data.substr(,);stringdata.substr(,);cout<<newdate<<endl;i+1k-i-1year=k+14如何將新格式的日期存入newdate對(duì)象中stringnewdate=year+"年"+month+"月"+day+"日";51四、string對(duì)象數(shù)組與泛型算法此前在數(shù)組中介紹的泛型算法同樣適合于string類。1、swap():交換兩個(gè)string對(duì)象的屬性。格式:對(duì)象1.swap(對(duì)象2)例如:strings1=“me”,s2=“you”;cout<<s1<<“,”<<s2<<endl;s1.swap(s2);cout<<s1<<“,”<<s2<<endl;s2.swap(s1);另外string類還有幾個(gè)成員函數(shù)。#include<iostream>#include<string>#include<algorithm>usingnamespacestd;voidmain(){ strings="china"; cout<<s<<endl; reverse(&s[0],&s[0]+5); cout<<s<<endl;}size(s);522、begin():指示第一個(gè)元素位置end():指示最后一個(gè)元素之后的位置當(dāng)使用泛型算法時(shí),如果begin不等于end,算法首先作用于begin所指元素,并將begin前進(jìn)一個(gè)位置,然后作用于當(dāng)前的begin所指元素,如此繼續(xù)下去,直到begin等于end為止。如有:strings=“china”chinas.begin()s.end()注:使用string定義的字符串中不用字符’\0’作為結(jié)束符,使用char定義的字符串則自動(dòng)在末尾加入’\0’作為結(jié)束符。53例題:以下程序是實(shí)現(xiàn)字符串內(nèi)容的反轉(zhuǎn)。#include<iostream>#include<string>#include<algorithm>usingnamespacestd;voidmain(){ strings="china"; cout<<s<<endl; reverse(&s[0],&s[0]+5); cout<<s<<endl;}s.begin()s.end()reverse(s.begin
(),s.end());54練習(xí):以下程序是將一個(gè)字符串中的字母轉(zhuǎn)換成大寫輸出,其他字符不變。如輸入”I’m20yearsold”,則轉(zhuǎn)換成I’M20YEARSOLD.#include<iostream>#include<string>usingnamespacestd;voidmain(){strings;char*p;getline(cin,s,’\n’);cout<<s<<endl;for(p=s.begin();p<s.end();p++){if(*p>=‘a(chǎn)’&&*p<=‘a(chǎn)’)*p=*p-32;}cout<<s<<endl;}//定義一個(gè)字符串對(duì)象s//定義一個(gè)指針用來(lái)遍歷字符串中的每一個(gè)字符。//輸入一個(gè)字符串給s//輸入原字符串//轉(zhuǎn)換55#include<iostream>#include<string>usingnamespacestd;voidmain(){strings;char*p;getline(cin,s,’\n’);cout<<s<<endl;for(p=s.begin();p<s.end();p++){if(*p>=‘a(chǎn)’&&*p<=‘a(chǎn)’)*p=*p-32;}cout<<s<<endl;}56#include<iostream>usingnamespacestd;voidmain(){strings1="happy!",s2(s1);}//反轉(zhuǎn)s1reverse(s1.begin(),s1.end());#include<string>//原樣復(fù)制s1給s2cout<<s1<<endl;!yppahcopy(s1.begin(),s1.end(),s2.begin());cout<<s1<<endl;cout<<s2<<endl;//將s1升冪排序sort(s1.begin(),s1.end());!ahppy!yppahcout<<s1<<endl;happy!#include<algorithm>練習(xí):按要求填空57#include<algorithm>#include<iostream>usingnamespacestd;voidmain(){strings1="wearehere!",s2(s1);}練習(xí):按要求填空//將s1中的s1[2]到s1[4]的內(nèi)容逆向cout<<s1<<endl;wearehere!reverse_copy(s1.begin(),s1.end(),s2.begin());cout<<s2<<endl;//逆向復(fù)制s1給s2!ereheraewreverse(s2.begin()+2,s2.begin()+4);//輸出逆向的部分內(nèi)容eracopy(s2.begin()+2,s2.begin()+4,ostream_iterator<char>(cout));cout<<endl;58#include<algorithm>#include<iostream>usingnamespacestd;voidmain(){strings1="wearehere!",s2(s1);}練習(xí):按要求填空//將s1降冪排序sort(s1.begin(),s1.end(),greater<char>());cout<<s1<<endl;wearehere!cout<<s1<<endl;wrrheeeea!//查找是否存在’e’字符,是返回1,反則返回0。#include<functional>cout<<(*find(s1.begin(),s1.end(),'e')=='e')<<endl;159作業(yè):1、輸入一個(gè)英文句子,統(tǒng)計(jì)其中單詞的個(gè)數(shù)。2、輸入一個(gè)字符串,統(tǒng)計(jì)其中某個(gè)字母的個(gè)數(shù)如strings=“wearehere!”,若統(tǒng)計(jì)字母‘e’的個(gè)數(shù)則結(jié)果為4。3、課本48頁(yè)編程題1、2題60課程回顧1.在程序中可以使用
類定義存儲(chǔ)字符串的對(duì)象。611.在C++中,封裝是借助什么達(dá)到的?()A.結(jié)構(gòu)B.類C.?dāng)?shù)組D.函數(shù)2.假定AA為一個(gè)類,a()為該類公有的函數(shù)成員,x為該類的一個(gè)對(duì)象,則訪問(wèn)x對(duì)象中函數(shù)成員a()的格式為()A.x.aB.x.a()C.x->aD.x->a()3.對(duì)象的四大基本特性是多態(tài)性、繼承性、______和封裝性。抽象性BB課程回顧624.為了使類中的成員不能被類外的函數(shù)通過(guò)成員操作符訪問(wèn),則應(yīng)把該成員的訪問(wèn)權(quán)限定義為_(kāi)_____。private5.C++允許在結(jié)構(gòu)中定義函數(shù),這些函數(shù)稱為()A.靜態(tài)函數(shù)B.構(gòu)造函數(shù)C.析構(gòu)函數(shù)D.成員函數(shù)6.下列哪個(gè)不是面向?qū)ο蟮年P(guān)鍵要素()A.抽象性 B.結(jié)構(gòu)性C.封裝性 D.多態(tài)性D.B.63真題7.C++類的構(gòu)造函數(shù)名與______名稱一樣,且沒(méi)有返回值。8.C++類中定義的成員默認(rèn)訪問(wèn)屬性為(
)A.public
B.privateC.protected
D.friend
類B9.不同對(duì)象調(diào)用同名函數(shù),但導(dǎo)致完全不同行為的現(xiàn)象稱為(
)A.抽象
B.封裝
C.繼承
D.多態(tài)性D6410.類的構(gòu)造函數(shù)在以下什么情況下會(huì)被自動(dòng)調(diào)用()A.定義成員函數(shù)時(shí) B.定義對(duì)象時(shí)C.定義數(shù)據(jù)成員時(shí) D.定義友元函數(shù)時(shí)11.與操作對(duì)象的數(shù)據(jù)類型相互獨(dú)立的算法稱為_(kāi)_____.
泛型算法B6512.不同對(duì)象可以調(diào)用相同名稱的函數(shù),但可導(dǎo)致完全不同的行為的現(xiàn)象稱為_(kāi)_______。多態(tài)性13.在使用string類的find成員函數(shù)來(lái)檢索主串中是否含有指定的子串時(shí),若在主串中不含指定的子串,find函數(shù)的返回值是________。-166作業(yè):編寫程序完成字符串的替
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版特定物資追加采購(gòu)合同版B版
- 公司治理視角下對(duì)外擔(dān)保的內(nèi)部控制研究
- 鞍鋼實(shí)習(xí)報(bào)告
- 【創(chuàng)新方案】2020-2021學(xué)年人教版高中歷史必修1檢測(cè):第26課-世界多極化趨勢(shì)的出現(xiàn)
- 隨州2024年湖北隨州市隨縣引進(jìn)急需緊缺高層次人才17人筆試歷年典型考點(diǎn)(頻考版試卷)附帶答案詳解
- 初中數(shù)學(xué)八年級(jí)上冊(cè)思維導(dǎo)圖
- GEI長(zhǎng)城戰(zhàn)略咨詢簡(jiǎn)介-20220505083931
- 【培訓(xùn)教材】光纖通信原理
- 生物質(zhì)能發(fā)電的電站并網(wǎng)運(yùn)行策略考核試卷
- 鉀肥在森林資源培育中的應(yīng)用考核試卷
- 《理想信念教育》課件
- 2023年高級(jí)EHS工程師年度總結(jié)及下年工作展望
- 《城市規(guī)劃原理試題》(附答案)
- 110kV升壓站構(gòu)支架組立施工方案
- 鋼構(gòu)件應(yīng)力超聲檢測(cè)技術(shù)規(guī)程
- -《多軸數(shù)控加工及工藝》(第二版)教案
- 體 育 課 教 學(xué) 評(píng) 價(jià) 量 表
- 23秋國(guó)家開(kāi)放大學(xué)《漢語(yǔ)國(guó)際教育概論》階段測(cè)驗(yàn)1-2+教學(xué)活動(dòng)1參考答案
- 新員工信息安全課件培訓(xùn)
- 小學(xué)英語(yǔ)-Unit3What would you likePartB Let's talk教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- OA系統(tǒng)功能說(shuō)明書
評(píng)論
0/150
提交評(píng)論