第二章從結(jié)構(gòu)到類的演變_第1頁
第二章從結(jié)構(gòu)到類的演變_第2頁
第二章從結(jié)構(gòu)到類的演變_第3頁
第二章從結(jié)構(gòu)到類的演變_第4頁
第二章從結(jié)構(gòu)到類的演變_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章從結(jié)構(gòu)到類的演變C++中的結(jié)構(gòu)與C中的結(jié)構(gòu)已經(jīng)發(fā)生了質(zhì)的變化。本章通過實例,簡要說明結(jié)構(gòu)如何向類變化,從而引入對象和類的知識。然后介紹c++標(biāo)準(zhǔn)程序庫提供的兩個典型的類。通過使用這兩個類,進(jìn)一步熟悉類和對象,為學(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)識符成員名1;類型標(biāo)識符成員名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ù)來完成。5C++允許結(jié)構(gòu)中可以定義函數(shù),這些函數(shù)成為成員函數(shù)。如果將原來的結(jié)構(gòu)成員稱為數(shù)據(jù)成員的話,結(jié)構(gòu)的定義形式為:struct結(jié)構(gòu)名{數(shù)據(jù)成員成員函數(shù)};二、函數(shù)與數(shù)據(jù)共存(理解)定義結(jié)構(gòu)體對象后,結(jié)構(gòu)體對象自動具有結(jié)構(gòu)體的數(shù)據(jù)成員和成員函數(shù)??梢酝ㄟ^以下形式來使用:

對象名.成員函數(shù)()對象名.數(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)對象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; }由此例看出,可以通過結(jié)構(gòu)的成員函數(shù)使用數(shù)據(jù)成員,a.Setxya.Displaya.xa.y也可以直接使用數(shù)據(jù)成員。這稱作結(jié)構(gòu)Point的公有(publie)性質(zhì)11三、封裝性若定義結(jié)構(gòu)體時,使用了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ù)成員必須通過公有的成員函數(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)時,若使用了private則產(chǎn)生封裝性,表示成員為私有的,只能在結(jié)構(gòu)體內(nèi)部通過公有成員函數(shù)使用。若未添加private則表示默認(rèn)為public。即:私有成員不可通過

對象名.數(shù)據(jù)成員對象名.成員函數(shù)()形式來使用也就是說封裝之后不可通過對象名使用private成員15四、從結(jié)構(gòu)演變一個簡單的類使用關(guān)鍵字class代替struct,就是一個標(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)生對象的方式和結(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)中,沒有使用private定義的成員,默認(rèn)為

。public2、私有的數(shù)據(jù)成員,必須通過公有的成員函數(shù)才能使用,這稱為數(shù)據(jù)的

性。封裝3、與結(jié)構(gòu)不同的是,類使用

關(guān)鍵字來定義,其成員默認(rèn)的性質(zhì)是

。privateclass18類圖的表示類名屬性/成員變量操作(功能)/成員函數(shù)PointXySetxyDisplay19五、使用構(gòu)造函數(shù)初始化對象因為類具有封裝性,所以不能使用“對象名.數(shù)據(jù)成員”的方式對數(shù)據(jù)成員進(jìn)行初始化。所以為類Point設(shè)計兩個專門用于初始化的函數(shù)。其原型如下:因為類是一種數(shù)據(jù)類型,在聲明一個類時系統(tǒng)并不會為其分配內(nèi)存空間,所以在定義類中的數(shù)據(jù)成員時,不能對其進(jìn)行初始化。classPoint{private:doublex=10.5,y=5.6;public:voidSetxy(doublea,doubleb){x=a;y=b;}voidDisplay(){cout<<x<<"\t"<<y<<endl;}};錯誤Point();Point(double,double);若定義的函數(shù)與某個已定義函數(shù)重名而參數(shù)類型或個數(shù)不同,則稱為

