同濟大學c第八章_第1頁
同濟大學c第八章_第2頁
同濟大學c第八章_第3頁
同濟大學c第八章_第4頁
同濟大學c第八章_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——同濟大學c第八章

第八章面向對象程序設計8.1面向對象程序設計概述8.2結構

8.3類和對象8.4繼承和派生8.5多態(tài)性8.6程序舉例

8.1面向對象程序設計(OOP)概述ObjectOrientedProgramming

基本概念對象:現(xiàn)實世界的實體,每個對象都有所屬的類類:對一組對象共同具有的屬性和行為的抽象,具有封裝和隱蔽性、還具有繼承性。

消息:向某對象請求服務的一種表達方式,是對象與外界、對象與其它對象之間聯(lián)系的工具

方法:對某對象接受消息后所采取的操作的描述。

特點封裝性C++中,通過類和對象實現(xiàn)對數(shù)據(jù)的封裝,使得程序的修改維護更便利。是OOP的基礎。

繼承性連接類與類的層次模型,利用現(xiàn)有類派生出新類的過程稱為類繼承,支持代碼重用、提供了無限重復利用程序資源的途徑、節(jié)省程序開發(fā)的時間和資源,是OOP的關鍵。

多態(tài)性發(fā)出同樣的消息被不同類型的對象接收時導致完全不同的行為,是OOP的重要補充

8.2結構C++中的類從C語言中的結構概念蛻變而來結構類型說明形式

struct結構類型標識符{說明結結構成員1;構類型結構成員2;的關鍵字┆結構成員n;};

類型可任意

(不能為該結構自身)

如,說明一個結構類型date,含三個整型數(shù)據(jù)成員structdate{intmonth;intday;intyear;};structman

在此基礎上,又可說明另一個結構類型man

{charname[15];charsex;intage;datebirthday;};

Name

sex

agemonthstructman

birthdaydayyear結構類型

結構變量定義structmanman1,man2;

先說明結構類型再定義結構變量在說明結構數(shù)據(jù)類型的同時定義結構變量省略結構標識符直接定義結構類型變量struct{charname[15];charsex;intage;structdatebirthday;}man1,man2;

structman{charname[15];charsex;intage;structdatebirthday;}man1,man2;

無類型名變量

結構變量的引用形式:

成員訪問運算符優(yōu)先級最高的四個運算符之一

結構變量名.成員名或或

(*指向結構的指針).成員名指向結構的指針-成員名通過指向結構的指針引用結構變量成員

括號不能少如,假設有定義

manm,*p=m;

則可如下引用結構成員

strcpy(,FangMin);p-birthday.month=8;

8.3類和對象引例#includeiostream.h類定義classCircle{private:doublex,y,r;數(shù)據(jù)成員public:成員函數(shù)voidprint(){cout圓心:(x,y)endl;

voidmain(){Circlep;定義類對象p.set(0,0,2);p.print();}對對象調用

cout半徑:rendl;}voidset(doublex1,doubley1,doubler1)

成員函數(shù)Circle類將圓的屬性(圓心坐標和半徑)和操作(print、set)封裝在一起

{x=x1;

y=y1;

r=r1;}

};

上述定義的Circle類實際上也相當于一種新的數(shù)據(jù)類型,包含了

數(shù)據(jù)和對數(shù)據(jù)的操作,其成員描述如下:數(shù)據(jù)成員名稱含義圓心坐標x值名稱成員函數(shù)功能設置數(shù)據(jù)成員值

x

set

y

圓心坐標y值圓半徑

print

輸出數(shù)據(jù)成員值

r

8.3.1類的定義類是一種繁雜的數(shù)據(jù)類型,它是將不同類型的數(shù)據(jù)和與這些數(shù)據(jù)相關的運算封裝在一起的集合體,類的結構是用來確定一類對象的行為,而這些行為是通過類的內部數(shù)據(jù)結構和相關的操作來確定的。定義格式:定義類的關鍵字

訪類的說明問權限修飾符實現(xiàn)部分

說明部分class類名{public:成員函數(shù)或數(shù)據(jù)成員的說明;private:成員函數(shù)或數(shù)據(jù)成員的說明;protected:成員函數(shù)或數(shù)據(jù)成員的說明;};

實現(xiàn)部分

各成員函數(shù)的實現(xiàn)

說明:定義包括說明部分和實現(xiàn)部分。若成員函數(shù)在說明部分已定義,則實現(xiàn)部分可省略。訪問權限修飾符:public(公有)、private(私有)和protected(保護)缺省時為private。公有成員尋常為成員函數(shù),可在程序中引用,私有成員尋常是數(shù)據(jù)成員,只有成員函數(shù)或友元函數(shù)才可引用。類體中不允許對數(shù)據(jù)成員初始化。自身類的對象不可以作為自己的成員classB{private:intyear=2023,month=10,day=12;Bb;……};

