




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
C++語(yǔ)言是C的擴(kuò)充擴(kuò)充C語(yǔ)言
C++語(yǔ)言擴(kuò)充的目的:支持面向?qū)ο蟪绦蛟O(shè)計(jì)擴(kuò)充的功能:類定義消息傳遞(類似函數(shù)調(diào)用)繼承、虛函數(shù)第二章類和對(duì)象C++語(yǔ)言是C的擴(kuò)充第二章類和對(duì)象對(duì)象與封裝對(duì)象
相對(duì)獨(dú)立的實(shí)體具有表示其狀態(tài)、特征的屬性具有表示其行為、功能的操作封裝性:只有自身操作可訪問(wèn)對(duì)象屬性面向?qū)ο蠓椒▽⒎治?、設(shè)計(jì)的系統(tǒng)和程序都抽象為對(duì)象組成的模型面向?qū)ο蟪绦蛟O(shè)計(jì)運(yùn)行中程序?qū)嵗?若干對(duì)象實(shí)例+交互控制程序=若干對(duì)象類(用于描述各種對(duì)象)對(duì)象類=程序模塊C++程序=主函數(shù)(main)+若干類定義對(duì)象與封裝對(duì)象相對(duì)獨(dú)立的實(shí)體類C++的類是把各種不同類型的數(shù)據(jù)(稱為數(shù)據(jù)成員)和對(duì)數(shù)據(jù)的操作(成員函數(shù))組織在一起而形成的用戶自定義的數(shù)據(jù)類型。C++中,類定義包括類說(shuō)明和類實(shí)現(xiàn)兩大部分。說(shuō)明部分提供了對(duì)該類所有數(shù)據(jù)成員和成員函數(shù)的描述,而實(shí)現(xiàn)部分提供了所有成員函數(shù)的實(shí)現(xiàn)代碼。類C++的類是把各種不同類型的數(shù)據(jù)(稱為數(shù)據(jù)成員)和對(duì)數(shù)據(jù)的類的定義***.h
class
類名{數(shù)據(jù)成員的說(shuō)明public:
方法成員的說(shuō)明};類的定義***.h說(shuō)明:類名由用戶自己定,一般首字母大寫默認(rèn)是private,只有類中的成員函數(shù)才能訪問(wèn)注意:類定義的末尾有一分號(hào)注意:不能在類定義中對(duì)數(shù)據(jù)成員進(jìn)行初始化
classLocation{intx=25,y;//ERROR};說(shuō)明:classDate{intyear,month,day;public:
Date(inty,intm,intd); voidsetYear(inty); voidsetMonth(intm); voidsetDay(intd); intgetYear();intgetMonth();intgetDay();};//date.h類的定義classDate//date.h類的定義成員函數(shù)的定義1、將成員函數(shù)的定義直接寫在類中適合于成員函數(shù)規(guī)模較小的情況(內(nèi)聯(lián)函數(shù))2、在類的定義體中只寫出成員函數(shù)的原型說(shuō)明,而成員函數(shù)的定義之后再寫通常將類的定義寫在一個(gè)頭文件(.h文件)中,成員函數(shù)的定義寫在一個(gè)程序文件(.cpp文件)中一般形式:返回類型類名::成員函數(shù)名(參數(shù)說(shuō)明){類體}成員函數(shù)的定義1、將成員函數(shù)的定義直接寫在類中classDate{intyear,month,day;public:
Date(inty,intm,intd); voidsetYear(inty); voidsetMonth(intm); voidsetDay(intd); intgetYear();intgetMonth();intgetDay(){returnday;}
//內(nèi)聯(lián)函數(shù)};classDate//date.cpp實(shí)現(xiàn)部分#include"date.h"
Date::Date(inty,intm,intd){ year=y;month=m;day=d;}intDate::getYear(){ returnyear;}//date.cpp實(shí)現(xiàn)部分intDate::getMonth(){ returnmonth;}intDate::getDay(){ returnday;}intDate::getMonth(){voidDate::setYear(inty){ year=y;}voidDate::setMonth(intm){ month=m;}voidDate::setDay(intd){ day=d;}voidDate::setYear(inty){//exam.cppDate類的測(cè)試程序#include<iostream.h>#include"date.h"voidmain(){
Datek(2000,12,1); cout<<k.getMonth()<<endl;}//exam.cppDate類的測(cè)試程序?qū)ο髣?chuàng)建時(shí),為數(shù)據(jù)成員分配存儲(chǔ)空間調(diào)用類的構(gòu)造函數(shù)對(duì)象生命周期結(jié)束時(shí),調(diào)用類的析構(gòu)函數(shù)對(duì)象創(chuàng)建時(shí),為數(shù)據(jù)成員分配存儲(chǔ)空間構(gòu)造函數(shù)是一種特殊的成員函數(shù),函數(shù)名與類名相同當(dāng)定義該類的對(duì)象時(shí),構(gòu)造函數(shù)將被自動(dòng)調(diào)用以實(shí)現(xiàn)對(duì)該對(duì)象的初始化構(gòu)造函數(shù)不能有返回值,因而不能指定包括void在內(nèi)的任何返回值類型構(gòu)造函數(shù)既可定義帶參,也可義不帶參一個(gè)類可定義多個(gè)構(gòu)造函數(shù),也可以不定義構(gòu)造函數(shù),沒(méi)定義構(gòu)造函數(shù)時(shí),則自動(dòng)建立一個(gè)空的不帶參構(gòu)造函數(shù)(默認(rèn)構(gòu)造函數(shù))構(gòu)造函數(shù)是一種特殊的成員函數(shù),函數(shù)名與類名相同析構(gòu)函數(shù)函數(shù)名與類名相同,前有~沒(méi)有參數(shù),沒(méi)有返回值在類對(duì)象生命期結(jié)束時(shí),系統(tǒng)自動(dòng)調(diào)用一個(gè)類只可定義一個(gè)析構(gòu)函數(shù),也可以不定義如果在類的對(duì)象中分配有動(dòng)態(tài)內(nèi)存(如:用new申請(qǐng)分配的內(nèi)容)時(shí),就必須為該類提供適當(dāng)?shù)奈鰳?gòu)函數(shù),完成清理工作析構(gòu)函數(shù)函數(shù)名與類名相同,前有~this指針誰(shuí)的成員?Datec1,c2;intDate::getYear(){ returnyear;//c1?C2?}this指針誰(shuí)的成員?this指針C++的非靜態(tài)成員函數(shù)有一個(gè)隱含參數(shù)X*constthisintDate::getYear(Date*constthis){ returnthis->year;}c1.getYear(&c1);this指針C++的非靜態(tài)成員函數(shù)有一個(gè)隱含參數(shù)intDa例:有理數(shù)類的定義#include<iostream.h>classCRation{ longn; //分子
longd; //分母public: CRation(long,long);//構(gòu)造
voidPrint(); //輸出
voidGcd(); //約分};例:有理數(shù)類的定義CRation::CRation(longn,longd){ //對(duì)象創(chuàng)建時(shí)被調(diào)用
this->n=n; //this是指向當(dāng)前對(duì)象的指針
this->d=d;}voidCRation::Print(void){ cout<<n<<"/"<<d<<endl;}CRation::CRation(longn,longvoidCRation::Gcd() { intx=n,y=d,t; if(x<y) {t=x;x=y;y=t;} t=x%y;while(t!=0){ x=y;y=t;t=x%y; } n/=y;d/=y; }C++類以及對(duì)象ppt課件main() {CRationr(18,27);//分配空間,調(diào)構(gòu)造函數(shù)r.Print(); //輸出r.Gcd(); //約分r.Print(); }main() 例:動(dòng)態(tài)整數(shù)數(shù)組類作為對(duì)象的數(shù)組唯一標(biāo)識(shí)的實(shí)體封裝數(shù)組元素、元素個(gè)數(shù)等信息責(zé)任功能按照下標(biāo)的訪問(wèn)數(shù)組大小可變可獲取元素個(gè)數(shù)#include<iostream.h>#include<string.h>classArray{ int*pElems; intsize; //個(gè)數(shù)public: Array(intn); //構(gòu)造 ~Array(void);//析構(gòu)
voidSetAt(inti,intv); intGetAt(inti); //存取
intGetSize(void);}; 例:動(dòng)態(tài)整數(shù)數(shù)組類作為對(duì)象的數(shù)組#include<iost類設(shè)計(jì)要點(diǎn)獨(dú)立性表示獨(dú)立的實(shí)體以屬性表示其特征以行為表示其擔(dān)負(fù)的責(zé)任(功能、服務(wù))封裝性不開(kāi)放屬性提供足夠的方法,支持各種用途隱蔽內(nèi)部數(shù)據(jù)結(jié)構(gòu)隱蔽方法的內(nèi)部算法復(fù)用性適用性強(qiáng)、功能豐富類設(shè)計(jì)要點(diǎn)獨(dú)立性方法的實(shí)現(xiàn)(1/2)Array::Array(intn) { //構(gòu)造n元素的數(shù)組
pElems=newint[n]; //動(dòng)態(tài)生成
size=n;}Array::~Array(void) { //撤消前被自動(dòng)調(diào)用
delete[]pElems; //釋放空間}intArray::GetSize(void) { returnsize; //獲得數(shù)組大小}方法的實(shí)現(xiàn)(1/2)Array::Array(intn方法的實(shí)現(xiàn)(2/2)voidArray::SetAt(inti,intv){ //按下標(biāo)i賦值v if(i>=size) { //超過(guò)范圍
int*p=newint[size+5];//開(kāi)辟空間,復(fù)制數(shù)據(jù)
memcpy(p,pElems,size*sizeof(int)); size+=5; delete[]pElems; //釋放原數(shù)組空間
pElems=p; //保存首地址 } *(pElems+i)=v; //賦值}intArray::GetAt(inti) //按下標(biāo)i取元素?cái)?shù)據(jù){
returni<size?*(pElems+i):0;} 方法的實(shí)現(xiàn)(2/2)voidArray::SetAt(動(dòng)態(tài)數(shù)組的使用voidmain() { intn; Arrayx(10); //數(shù)組對(duì)象實(shí)例變量
for(inti=0;i<20;i++) { cout<<"Input:"; cin >>n; x.SetAt(i,n); } for(i=0;i<x.GetSize();i++) cout << x.GetAt(i)<<"";}動(dòng)態(tài)數(shù)組的使用voidmain() 程序分析對(duì)象類=數(shù)據(jù)結(jié)構(gòu)+相關(guān)函數(shù)屬性=結(jié)構(gòu)分量方法=作用于結(jié)構(gòu)的函數(shù)對(duì)象實(shí)例變量靜態(tài)構(gòu)造局部變量、全局變量動(dòng)態(tài)構(gòu)造new類名(參數(shù)表)函數(shù)定義標(biāo)識(shí)所屬的類可以直接訪問(wèn)參數(shù)和本類的數(shù)據(jù)成員函數(shù)調(diào)用通過(guò)對(duì)象實(shí)例調(diào)用其方法程序分析對(duì)象類=數(shù)據(jù)結(jié)構(gòu)+相關(guān)函數(shù)消息傳遞對(duì)象方法的激活使用者向?qū)ο髮?shí)例發(fā)消息對(duì)象用方法函數(shù)響應(yīng)消息消息的組成消息名函數(shù)名消息屬性參數(shù)值的列表核心點(diǎn)使用者僅關(guān)心消息的組成對(duì)象決定哪個(gè)方法負(fù)責(zé)響應(yīng)消息傳遞對(duì)象方法的激活消息傳遞消息響應(yīng)不同類可以有同名方法函數(shù)同類中可以有原型不同的方法消息響應(yīng)方法的選擇消息名=方法名接收消息的對(duì)象(對(duì)象類)匹配函數(shù)原型(參數(shù)個(gè)數(shù)、參數(shù)類型)消息傳遞消息響應(yīng)對(duì)象成員一個(gè)類的對(duì)象作為另一個(gè)類的數(shù)據(jù)成員classX{
類名1成員名1類名2成員名2
…...
};構(gòu)造函數(shù)
X::X(參數(shù)表0):成員1(參數(shù)表1),成員2(參數(shù)表2){…...}
對(duì)象成員一個(gè)類的對(duì)象作為另一個(gè)類的數(shù)據(jù)成員建立X類對(duì)象時(shí),先調(diào)對(duì)象成員的構(gòu)造函數(shù),然后才執(zhí)行X類的構(gòu)造函數(shù)對(duì)象成員構(gòu)造函數(shù)的調(diào)用順序取決于這些對(duì)象成員在類中的說(shuō)明順序析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造函數(shù)相反建立X類對(duì)象時(shí),先調(diào)對(duì)象成員的構(gòu)造函數(shù),然后才執(zhí)行X類的構(gòu)造#include"Date.h"classStudent_Info{ intNo; charName[20];charSex;
DateBirthday;
public:Student_Info(intn,char*a,chars,inty,intm,intd);Student_Info();intGetNo();char*GetName();charGetSex();
……};#include"Date.h"#include"Student.h"Student_Info::Student_Info(intn,char*a,chars,inty,intm,intd):Birthday(y,m,d){No=n; strcpy(Name,a);Sex=s;}Student_Info::Student_Info():Birthday(2000,1,1){No=0;strcpy(Name,"");Sex='m';}#include"Student.h"程序結(jié)構(gòu)一般分為三個(gè)文件:1)將類的說(shuō)明作為頭文件.h2)將類的成員函數(shù)的實(shí)現(xiàn)放一個(gè)文件.cpp3)對(duì)類的使用放一個(gè)文件,包括main.cpp程序結(jié)構(gòu)一般分為三個(gè)文件:作業(yè):定義日期類定義描述書的類,包括書名、價(jià)格、出版日期等作業(yè):第三章繼承現(xiàn)實(shí)世界中的一般特殊關(guān)系人學(xué)生人教師類的繼承學(xué)生類繼承人類教師類繼承人類派生類:描述特殊的屬性和行為基類:描述一般的屬性和行為第三章繼承現(xiàn)實(shí)世界中的一般特殊關(guān)系C++語(yǔ)言對(duì)繼承的支持class派生類:public基類{ … // 特殊屬性
… // 特殊方法 };派生類繼承了基類的屬性和方法支持軟件模塊的復(fù)用復(fù)用了基類的數(shù)據(jù)結(jié)構(gòu)和成員函數(shù)C++語(yǔ)言對(duì)繼承的支持class派生類:publi【例】分別定義一個(gè)描述圓的類Circle和描述一個(gè)圓柱體的類Cylinder。【例】分別定義一個(gè)描述圓的類Circle和描述一個(gè)圓柱體的類#ifndefCircle_H#defineCircle_HclassCircle//定義圓類{
protected:doubleradius;public:Circle(doubler){radius=r;}voidsetradius(doubler){radius=r;}doublegetradius(){returnradius;}doublearea(){return3.14*radius*radius;}};#endif#ifndefCircle_H#include"Circle.h"classCylinder:publicCircle//定義圓柱體類{
doubleheight;public:Cylinder(doubler,doubleh);
voidsetheight(doubleh);
doublegetheight();
doublearea();//重新定義area()函數(shù)};#include"Circle.h"#include"Cylinder.h"Cylinder::Cylinder(doubler,doubleh):Circle(r)
{height=h;}voidCylinder::setheight(doubleh){height=h;}doubleCylinder::getheight(){returnheight;}doubleCylinder::area()//重新定義area()函數(shù){return2*Circle::area()+2*3.14*radius*height;}#include"Cylinder.h"#include<iostream.h>#include"Cylinder.h"#include"Circle.h"voidmain(){Circles1(10);Cylinders2(2,5);cout<<"圓柱體表面積:"<<s2.area()<<endl;
cout<<"圓的面積是:"<<s1.area()<<endl;}#include<iostream.h>在創(chuàng)建派生類的對(duì)象時(shí),由于派生類的對(duì)象包含了基類的數(shù)據(jù)成員,因此派生類的構(gòu)造函數(shù)除初始化其自身定義的數(shù)據(jù)成員外,還必須對(duì)基類中的數(shù)據(jù)成員進(jìn)行初始化,也就是說(shuō),派生類的構(gòu)造函數(shù)要負(fù)責(zé)調(diào)用基類的構(gòu)造函數(shù)。派生類的構(gòu)造函數(shù)的定義格式如下:派生類名::派生類構(gòu)造函數(shù)名(參數(shù)表):基類構(gòu)造函數(shù)名(參數(shù)表){……}在創(chuàng)建派生類的對(duì)象時(shí),由于派生類的對(duì)象包含了基類的數(shù)據(jù)成員,基類的對(duì)象只能調(diào)用基類的成員函數(shù),不能調(diào)用派生類的成員函數(shù)在定義派生類的對(duì)象時(shí),系統(tǒng)首先執(zhí)行基類的構(gòu)造函數(shù),然后執(zhí)行派生類的構(gòu)造函數(shù)。而系統(tǒng)執(zhí)行析構(gòu)函數(shù)的順序恰恰相反,即先執(zhí)行派生類的析構(gòu)函數(shù),再執(zhí)行基類的析構(gòu)函數(shù)若在基類中沒(méi)有定義任何構(gòu)造函數(shù),這時(shí)在派生類的構(gòu)造函數(shù)的定義中可以省略對(duì)基類構(gòu)造函數(shù)的調(diào)用,此時(shí)系統(tǒng)將去調(diào)用基類的默認(rèn)構(gòu)造函數(shù)。
基類的對(duì)象只能調(diào)用基類的成員函數(shù),不能調(diào)用派生類的成員函數(shù)多繼承定義多繼承類的方式:class派生類名:訪問(wèn)方式基類1,訪問(wèn)方式基類2……{……};其中:訪問(wèn)方式同單繼承多繼承下派生類的構(gòu)造函數(shù)必須同時(shí)負(fù)責(zé)所有基類構(gòu)造函數(shù)的調(diào)用在多繼承下,派生類構(gòu)造函數(shù)的定義格式:派生類構(gòu)造函數(shù)名(參數(shù)表):基類名1(參數(shù)表1),……{……}多繼承定義多繼承類的方式:在多繼承下,系統(tǒng)首先執(zhí)行各基類的構(gòu)造函數(shù),然后再執(zhí)行派生類的構(gòu)造函數(shù),處于同一層次的各基類構(gòu)造函數(shù)的執(zhí)行順序與聲明派生類時(shí)所指定的各基類順序一致,而與派生類的構(gòu)造函數(shù)定義中所調(diào)用基類構(gòu)造函數(shù)的順序無(wú)關(guān)。在多繼承下,系統(tǒng)首先執(zhí)行各基類的構(gòu)造函數(shù),然后再執(zhí)行派生類的第四章多態(tài)性與虛函數(shù)多態(tài)性不同事物以不同方式響應(yīng)同一消息演出發(fā)消息“暫?!苯o 比賽會(huì)議產(chǎn)生不同的消息響應(yīng)消息響應(yīng)取決于接受消息的對(duì)象,而不是發(fā)送者第四章多態(tài)性與虛函數(shù)多態(tài)性【例】#include<iostream.h>classA{inta;public:A(inti=0){a=i;}voidprint();};voidA::print(){cout<<"InclassA,print()iscalled."<<endl;}【例】classB:publicA
{intb;public:B(intj=-1){b=j;}
voidprint();};voidB::print(){cout<<"InclassB,print()iscalled."<<endl;}classB:publicAvoidmain(){Aa,*pa;Bb,*pb;pa=&a;pa->print();pb=&b;pb->print();
pa=&b;//基類指針可以指向派生類對(duì)象
pa->print();}voidmain()C++類以及對(duì)象ppt課件voidcommfun(A&aref){aref.print();}voidmain(){Aa;a.print();commfun(a);//以基類A的對(duì)象a作實(shí)參Bb;b.print();commfun(b);//以派生類B的對(duì)象b作實(shí)參}voidcommfun(A&aref)C++類以及對(duì)象ppt課件分析:在派生類B中繼承了基類A的成員函數(shù)print(),又定義了一個(gè)同名的print()函數(shù)。這種改變?cè)陟o態(tài)聯(lián)編的基礎(chǔ)上編譯器并不知道。必須通知編譯器這種可能的改變,即需要進(jìn)行動(dòng)態(tài)聯(lián)編。其方法就是在基類中將可能發(fā)生改變的成員函數(shù)聲明為虛函數(shù)。分析:在派生類B中繼承了基類A的成員函數(shù)print(),又定虛函數(shù)聲明虛函數(shù)的方法是在基類中的成員函數(shù)原型前加上關(guān)鍵字virtual。其格式如下:
class類名{……
virtual
類型函數(shù)名(參數(shù)表);……};虛函數(shù)聲明虛函數(shù)的方法是在基類中的成員函數(shù)原型前加上關(guān)鍵字v當(dāng)一個(gè)類的成員函數(shù)說(shuō)明為虛函數(shù)后,在該類的派生類中定義與其基類虛函數(shù)原型相同的函數(shù)。這時(shí),當(dāng)用基類指針指向這些派生類對(duì)象時(shí),系統(tǒng)會(huì)在程序運(yùn)行中根據(jù)所指對(duì)象的不同,自動(dòng)選擇派生類中的同名函數(shù)來(lái)代替基類中的虛函數(shù)。當(dāng)一個(gè)類的成員函數(shù)說(shuō)明為虛函數(shù)后,在該類的派生類中定義與其基虛函數(shù)在派生類中重新定義時(shí),必須與基類中的函數(shù)原型完全相同,包括函數(shù)名、返回類型、參數(shù)個(gè)數(shù)和參數(shù)類型的順序。這時(shí)無(wú)論在派生類的相應(yīng)成員函數(shù)前是否加上關(guān)鍵字virtual,都將視其為虛函數(shù)。如果函數(shù)原型不同,只是函數(shù)名相同,C++將視其為一般的函數(shù)重載,而不是虛函數(shù)。虛函數(shù)在派生類中重新定義時(shí),必須與基類中的函數(shù)原型完全相同,#include<iostream.h>classP{public:
virtualvoidprint(){cout<<"ParentClass"<<endl;}};classA:publicP{public:
virtualvoidprint(){cout<<"SubClass1"<<endl;}};classB:publicP{public:
virtualvoidprint(){cout<<"SubClass2"<<endl;}};#include<iostream.h>voidmain(){Aobj1;Bobj2;P*s1; s1=&obj1;s1->print();s1=&obj2;s1->print();}通過(guò)指針voidmain()通過(guò)指針classA{public:
virtualvoidPrint(){cout<<"Parent"<<endl;}};classB:publicA{public: virtualvoidPrint(){cout<<"Subclass"<<endl;}};voidshow(A&a){ a.Print();}通過(guò)引用classA{通過(guò)引用voidmain(){Bb;show(b);}voidmain()純虛函數(shù)在基類中只聲明虛函數(shù)而不給出具體的函數(shù)定義體,將它的具體定義放在各派生類中,稱此虛函數(shù)為純虛函數(shù)。通過(guò)該基類的指針或引用就可以調(diào)用所有派生類的虛函數(shù),基類只是用于繼承,僅作為一個(gè)接口,具體功能在派生類中實(shí)現(xiàn)。形式:virtual類型函數(shù)名(參數(shù)表)=0;純虛函數(shù)在基類中只聲明虛函數(shù)而不給出具體的函數(shù)定義體,將它的抽象類若一個(gè)類至少有一個(gè)純虛函數(shù),就稱該類為抽象類。抽象類中可以有多個(gè)純虛函數(shù),也可以定義其他非純虛函數(shù)。抽象類若一個(gè)類至少有一個(gè)純虛函數(shù),就稱該類為抽象類。不能聲明抽象類的對(duì)象,但可以聲明指向抽象類的指針變量和引用變量。如果派生類中沒(méi)有重新定義基類中的純虛函數(shù),則在派生類中必須再將該虛函數(shù)聲明為純虛函數(shù)。從抽象類可以派生出具體或抽象類。引入抽象類的目的,主要是為了能將相關(guān)類組織在一個(gè)類繼承結(jié)構(gòu)中,并通過(guò)抽象類來(lái)為這些相關(guān)類提供統(tǒng)一的操作接口。不能聲明抽象類的對(duì)象,但可以聲明指向抽象類的指針變量和引用變【例】設(shè)計(jì)一個(gè)抽象類shape,它表示具有形狀的東西,體現(xiàn)了抽象的概念,在它下面可以派生出多種具體形狀,比如三角形、矩形。#include<iostream.h>classShape{protected:doublex,y;public:voidset(doublei,doublej){x=i;y=j;}virtualvoidarea()=0;//聲明純虛函數(shù)};【例】設(shè)計(jì)一個(gè)抽象類shape,它表示具有形狀的東西,體現(xiàn)classTriangle:publicShape{public:voidarea(){cout<<"三角形面積:"<<0.5*x*y<<endl;}};classRectangle:publicShape{public:voidarea(){cout<<"矩形面積:"<<x*y<<endl;}};classTriangle:publicShapevoidshowarea(Shape&s){ s.area();}voidmain(){Trianglet;Rectangler;t.set(2,10);showarea(t);r.set(5.1,10);showarea(r);}voidshowarea(Shape&s)C++類以及對(duì)象ppt課件接口與復(fù)用程序模塊(構(gòu)件)軟件的組成部件軟件工程觀點(diǎn):通過(guò)組裝構(gòu)件來(lái)開(kāi)發(fā)軟件對(duì)象類作為程序模塊,程序模塊之間的交互手段:模塊接口模塊接口
一組函數(shù)原型(方法)描述了如何訪問(wèn)該模塊編程語(yǔ)言提供接口描述方法C++提供抽象類和純虛函數(shù)Java提供接口interface接口與復(fù)用程序模塊(構(gòu)件)用C++語(yǔ)言描述接口例:整數(shù)容器接口描述用于維護(hù)一組整數(shù)的程序模塊classIntContainer{public: virtualintGetNumber(void)=0; //獲得整數(shù)個(gè)數(shù)
virtualintGetAt(intidx)=0; //獲得第idx個(gè)元素
virtualvoidAdd(intval)=0; //添加元素};純虛函數(shù):自己不定義,要求派生類必須定義抽象類:僅作為基類,不能直接實(shí)例化對(duì)象接口
無(wú)數(shù)據(jù)成員、僅提供純虛函數(shù)的抽象類用C++語(yǔ)言描述接口例:整數(shù)容器接口實(shí)現(xiàn)同一功能的兩個(gè)模塊classIntArray :publicIntContainer{ int *pData,size,used;public: IntArray(intsz);~IntArray(void); intGetNumber(); intGetAt(intidx); voidAdd(intval);};classIntList :publicIntContainer{ structNode{ intval; structNode*next; }*pHead;public: IntList(); intGetNumber(); intGetAt(intidx); voidAdd(intval);};實(shí)現(xiàn)同一功能的兩個(gè)模塊classIntArraycl兩個(gè)類的對(duì)比IntArray 實(shí)現(xiàn)動(dòng)態(tài)數(shù)組pData 指向數(shù)組首元素地址size 數(shù)組大小used 整數(shù)的個(gè)數(shù)IntList 實(shí)現(xiàn)整數(shù)鏈表Node 結(jié)點(diǎn)的結(jié)構(gòu)pHead 鏈表首元素地址接口創(chuàng)建方法不同使用方法相同以
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電焊工施工合同協(xié)議書
- 湖北省隨州市部分高中2024-2025學(xué)年高一下學(xué)期2月聯(lián)考地理試卷(含答案)
- 洗衣設(shè)備購(gòu)銷合同共
- 健身房運(yùn)營(yíng)管理作業(yè)指導(dǎo)書
- 會(huì)議策劃與活動(dòng)執(zhí)行服務(wù)協(xié)議
- 健康科技在老年健康管理中的應(yīng)用解決方案
- 水利建設(shè)工程施工合同協(xié)議書
- 大學(xué)生科普小說(shuō)讀后感
- 觀看紀(jì)錄片長(zhǎng)江觀后感
- 車隊(duì)土石方運(yùn)輸合同
- 化學(xué)電源電化學(xué)原理
- 英語(yǔ)國(guó)家概況謝福之chapter-1
- 高頻訂單失衡及價(jià)差因子
- 部門預(yù)算與預(yù)算管理(PPT-38頁(yè))課件
- (KPI績(jī)效考核)某制造業(yè)公司X年績(jī)效考核全套考核指標(biāo)
- 布朗德戰(zhàn)略導(dǎo)向的薪酬管理體系
- SOP標(biāo)準(zhǔn)作業(yè)指導(dǎo)書樣板
- 食品經(jīng)營(yíng)餐飲操作流程(共1頁(yè))
- JTS 144-1-2010 港口工程荷載規(guī)范
- 產(chǎn)液剖面介紹
- 美國(guó)UNF和unc螺紋標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論