。函數(shù)重載在定義類時,與類同名的函數(shù)稱為構(gòu)造函數(shù)。其作用是專門用于初始化對象。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;//定義對象a//設(shè)置a的數(shù)據(jù)成員//顯示a的數(shù)據(jù)成員Pointa(10.2,8.9);a.Display();當(dāng)對象在內(nèi)存中產(chǎn)生時會自動調(diào)用構(gòu)造函數(shù)212.3面向過程和面向?qū)ο蠛唵瘟私鈱ο蟮暮x221、面向過程的求解步驟:例題:給出三角形三個頂點坐標(biāo),計算三邊長,并輸出。(1)輸入三個頂點坐標(biāo)A(x1,y1),B(x2,y2),C(x3,y3)(2)計算(x1,y1)和(x2,y2)距離AB(3)計算(x1,y1)和(x3,y3)距離AC(4)計算(x2,y2)和(x3,y3)距離BC(5)輸出三個距離AB、AC、BC23題解:lt2_6.cpp#include<iostream>#include<cmath>usingnamespacestd;voidmain(){

}24voidmain(){doublex1,y1,x2,y2,x3,y3;doubleAB,AC,BC;cout<<"請輸入A點的坐標(biāo)(x1,y1)";cin>>x1>>y1;cout<<"請輸入B點的坐標(biāo)(x2,y2)";cin>>x2>>y2;cout<<"請輸入C點的坐標(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(給出三角形三個頂點坐標(biāo),計算三邊長,并輸出)設(shè)計類:將點設(shè)計為一個類Point,并提供相關(guān)的屬性和操作一個點對象:※應(yīng)能存放x,y坐標(biāo);※能在定義時給出x,y值?!茉O(shè)置點的x,y值;※能知道對象中存放的x,y坐標(biāo)值※能計算點間距離,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;}定義對象同時給出坐標(biāo)(構(gòu)造函數(shù)初始化方式)計算距離282.4C++面向?qū)ο蟪绦蛟O(shè)計特點操作:是對象動態(tài)特征的一個函數(shù)序列,用函數(shù)來實現(xiàn),也稱方法或服務(wù)。稱為成員函數(shù)。和傳統(tǒng)的程序設(shè)計方法相比,面向?qū)ο蟮某绦蛟O(shè)計具有抽象、封裝、集成和多態(tài)性等關(guān)鍵要素。一、對象C++中對象是描述客觀事物的一個實體,是構(gòu)成系統(tǒng)的基本單位??梢允褂脤ο竺?、屬性和操作三要素來描述一個對象。對象名:用來標(biāo)識一個具體對象,屬性:就是描述對象靜態(tài)特征的一個數(shù)據(jù)項,用數(shù)據(jù)來表示,稱為數(shù)據(jù)成員。29操作1操作2……操作n屬性1屬性2……屬性n對象名對象的結(jié)構(gòu)圖30二、抽象和類如果把程序看作是由一組抽象的對象組成的,然后將一組對象的共同特征抽象出來,就形成了“類”的概念。類由類名、一組屬性和一組操作3部分構(gòu)成類的屬性:是性質(zhì)的說明。對象才具有具體的數(shù)據(jù),具體的屬性類的操作:是行為的定義31類是具有相同屬性和操作的一組對象的集合,它為屬于該類的全部對象提供統(tǒng)一描述,內(nèi)部主要包括:屬性和操作兩部分?!惻c對象的關(guān)系:對象是由一些屬性和操作構(gòu)成的。對象屬性和操作描述對象內(nèi)部細(xì)節(jié)。類的作用是定義對象。

c++中將對象稱做類的實例怎樣理解“一個類的所有對象具有相同的屬性”?是指屬性的個數(shù)、名稱、數(shù)據(jù)類型相同,各個對象的屬性值則可以互不相同,并且隨著程序的執(zhí)行而變化。32一個對象的屬性和操作是緊密結(jié)合的,對象的屬性只能由這個對象的操作來存取,對象的操作分為內(nèi)部操作和外部操作,內(nèi)部操作只提供對象內(nèi)部其他操作使用,不對外提供。外部操作提供一個消息接口,通過這個接口接收對象外部的消息并為之提供操作(服務(wù))。三、封裝33對象內(nèi)部數(shù)據(jù)的不可訪問性稱為數(shù)據(jù)隱藏,封裝給數(shù)據(jù)提供了與外界聯(lián)系的接口,無論是誰,只有通過這些接口,使用規(guī)范的格式,才能訪問內(nèi)部數(shù)據(jù)。封裝就是把對象的屬性和操作結(jié)合成一個獨立的系統(tǒng)單位,并盡可能隱藏對象的內(nèi)部細(xì)節(jié)。封裝在類中是通過存取權(quán)限(如私有的:private、公有的:public)實現(xiàn)的。34繼承是一個類獲得另一個類的特性的機(jī)制。繼承支持層次概念四、繼承(第6章)35不同對象可以調(diào)用同名函數(shù),但可導(dǎo)致完全不同的行為的現(xiàn)象稱為多態(tài)性。例如除法運算/3/23.0/2五、多態(tài)性(第8章)362.5使用類和對象2.5.1使用string對象類名類的屬性用于存放字符串類的操作/方法/成員函數(shù)C++標(biāo)準(zhǔn)程序庫提供了string類和complex類。本節(jié)通過這兩個類了解類和對象的使用。37該類是C++語言中的內(nèi)部預(yù)定義類,要在程序中使用該類時必須添加頭文件#include<string>38一、string對象的定義格式:string對象名如:stringstr1,str2;二、string對象的初始化string對象隸屬于string類,所以必須用雙引號括起來的字符串進(jìn)行初始化。391、定義的同時初始化格式:string對象名(初始值)string對象名=初始值如:stringstr1(“hello,”);stringstr2=“world”stringstr3=‘world’;stringstr4=‘a(chǎn)’;正確錯誤正確初始化的string對象,可以以數(shù)組的形式使用對象中的字符串。str1[0]的值是?str2[0]的值是?‘h’‘w’40string對象使用類似字符數(shù)組&s1[0]表示??&s1[0]+5表示??但s1對象名不表示地址,數(shù)組名表示地址412、從鍵盤接收字符串給string類對象賦值。格式:getline(cin,對象名,結(jié)束字符)第三個參數(shù)是字符串的結(jié)束符,也就是當(dāng)getline遇到這個結(jié)束符時,就不在接受輸入了。系統(tǒng)默認(rèn)為回車符’\n’。如:stringstr;getline(cin,str,’\n’);cout<<str<<endl;如果輸入:輸出:(1)使用getline從流cin中讀出字符串給string類的對象。遇指定字符結(jié)束。422、從鍵盤接受字符串給string類對象賦值。(2)使用cin讀入一個字符串給string類對象賦值,遇空格、回車、tab鍵結(jié)束。格式:cin>>對象名如:stringstr;getline(cin,str,’\n’);cout<<str<<endl;如:stringstr;cin>>str;cout<<str<<endl;43三、string類常用的幾個方法(成員函數(shù))1、size():求對象的長度。格式:對象名.成員函數(shù)名例:stringstr=“aboy”;cout<<str.size()<<endl;則輸出結(jié)果為:544例題:請分析一下程序結(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;}求字符串長度。同size函數(shù)452、substr():求字符串的字串格式:substr(intstart,intlength)功能:從start位置開始,截取length個長度的字符串。注:(1)c++規(guī)定字符串的計數(shù)從0開始。例如:stringstr=“wishyouhappy!”;stringnewstr=str.substr(5,3);cout<<newstr<<endl;程序輸出:注:(2)截取的起始位置必須位于字符串中,否則出錯。注:(3)如果截取的長度大于字符串長度,則自動截取到末尾。463、find():字符串檢索格式:find(要查找的字符串,開始查找的位置)功能:從指定位置開始查找所需的字符串,如果找到了,則返回字符串在主串中的位置,如果沒有沒到則返回-1。如果沒有指定開始查找的位置,則系統(tǒng)默認(rèn)為0。例如:strings=“howareyou?“intn=s.find(“are”,0);則n的值為:4“how”“me”0-147例題:以下程序是輸入一個美國格式的日期(月日,年),(用字符串來接受日期)。然后轉(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、+:將前后兩個字符串連接strings1="you",s2="happy";cout<<s1+""+s2<<endl;注:字符串也可與單個字符常量相加。如上例中: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對象中stringnewdate=year+"年"+month+"月"+day+"日";51四、string對象數(shù)組與泛型算法此前在數(shù)組中介紹的泛型算法同樣適合于string類。1、swap():交換兩個string對象的屬性。格式:對象1.swap(對象2)例如:strings1=“me”,s2=“you”;cout<<s1<<“,”<<s2<<endl;s1.swap(s2);cout<<s1<<“,”<<s2<<endl;s2.swap(s1);另外string類還有幾個成員函數(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():指示第一個元素位置end():指示最后一個元素之后的位置當(dāng)使用泛型算法時,如果begin不等于end,算法首先作用于begin所指元素,并將begin前進(jìn)一個位置,然后作用于當(dāng)前的begin所指元素,如此繼續(xù)下去,直到begin等于end為止。如有:strings=“china”chinas.begin()s.end()注:使用string定義的字符串中不用字符’\0’作為結(jié)束符,使用char定義的字符串則自動在末尾加入’\0’作為結(jié)束符。53例題:以下程序是實現(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í):以下程序是將一個字符串中的字母轉(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;}//定義一個字符串對象s//定義一個指針用來遍歷字符串中的每一個字符。//輸入一個字符串給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、輸入一個英文句子,統(tǒng)計其中單詞的個數(shù)。2、輸入一個字符串,統(tǒng)計其中某個字母的個數(shù)如strings=“wearehere!”,若統(tǒng)計字母‘e’的個數(shù)則結(jié)果為4。3、課本48頁編程題1、2題60課程回顧1.在程序中可以使用

類定義存儲字符串的對象。611.在C++中,封裝是借助什么達(dá)到的?()A.結(jié)構(gòu)B.類C.?dāng)?shù)組D.函數(shù)2.假定AA為一個類,a()為該類公有的函數(shù)成員,x為該類的一個對象,則訪問x對象中函數(shù)成員a()的格式為()A.x.aB.x.a()C.x->aD.x->a()3.對象的四大基本特性是多態(tài)性、繼承性、______和封裝性。抽象性BB課程回顧624.為了使類中的成員不能被類外的函數(shù)通過成員操作符訪問,則應(yīng)把該成員的訪問權(quán)限定義為______。private5.C++允許在結(jié)構(gòu)中定義函數(shù),這些函數(shù)稱為()A.靜態(tài)函數(shù)B.構(gòu)造函數(shù)C.析構(gòu)函數(shù)D.成員函數(shù)6.下列哪個不是面向?qū)ο蟮年P(guān)鍵要素()A.抽象性 B.結(jié)構(gòu)性C.封裝性 D.多態(tài)性D.B.63真題7.C++類的構(gòu)造函數(shù)名與______名稱一樣,且沒有返回值。8.C++類中定義的成員默認(rèn)訪問屬性為(

)A.public

B.privateC.protected

D.friend

類B9.不同對象調(diào)用同名函數(shù),但導(dǎo)致完全不同行為的現(xiàn)象稱為(

)A.抽象

B.封裝

C.繼承

D.多態(tài)性D6410.類的構(gòu)造函數(shù)在以下什么情況下會被自動調(diào)用()A.定義成員函數(shù)時 B.定義對象時C.定義數(shù)據(jù)成員時 D.定義友元函數(shù)時11.與操作對象的數(shù)據(jù)類型相互獨立的算法稱為______.

泛型算法B6512.不同對象可以調(diào)用相同名稱的函數(shù),但可導(dǎo)致完全不同的行為的現(xiàn)象稱為________。多態(tài)性13.在使用string類的find成員函數(shù)來檢索主串中是否含有指定的子串時,若在主串中不含指定的子串,find函數(shù)的返回值是________。-166作業(yè):編寫程序完成字符串的替

溫馨提示

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

最新文檔

評論

0/150

提交評論