




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
面向對象
程序設計A主講:張冀E-mail:ijgnahz123@163.comTel學與統計學院*第一章緒論3不同進位記數制間的轉換
——R進制→十進制各位數字與它的權相乘,其積相加。例如:(11111111.11)2=1×27+1×26+1×25+1×24
+1×23+1×22+1×21+1×20+1×2-1+1×2-2
=(255.75)10(3506.2)8=3×83+5×82+0×81+6×80+2×8-1
=(1862.25)10(0.2A)16=2×16-1+10×16-2=(0.1640625)10信息的表示與存儲4不同進位記數制間的轉換
——十進制→R進制十進制整數轉換成R進制的整數“除R取余”法,例如:268余數
234┄┄┄┄┄┄┄┄┄┄┄0低位
217┄┄┄┄┄┄┄┄┄┄┄028┄┄┄┄┄┄┄┄┄┄┄124┄┄┄┄┄┄┄┄┄┄022┄┄┄┄┄┄┄┄┄┄021┄┄┄┄┄┄┄┄┄00┄┄┄┄┄┄┄┄┄1高位所以6810=10001002信息的表示與存儲5不同進位記數制間的轉換
——十進制→R進制十進制小數轉換成R進制小數“乘R取整”法,例如:高位
0.3125×2=0.6250.625×2=1.250.25×2=0.50.5×2=1.0所以0.312510=0.01012
信息的表示與存儲6不同進位記數制間的轉換
——二、八、十六進制的相互轉換每位八進制數相當于三位二進制數每位十六進制數相當于四位二進制數(1011010.10)2=(001
011
010.100)2
=(132.4)8(1011010.10)2=(0101
1010.1000)2
=(5A.8)16(F7)16=(1111
0111)2=(11110111)2信息的表示與存儲7二進制數的編碼表示:補碼計算機中的補碼表示法負數的補碼由該數反碼的末位加1求得對補碼再求補即得到原碼補碼運算規(guī)則符號位可作為數值參加運算減法運算可轉換為加法運算:加上一個負數等于加上該數的補碼補碼運算的結果仍為補碼運算結果溢出:負數之和得正數,或正數之和得負數(-32)10=(11100000)2=(E0)16信息的表示與存儲8程序的開發(fā)過程編輯將源程序輸入到計算機中,生成后綴為cpp的磁盤文件。編譯將程序的源代碼轉換為機器語言代碼。連接將多個源程序文件以及庫中的某些文件連在一起,生成一個后綴為exe的可執(zhí)行文件。運行調試程序的開發(fā)過程10本章主要內容C++語言概述基本數據類型和表達式數據的輸入與輸出算法的基本控制結構自定義數據類型11數據類型
—整型數據及取值范圍類型 說明符 位數 數值范圍 短整
short 16 -32768~32767基本
int 32 -231~(231-1)長整
long 32 -231~(231-1)無符號unsignedshort 16 0~65535unsigned
int 32 0~(232-1)unsignedlong 32 0~(232-1) 基本數據類型和表達式12#include<iostream>usingnamespacestd;intmain(){constintPRICE=30;
int
num,total;floatv,r,h;num=10;total=num*PRICE;
cout<<total<<endl;
r=2.5;h=3.2;v=3.14159*r*r*h;
cout<<v<<endl;}
數據類型
——實型數據實型常量float4字節(jié)精度:3.4×10±387位有效數字double8字節(jié)精度:1.7×10±30815位有效數字longdouble8字節(jié)精度:1.7×10±30815位有效數字實型變量默認為double型后綴F(或f)
為float型后綴L(或l)
為longdouble
型基本數據類型和表達式13
數據類型
——字符型數據(一)字符常量單引號括起來的一個字符,
如:'a','D','?','$'字符變量用來存放字符常量
例:charc1,c2;
c1='a';
c2='A';字符數據在內存中的存儲形式以ASCII碼存儲,占1字節(jié),用7個二進制位基本數據類型和表達式14字符數據的使用方法字符數據和整型數據之間可以運算。字符數據與整型數據可以互相賦值。字符串常量例:"CHINA"
"a"
'a'所以:charc;
c="a";CHINA\0a
\0aPage14
數據類型
——字符型數據(二)基本數據類型和表達式15
數據類型
——布爾型數據布爾型變量的說明:
例:boolflag;布爾型數據的取值:
只有false
和true
兩個值基本數據類型和表達式16
數據類型
——常量與變量#include<iostream>usingnamespacestd;intmain(){
constintPRICE=30;
int
num,total;floatv,r,h;
num=10;total=num*PRICE;
cout<<total<<endl;r=2.5;h=3.2;v=3.14159*r*r*h;
cout<<v<<endl;}常量變量變量先聲明后使用符號常量基本數據類型和表達式17
數據類型
——變量初始化例:
inta=3;
doublef=3.56;
charc='a';
intc(5);Page17基本數據類型和表達式181、算數運算符與表達式2、賦值運算符與賦值表達式3、逗號運算和逗號表達式4、邏輯運算與邏輯表達式5、條件運算符與條件表達式6、sizeof運算符7、位運算8、運算符優(yōu)先級與結合性9、混合運算時數據類型的轉換Page18基本數據類型和表達式運算符與表達式19運算符優(yōu)先級++,--,sizeof*,/,%+,-==,!=位運算&&||?:賦值運算逗號運算低高基本數據類型和表達式20簡單的輸入、輸出向標準輸出設備(顯示器)輸出例:intx;
cout<<"x="<<x;從標準輸入設備(鍵盤)輸入例:intx;
cin>>x;21順序結構分支結構(if、switch)循環(huán)結構(while、dowhile、for)算法的基本控制結構22一般形式switch(表達式){case常量表達式1:語句1case常量表達式2:語句2┆case常量表達式n:語句ndefault:語句n+1}switch語句執(zhí)行順序以case中的常量表達式值為入口標號,由此開始順序執(zhí)行。因此,每個case分支最后應該加break語句。每個常量表達式的值不能相同,次序不影響執(zhí)行結果。可以是多個語句,但不必用{}。可以是整型、字符型、枚舉型算法的基本控制結構23while語句形式while(表達式)語句
可以是復合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先判斷表達式的值,若為true時,執(zhí)行語句。算法的基本控制結構24do-while語句一般形式do語句while(表達式)可以是復合語句,其中必須含有改變條件表達式值的語句。執(zhí)行順序先執(zhí)行循環(huán)體語句,后判斷條件。
表達式為true時,繼續(xù)執(zhí)行循環(huán)體與while語句的比較:While語句執(zhí)行順序
先判斷表達式的值,為true時,再執(zhí)行語句算法的基本控制結構25for語句語法形式for(表達式1;表達式2;表達式3)語句
循環(huán)前先求解為true時執(zhí)行循環(huán)體每次執(zhí)行完循環(huán)體后求解算法的基本控制結構26枚舉類型—enum只要將需要的變量值一一列舉出來,便構成了一個枚舉類型。枚舉類型的聲明形式如下:enum
枚舉類型名{變量值列表};例如:enumweekday{sun,mon,tue,wed,thu,fri,sat};自定義數據類型例題1:運算符+、=、*、>=中,優(yōu)先級最高的運算符是(
)。A.+B.=C.*D.>=例題2:下列說法正確的是(
)。A.cout<<”\n”是一個語句,它能在屏幕上顯示”\n”B.\68代表的是字符D。C.1E+5的寫法正確,它表示余割整型常量。D.0x10相當于020。D根據C++語言對運算符優(yōu)先級的規(guī)則,以上運算符優(yōu)先級從低到高的次序為=、>=、+、*。C分號是語句的已部分,且\n是轉義字符;\68代表了八進制的6、8,而八進制中沒有數字8;1E+5是實型常量;十六進制的10相當于十進制的16,相當于八進制的20。例題3:下列不合法的變量名為(
)。A.intB.int1C.name_1D.Name0例題4:已知a=4,b=6,c=8,d=9,則“(a++,b>a++&&c>d)?++d:a<b”值為(
)。A.9B.6C.8D.0填空題例題5:如果s是int型變量,且s=6,則下面s%2+(s+1)%2表達式的值為____。課后:2-23、2-24*A根據變量名命名要求,變量名只能由大小寫字母、數字、下劃線組成,且系統關鍵字不能作為變量名。D1%運算符是求余運算,得到的結果是相除后的余數。表達式轉換為6%2+(6+1)%2=0+7%2=1第三章函數面向對象程序設計A30本章主要內容函數的聲明和調用函數間的參數傳遞內聯函數帶默認形參值的函數函數重載C++系統函數31函數定義的語法形式類型標識符函數名(形式參數表){
語句序列}函數的聲明與使用是被初始化的內部變量,壽命和可見性僅限于函數內部若無返回值,則為無參函數,寫Void函數的定義voidprintstar(void){……}有參還是無參?32遞歸調用函數直接或間接地調用自身,稱為遞歸調用。遞歸過程的兩個階段:遞推:
4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=1未知已知回歸:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1未知已知函數的聲明與使用33例3-8求n!分析:計算n!的公式如下:這是一個遞歸形式的公式,應該用遞歸函數實現。函數的聲明與使用源程序:#include<iostream>usingnamespacestd;longfac(intn){longf;if(n<0)
cout<<"n<0,dataerror!"<<endl;
elseif(n==0)f=1;elsef=fac(n-1)*n;
return(f);}34intmain(){longfac(intn);
intn;longy;
cout<<"Enterapositiveinteger:";
cin>>n;y=fac(n);
cout<<n<<"!="<<y<<endl;}運行結果:Enterapositiveinteger:88!=403203536函數的參數傳遞機制
——傳遞參數值在函數被調用時才分配形參的存儲單元。實參可以是常量、變量或表達式。實參類型必須與形參相符。傳遞時是傳遞參數值,即單向傳遞。函數的聲明與使用37例3-12輸入兩個整數交換后輸出#include<iostream>usingnamespacestd;voidSwap(int&a,int&b);intmain(){ intx(5),y(10);
cout<<"x="<<x<<"y="<<y<<endl;
Swap(x,y);
cout<<"x="<<x<<"y="<<y<<endl; return0;}voidSwap(int&a,int&b){ intt; t=a; a=b; b=t;}函數的聲明與使用運行結果:x=5y=10x=10y=538內聯函數聲明與使用聲明時使用關鍵字inline。編譯時在調用處用函數體進行替換,節(jié)省了參數傳遞、控制轉移等開銷。注意:內聯函數體內不能有循環(huán)語句和switch語句。內聯函數的定義必須出現在內聯函數第一次被調用之前。對內聯函數不能進行異常接口聲明。內聯函數39默認形參值的說明次序默認形參值必須從右向左順序聲明,并且在默認形參值的右面不能有非默認形參值的參數。因為調用時實參取代形參是從左向右的順序。例:int
add(int
x,inty=5,intz=6);//正確int
add(intx=1,inty=5,intz);//錯誤int
add(intx=1,inty,intz=6);//錯誤帶默認形參值的函數40重載函數的聲明C++允許功能相近的函數在相同的作用域內以相同函數名聲明,從而形成重載。方便使用,便于記憶。例:形參類型不同int
add(int
x,inty);floatadd(float
x,floaty);形參個數不同int
add(int
x,inty);int
add(int
x,int
y,intz);
函數重載41注意事項不要將不同功能的函數聲明為重載函數,以免出現調用結果的誤解、混淆。這樣不好:int
add(int
x,int
y);int
add(int
a,int
b);編譯器不以形參名來區(qū)分int
add(int
x,inty);voidadd(int
x,inty);編譯器不以返回值來區(qū)分int
add(int
x,inty){returnx+y;}floatadd(float
x,floaty){returnx-y;}
函數重載重載函數的形參必須不同:個數不同或類型不同。編譯程序將根據實參和形參的類型及個數的最佳匹配來選擇調用哪一個函數。例1:以下敘述正確的是_。A.建立內聯函數的主要目的是提高程序的執(zhí)行效率B.建立內聯函數的主要目的是減少程序文件所占用的內存C.內聯函數的參數傳遞關系與一般函數的參數傳遞關系不同D.任意函數均可定義成為內聯函數解:內聯函數是使用更多的存儲空間,減少執(zhí)行時間,即采用空間換取時間,以提高程序執(zhí)行效率,當多次調用同一內聯函數時,程序會增大占用空間。除了在函數體內含有循環(huán)語句、swich語句的函數和遞歸函數不能定義為內聯函數以外,其余均可定義成內聯函數。內聯函數參數傳遞關系與一般的函數相同。A例2:下面程序的輸出結果為_#include<iostream.h>f(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}voidmain(){inta=2,I;for(I=0;I<3;I++)cout<<f(a)<<endl;}AA.7B.7C.7D.7
8
710
9
9
71311注:靜態(tài)局部變量c的特點:在編譯時候只賦一次初值,以后每次調用函數時不再重新賦初值而是保留上次函數調用結束時的值例3:關于函數的聲明和定義正確的是_A.函數的聲明是必須的,只有這樣才能保證編譯系統對調用表達式和函數之間的參數進行檢測,以確保參數的傳遞正確B.函數的定義和聲明可以合二為一,可以只有函數定義即可C.函數在聲明時,其參數標識符可省略,但參數的類型、個數與順序不能省略D.函數的存儲類型為外部型,所以可以在其他函數中被調用,它在定義時象其他外部變量一樣,可以在其他函數內定義解:函數的聲明并非必須,可以只要函數定義而不要聲明,但要注意符合一定條件,函數不可嵌套定義。C3-15編寫遞歸函數GetPower(intx,inty)計算x的y次冪,在主程序中實現輸入輸出。
解:源程序:#include<iostream.h>longGetPower(intx,inty);intmain(){intnumber,power;longanswer;cout<<"Enteranumber:";cin>>number;cout<<"Towhatpower?";cin>>power;answer=GetPower(number,power);cout<<number<<"tothe"<<power<<"thpoweris"<<answer<<endl;return0;}longGetPower(intx,inty){if(y==1)returnx;elsereturn(x*GetPower(x,y-1));}程序運行輸出:Enteranumber:3Towhatpower?43tothe4thpoweris81第四章類與對象面向對象程序設計A
本章主要內容4.1面向對象的思想4.2OOP的基本特點4.3類與對象4.4構造函數與析構函數4.5類的組合4.6類模板4.7面向對象標記4.3.1類的聲明形式
類是一種用戶自定義類型,聲明形式:class類名稱{public:
公有成員(外部接口)
private:
私有成員
protected:
保護型成員}類的成員classClock{public:
voidSetTime(int
NewH,int
NewM,
int
NewS);
voidShowTime();private:
int
Hour,Minute,Second;};成員數據成員函數4.3.4對象類的對象是該類的某一特定實體,即類類型的變量。聲明形式:
類名對象名;例:
ClockmyClock;類中成員的訪問方式類中成員互訪直接使用成員名類外訪問使用“對象名.成員名”方式訪問
public
屬性的成員構造函數的作用是在對象被創(chuàng)建時使用特定的值構造對象,或者說將對象初始化為一個特定的狀態(tài)。在對象創(chuàng)建時由系統自動調用。如果程序中未聲明,則系統自動產生出一個缺省形式的構造函數允許為內聯函數、重載函數、帶缺省形參值的函數4.4構造函數與析構函數構造函數--由于類的封裝性,不能象普通變量一樣初始化
structSavings
{unsignedaccountNumber;
floatbalance;
};
SavingsA={1,2000.0};
SavingsB(2,3000.0);構造函數舉例classClock{public:
Clock(int
NewH,int
NewM,int
NewS);//構造函數
voidSetTime(int
NewH,int
NewM,int
NewS); voidShowTime();private:
int
Hour,Minute,Second;};構造函數的實現:Clock::Clock(int
NewH,int
NewM,int
NewS){ Hour=NewH; Minute=NewM; Second=NewS;}建立對象時構造函數的作用:voidmain(){
Clockc(0,0,0);//隱含調用構造函數,將初始值作為實參。
c.ShowTime();}4.4.2拷貝構造函數拷貝構造函數是一種特殊的構造函數,其形參為本類的對象引用。
作用:使用一個對象(參數指定的對象),去初始化一個正在被建立的同類型對象class類名{public:
類名(形參);//構造函數類名(類名&對象名);//拷貝構造函數
...};類名::類名(類名&對象名)//拷貝構造函數的實現{函數體}例4-2拷貝構造函數舉例(1)當用類的一個對象去初始化該類的另一個對象時系統自動調用它實現拷貝賦值。voidmain(void){PointA(1,2);PointB(A);//拷貝構造函數被調用
cout<<B.GetX()<<endl;}拷貝構造函數舉例(例4-2)
(2)若函數的形參為類對象,調用函數時,實參賦值給形參,系統自動調用拷貝構造函數。例如:voidfun1(Pointp){cout<<p.GetX()<<endl;}voidmain(){PointA(1,2);fun1(A);//調用拷貝構造函數}
拷貝構造函數舉例(例4-2)(3)當函數的返回值是類對象時,系統自動調用拷貝構造函數。例如:Pointfun2(){PointA(1,2);returnA;//調用拷貝構造函數}voidmain(){PointB;B=fun2();}4.4.3析構函數完成對象被刪除前的一些清理工作。在對象的生存期結束的時刻系統自動調用它,然后再釋放此對象所屬的空間。如果程序中未聲明析構函數,編譯器將自動產生一個缺省的析構函數。組合的概念類中的成員數據是另一個類的對象。可以在已有的抽象的基礎上實現更復雜的抽象。4.5類的組合通過對復雜對象進行分解、抽象,使我們能夠將一個復雜對象理解為簡單對象的組合。分解得到復雜對象的部件對象,這些部件對象比它高層的復雜對象更容易理解和實現。然后由這些部件對象來“裝配”復雜對象。類組合的構造函數設計原則:不僅要負責對本類中的基本類型成員數據賦初值,也要對對象成員初始化。聲明形式:類名::類名(對象成員所需的形參,本類成員形參)
:對象1(參數),對象2(參數),{本類初始化}Point(intxx=0,intyy=0){x=xx;y=yy;}Distance::Distance(Point
a,Point
b,doublep):p1(a),p2(b){doublex=double(p1.GetX()-p2.GetX());doubley=double(p1.GetY()-p2.GetY());dist=sqrt(x*x+y*y);price=p;}4.6類模板template<模板參數表>類聲明使用類模板使用戶可以為類聲明一種模式,使得類中的某些數據成員、某些成員函數的參數、某些成員函數的返回值,能取任意類型(包括系統預定義的和用戶自定義的)。定義一個類模板與定義函數模板的格式類似,必須以關鍵字template開始,后面是尖括號括起來的模板參數,然后是類名,其格式如下:
template<classType>class類名{
//...
};其中template是一個聲明模板的關鍵字,它表示聲明一個模板。關鍵字class表明后面的Type是模板參數。類模板Store<T>模板類Store<int>模板類Store<Student>模板類Store<double>實例化實例化4-14定義一個tree類,有成員ages,成員函數grow(intyears)對ages加上years,age()顯示tree對象的ages的值。解:#include<iostream.h>classTree{intages;public:Tree(intn=0);~Tree();voidgrow(intyears);voidage();};Tree::Tree(intn){ages=n;}Tree::~Tree(){age();}voidTree::grow(intyears){ages+=years;}voidTree::age(){cout<<"這棵樹的年齡為"<<ages<<endl;}voidmain(){Treet(12);t.age();t.grow(4);}程序運行輸出:這棵樹的年齡為12這棵樹的年齡為16第五章
數據的共享與保護面向對象程序設計A
本章主要內容作用域與可見性對象的生存期數據與函數靜態(tài)成員共享數據的保護友元編譯預處理命令多文件結構和工程5.2對象的生存期對象從產生到結束的這段時間就是它的生存期。在對象生存期內,對象將保持它的值,直到被更新為止。5.2.1靜態(tài)生存期這種生存期與程序的運行期相同。在文件作用域中聲明的對象具有這種生存期。在函數內部聲明靜態(tài)生存期對象,要冠以關鍵字static
。例:staticinti;#include<iostream.h>int
i=5;//文件作用域intmain(){
cout<<"i="<<i<<endl;return0;}i具有靜態(tài)生存期例#include<iostream.h>//文件作用域intmain(){staticint
i=5;
cout<<"i="<<i<<endl;return0;}i具有靜態(tài)生存期5.2.2動態(tài)生存期塊作用域中聲明的對象是動態(tài)生存期的對象(習慣稱局部生存期對象)。開始于程序執(zhí)行到聲明點時,結束于命名該標識符的作用域結束處。#include<iostream.h>voidfun();voidmain(){fun();fun();}voidfun(){static
int
a=1;
int
i=5;
a++;
i++;
cout<<"i="<<i<<",a="<<a<<endl;}運行結果:i=6,a=2i=6,a=3i是動態(tài)生存期a是靜態(tài)生存期例5.4靜態(tài)成員全局對象不好,但復雜程序都是由許多程序員共同設計的,因此需要這種性質的對象。使用類中的靜態(tài)數據成員——解決訪問權限控制問題。classemployee{private:
int
EmpNo;
intID;char*name;……}如:需統計雇員總數,數據存放在什么地方?
一個類的所有對象具有相同的屬性。屬性值不同。類屬性;描述類的所有對象的共同特征的一個數據項,對于任何對象實例。它的屬性值是相同的靜態(tài)數據成員用關鍵字static聲明該類的所有對象維護該成員的同一個拷貝必須在類外定義和初始化,用(::)來指明所屬的類。例5-4具有靜態(tài)數據成員的Point類#include<iostream.h>classPoint {public:
Point(intxx=0,int
yy=0){X=xx;Y=yy;countP++;}
Point(Point&p);
int
GetX(){returnX;}
int
GetY(){returnY;} voidGetC(){cout<<"Objectid="<<countP<<endl;}private:
intX,Y;
staticint
countP;統計對象的個數};Point::Point(Point&p){ X=p.X; Y=p.Y;
countP++;}int
Point::countP=0;voidmain() { PointA(4,5);
cout<<"PointA,"<<A.GetX()<<","<<A.GetY();
A.GetC(); PointB(A);
cout<<"PointB,"<<B.GetX()<<","<<B.GetY();
B.GetC(); }在類的聲明中僅僅對靜態(tài)數據成員進行引用性說明,必須在文件作用域的某個地方使用類名限定進行定義性說明,這時也可初始化。注意(1)用類名初始化(2)訪問控制屬性友元是C++提供的一種破壞數據封裝和數據隱藏的機制。通過將一個模塊聲明為另一個模塊的友元,一個模塊能夠引用到另一個模塊中本是被隱藏的信息。可以使用友元函數和友元類。為了確保數據的完整性,及數據封裝與隱藏的原則,建議盡量不使用或少使用友元。友元5.5.1友元函數友元函數是在類聲明中由關鍵字friend修飾說明的非成員函數,在它的函數體中能夠通過對象名訪問private和protected成員作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。訪問對象中的成員必須通過對象名。5.5.2友元類若一個類為另一個類的友元,則此類的所有成員都能訪問對方類的私有成員。聲明語法:將友元類名在另一個類中使用friend修飾說明。例2:classA{public:
voidDisplay(){cout<<x<<endl;}private:
intx;}classB{public:voidSet(inti);voidDisplay();private:
Aa;};friendclassB;voidB::Set(inti){a.x=i;}常類型
常類型的對象必須進行初始化,而且不能被更新。常引用:被引用的對象不能被更新。const類型說明符&引用名常對象:必須進行初始化,不能被更新。類名const對象名常數組:數組元素不能被更新(下一章介紹)。類型說明符const數組名[大小]...常指針:指向常量的指針(下一章介紹)。5.6共享數據的保護#include<iostream.h>voiddisplay(constdouble&r);intmain(){doubled=9.5;
display(d);return0;}voiddisplay(constdouble&r)//常引用做形參,在函數中不能更新r所引用的對象。{cout<<r<<endl;}例5-7常引用做形參5.6.1常引用:被引用的對象不能被更新。const類型說明符&引用名classA{public:
A(int
i,intj){x=i;y=j;}...private:
int
x,y;};Aconst
a(3,4);//a是常對象,不能被更新5.6.2常對象必須進行初始化,不能被更新。
類名const對象名5.6.3用const修飾的對象成員1、常成員函數使用const關鍵字說明的函數。常成員函數不更新對象的數據成員。常成員函數說明格式:
類型說明符函數名(參數表)const;
這里,const是函數類型的一個組成部分,因此在實現部分也要帶const關鍵字。const關鍵字可以被用于參與對重載函數的區(qū)分通過常對象只能調用它的常成員函數,其它成員函數不能調用。2、常數據成員使用const說明的數據成員。多文件問題//main.cpp#include”file1.h”#include”file2.h”voidmain(){….}//file1.h#include”head.h”….//file2.h#include”head.h”….//head.hclasspoint{….}//head.h#ifndefHEAD_H#defineHEAD_Hclasspoint{….}#endif5-3下面的程序的運行結果是什么,實際運行一下,看看與你的設想有何不同。#include<iostream.h>voidmyFunction();intx=5,y=7;intmain(){cout<<"xfrommain:"<<x<<"\n";cout<<"yfrommain:"<<y<<"\n\n";myFunction();cout<<"BackfrommyFunction!\n\n";cout<<"xfrommain:"<<x<<"\n";cout<<"yfrommain:"<<y<<"\n";return0;}voidmyFunction(){inty=10;cout<<"xfrommyFunction:"<<x<<"\n";cout<<"yfrommyFunction:"<<y<<"\n\n";}xfrommain:5yfrommain:7xfrommyFunction:5yfrommyFunction:10BackfrommyFunction!xfrommain:5yfrommain:7第六章
數組與指針面向對象程序設計A
本章主要內容6.1數組6.2指針6.3動態(tài)存儲分配6.4字符串指針小結指針變量可以指向任何類型的對象,它指向數組、結構、函數,數組的數組元素,結構的成員,函數的參數也都可以是指針類型。理解和構造多種說明符:先撇開標識符,按從右到左的順序逐個解釋每個說明符,如果有括號改變解釋的先后,先解釋括號內再解釋括號外。例:int*p[5];5個元素的數組,每個元素為一指針,指針指向整型。即P為指針數組有5個整型指針的數組。int(*p)[5];是一個指針,指向含有5個元素的數組,每個元素是整型,P為指向含有5個整型數的數組指針。例:inti,*ip,f();*fp(),(*pf)(),*(*fp)();inta[5],*ap[5],(*pa)[5];i:整型ip:指向整型的指針f:返回值為整型的函數fp:返回整型指針的函數,fp返回的是一個指向整型變量的指針pf:指向函數的指針,此函數返回整型pfp:指向函數的指針,此函數返回整型指針a:含5個整型元素的數組ap:指針數組,每個元素是指向整型的指針pa:指向整型數組的指針,該數組有5個整型的元素6.7動態(tài)內存分配動態(tài)申請內存操作符newnew類型名T(初值列表)功能:在程序執(zhí)行期間,申請用于存放T類型對象的內存空間,并依初值列表賦以初值。結果值:成功:T類型的指針,指向新分配的內存。失?。?(NULL)釋放內存操作符deletedelete指針P功能:釋放指針P所指向的內存。P必須是new操作的返回值。動態(tài)分配數組時應注意:用new創(chuàng)建多維數組:new類型名T[下標表達式1][下標表達式2]…;如果內存申請成功,new運算返回一個指向新分配內存首地址的指針,是一個T類型的數組,數組元素的個數為除最左邊一維外各位下標表達式的乘積。例如:char(*fp)[3];fp=newchar[2][3];6.8用字符數組存儲和處理字符串字符數組的聲明和引用例:staticcharstr[8]={112,114,111,103,114,97,109,0};
staticcharstr[8]={'p','r','o','g','r','a','m','\0'};
staticcharstr[8]="program";
staticcharstr[]="program";字符串字符串常量,例如:"china"沒有字符串變量,用字符數組來存放字符串字符串以'\0'為結束標志字符數組的初始化例6-19例6-20整行輸入字符串cin.getline(字符數組名St,字符個數N,結束符);功能:一次連續(xù)讀入多個字符(可以包括空格),直到讀滿N個,或遇到指定的結束符(缺省為'\n')。讀入的字符串存放于字符數組St中。讀取但不存儲結束符。cin.get(字符數組名St,字符個數N,結束符);功能:一次連續(xù)讀入多個字符(可以包括空格),直到讀滿N個,或遇到指定的結束符(缺省為'\n')。讀入的字符串存放于字符數組St中。
既不讀取也不存儲結束符。字符串處理函數strcat(連接),strcpy(復制),
strcmp(比較),strlen(求長度),
strlwr(轉換為小寫),
strupr(轉換為大寫)頭文件<string.h>6-26編寫一個矩陣轉置的函數,矩陣的行數和列數在程序中由用戶輸入。
#include<iostream.h>voidmove(int*matrix1,int
m,intn){inti,j,k;Int*matrix2=newint[n*m];for(i=0;i<n;i++)for(j=0;j<m;j++){*(matrix2+i*m+j)=*(matrix1+j*m+i);cout<<*(matrix2+i*m+j)<<““;}cout<<endl;}voidmain(){intm,n,i,j;int*p;cout<<"請輸入矩陣的維數:";cin>>m;cin>>n;p=newint[m*n];cout<<"輸入矩陣的元素"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){cout<<"第"<<i+1<<"行第"<<j+1<<"個元素為:";cin>>p[i*m+j];}cout<<"輸入的矩陣的為:"<<endl;for(i=0;i<m;i++){for(j=0;j<n;j++)cout<<p[i*m+j]<<"";cout<<endl;}cout<<"轉置后的矩陣的為:"<<endl;move(p,m,n);Delete[]p;}第七章繼承與派生面向對象程序設計A
#include<iostream.h>classShape{public:Shape(){} ~Shape(){} virtualfloatGetArea(){return-1;}};classCircle:publicShape{public: Circle(floatradius):itsRadius(radius){} ~Circle(){} floatGetArea(){return3.14*itsRadius*itsRadius;}private: floatitsRadius;};7_5定義一個Shape基類,在此基礎上派生出Rectangle和Circle,二者都有GetArea()函數計算對象的面積。使用Rectangle類創(chuàng)建一個派生類Square。classRectangle:publicShape{public: Rectangle(floatlen,float
idth):itsLength(len),itsWidth(width){}; ~Rectangle(){}; floatGetArea(){return
itsLength*itsWidth;} floatGetLength(){return
itsLength;} floatGetWidth(){return
itsWidth;}private: floatitsWidth; floatitsLength;};classSquare:publicRectangle{public: Square(floatlen); ~Square(){}};Square::Square(floatlen):Rectangle(len,len){}voidmain(){ Shape*sp; sp=newCircle(5);
cout<<"theareaoftheCircleis"<<sp->GetArea()<<endl; deletesp; sp=newRectangle(4,6);
cout<<"theareaoftheRectangleis"<<sp->GetArea()<<endl;deletesp; sp=newSquare(5);
cout<<"theareaoftheSquareis"<<sp->GetArea()<<endl; deletesp;}theareaoftheCircleis78.5theareaoftheRectangleis24theareaoftheSquareis25Pressanykeytocontinue第八章多態(tài)性面向對象程序設計A
8_6#include<iostream.h>classRectangle{public: Rectangle();
Rectangle(intwidth,intlength); ~Rectangle(){}
int
GetWidth()const{return
itsWidth;}
int
GetLength()const{return
itsLength;}private:
int
itsWidth;
int
itsLength;};Rectangle::Rectangle(){
itsWidth=5;
itsLength=10;}Rectangle::Rectangle(int
width,intlength){
itsWidth=width;
itsLength=length;}voidmain(){ RectangleRect1;
cout<<"Rect1width:“
<<Rect1.GetWidth()<<endl;
cout<<"Rect1length:“
<<Rect1.GetLength()<<endl;
int
aWidth,aLength;
cout<<"Enterawidth:";
cin>>aWidth;
cout<<"\nEnteralength:";
cin>>aLength; RectangleRect2(aWidth,aLength);
cout<<"\nRect2width:"
<<Rect2.GetWidth()<<endl;
cout<<"\nRect2length:"
<<Rect2.GetLength()<<endl;}Rect1width:5Rect1length:10Enterawidth:50Enteralength:60Rect2width:50Rect2length:60Pressanykeytocontinue第九章群體類面向對象程序設計A
9_1#include<iostream.h>#include"9_1.h"voidmain(){
intn; doubleAverScore,TotalScore=0;
cout<<"請輸入學生人數";
cin>>n; Array<float>Score(n); for(inti=0;i<n;i++) {
cout<<"請輸入第"<<i+1<<"個學生的課程A成績(0~100):";
cin>>Score[i];
TotalScore+=Score[i]; }
AverScore=TotalScore/n;
cout<<"平均成績?yōu)?<<AverScore<<endl;}第十章
群體數據的組織面向對象程序設計A
3.本程序采用縮小區(qū)間的方法實現排序。縮小區(qū)間的方法是每次在區(qū)間范圍內找一最小數與最大數,將最小數與最大數分別置于該區(qū)間的最前面和最后面,然后從區(qū)間中去掉此最前最后的兩元素,再重復上述的過程,直至區(qū)間長度<=1為止。#include<iostream.h>voidmain(){____(1)_____;int
a[n],max,min,i,j,imax,imin,k;for(i=0;i<n;i++)cin>>a[i];for(i=0;i<n/2;i++){imax=i; max=a[i]; imin=i; min=max;for(j=i+1;___(2)_____;j++)if(a[j]<min) { min=a[j]; imin=j; }else{ if(a[j]>max) { max=a[j]; imax=j; } }if(__3)____) { a[imin]=a[i];a[i]=min;
if(i==imax)___(4)____;}if(imax!=(n-i-1)) { a[imax]=a[n-i-1]; a[n-i-1]=max;}} for(i=0;i<n;i++)cout<<a[i]<<""; }
(1)constintn=10(2)j<n-i(3)i!=imin
(4)imax=imin
輸入想查找的數據12數據為:12345678910111213141516171819200-858993460191091910141312是第12個數據Pressanykeytocontinue}第十一章
流類庫與輸入/輸出面向對象程序設計A
#include<fstream.h>classdog{public:
dog(intweight,longdays) {itsWeight=weight;
itsNumberDaysAlive=days; } ~dog(){}
int
GetWeight()const{return
itsWeight;} voidSetWeight(int
weight){itsWeight=weight;} longGetDaysAlive()const{return
itsNumberDaysAlive;} voidSetDaysAlive(long
days){itsNumberDaysAlive=days;}private:
int
itsWeight; longitsNumberDaysAlive;};11_6intmain(){ charfileName[80];
cout<<"Pleaseenterthefilename:";
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 明確責任的工作目標設定計劃
- 如何提升財務團隊的協作效率計劃
- 2025年鞋用乳液膠粘劑項目合作計劃書
- 2025年醫(yī)用冷療項目發(fā)展計劃
- 2025年其它核材料及相關特殊材料合作協議書
- 遠程在線教育平臺學習免責協議
- 電動汽車充電樁安裝施工合同
- Rac-Ganoderic-acid-C2-生命科學試劑-MCE
- 財務顧問聘用協議
- 工作總結寫作培訓
- JBT 7387-2014 工業(yè)過程控制系統用電動控制閥
- 小學數學教學評一體化教學探究
- 2024年保安員考試題庫【典型題】
- 餐飲行業(yè)系列研究之六:日本餐飲30年復盤與啟示
- 人教版數學八年級下冊第十九章課堂同步練習
- 第一章創(chuàng)新意識課件
- 2024-2029年中國R290制冷劑行業(yè)市場現狀分析及競爭格局與投資發(fā)展研究報告
- 【真題】2023年南京市中考語文試卷(含答案解析)
- 售后工程師績效考核指南
- 自動測試系統第1章第1節(jié)測試系統發(fā)展綜述
- 2024年河南省水務規(guī)劃設計研究有限公司人才招聘筆試參考題庫附帶答案詳解
評論
0/150
提交評論