如,定義一個職工類,該類是對所有職工某些信息的抽象,包括如下成員:數(shù)據(jù)成員成員函數(shù)

名稱namesexwage

含義職員姓名職員性別職員工資

名稱setdisplay

功能設置數(shù)據(jù)成員值輸出數(shù)據(jù)成員值

作用域運算符(類體外實現(xiàn)時需要)

voidStaff::display()classStaff{coutname:sex,{private:說明部分wageendl;charname[30];}charsex;voidStaff::set(char*n,chars,floatw)floatwage;{public:strcpy(name,n);voiddisplay();sex=s;實現(xiàn)部分voidset(char*n,chars,floatw);wage=w;}};

8.3.2對象的定義類名僅提供一種類型定義,只有在定義屬于類的變量后,系統(tǒng)才會為其預留空間,這種變量稱為對象,它是類的實例。格式:類名對象名表;如,假設A是一個已定義過的類,則可定義:Aa1,*p,a[5]

A類的對象指向A類對象的指針

對象數(shù)組

成員引用一般對象成員數(shù)據(jù)成員:對象名.成員名成員函數(shù):對象名.成員名(參數(shù)表)對象名.成員名(參數(shù)表)指向對象的指針的成員表示法:數(shù)據(jù)成員:對象指針名-成員名或(*對象指針名).成員名成員函數(shù):對象指針名-成員名(參數(shù)表)(*對象指針名.成員名(參數(shù)表)

[例8-1]#includeiostream.h#includestring.hclassStaff{private:charname[30];charsex;floatwage;public:voiddisplay()

可修改為如下形式嗎?

=“WangQiang〞s.sex=m;s.wage=1526

S1為指向s的指針

voidmain()

{Staffs,*s1;s.set(“WangQiang〞,m,1526);

s.display();{coutname:sex,wageendl;}s1=s;voidset(char*n,chars,floatw)s1-set(GaoLing,'f',2023);{strcpy(name,n);s1-display();sex=s;wage=w;}}};

8.3.3對象的初始化1.構造函數(shù)和析構函數(shù)[例8-2]看引例的另一種實現(xiàn)#includeiostream.hclassCircle{private:doublex,y,r;public:voidprint(){cout圓心:(x,y)endl;

1.定義的同時初始化對象2.省略對賦初值成員函數(shù)的額外調用

voidmain(){Circlep(0,0,2);p.print();}

cout半徑:rendl;}Circle(doublex1,doubley1,doubler1){x=x1;y=y1;r=r1;}};

構造函數(shù)、同類名

構造函數(shù)特點是成員函數(shù),可寫在類體內,亦可寫在類體外。函數(shù)名同類名,不能指定函數(shù)類型,可以帶參數(shù)。可重載,即可定義多個參數(shù)個數(shù)不同的函數(shù)。在創(chuàng)立對象時由系統(tǒng)自動調用,程序中不能直接調用。析構函數(shù)特點:

是成員函數(shù),可寫在類體內,亦可寫在類體外。函數(shù)名同類名,前面多個字符“~〞,不指定類型,無參。不可重載,即一個類只能定義一個析構函數(shù)。可被調用,也可由系統(tǒng)調用。系統(tǒng)自動調用狀況如下:若一個對象被定義在函數(shù)體內,則當該函數(shù)終止時,該對象的析構函數(shù)被自動調用。當一個對象是使用new運算符被動態(tài)創(chuàng)立的,在使用delete釋放時,析構函數(shù)將會被自動調用

2.缺省構造函數(shù)和缺省析構函數(shù)形式:類名::缺省構造函數(shù)名(){}類名::~缺省析構函數(shù)名(){}

說明:若沒有定義任何構造函數(shù),系統(tǒng)會自動生成上述無參的缺省構造函數(shù)及析構函數(shù)若定義一個靜態(tài)對象而沒有指明初始化時,編譯器會按缺省構造函數(shù)對對象的所有數(shù)據(jù)成員都初始化為0或空。

[例8.3]定義一個Circle1類,具有求一個圓的面積、求兩個圓的面積之和,以及輸出面積等功能。#includeiostream.hclassCircle1{private:doublex,y,r,s;public:voidprint(){cout圓心:(x,y)endl;

voidmain(){初始化了嗎

Circle1p1(0,0,2),p2(1,1,4),p3;

p1.print();

cout半徑:rendl;}Circle1()可缺省嗎?驗

溫馨提示

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

評論

0/150

提交評論