《C++程序設(shè)計(jì)教程》課件第1章_第1頁(yè)
《C++程序設(shè)計(jì)教程》課件第1章_第2頁(yè)
《C++程序設(shè)計(jì)教程》課件第1章_第3頁(yè)
《C++程序設(shè)計(jì)教程》課件第1章_第4頁(yè)
《C++程序設(shè)計(jì)教程》課件第1章_第5頁(yè)
已閱讀5頁(yè),還剩132頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.1概述

1.2C++入門(mén)

1.3類(lèi)的基本概念

1.4現(xiàn)實(shí)生活中的類(lèi)與對(duì)象

1.5程序的具體實(shí)現(xiàn)

1.6this指針

1.7作用域、可見(jiàn)性及命名規(guī)則1.8C++程序結(jié)構(gòu)

本章要點(diǎn)

練習(xí)

1.軟件設(shè)計(jì)方法的發(fā)展

軟件開(kāi)發(fā)早期采用結(jié)構(gòu)化程序設(shè)計(jì)方法,程序被理解為:程序=(算法)+(數(shù)據(jù)結(jié)構(gòu))。即算法和數(shù)據(jù)結(jié)構(gòu)是各個(gè)獨(dú)立的整體,分別進(jìn)行設(shè)計(jì)。1.1概述隨后,軟件工程師們開(kāi)始逐步注重系統(tǒng)整體關(guān)系的表示和數(shù)據(jù)模型技術(shù),他們把數(shù)據(jù)結(jié)構(gòu)與算法看做一個(gè)整體的功能模塊,于是程序被重新認(rèn)識(shí)為:程序=(算法+數(shù)據(jù)結(jié)構(gòu))。即算法與數(shù)據(jù)結(jié)構(gòu)是一個(gè)整體,算法總是離不開(kāi)數(shù)據(jù)結(jié)構(gòu),算法含有對(duì)數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)。一個(gè)算法只能適用于特定的數(shù)據(jù)結(jié)構(gòu),想設(shè)計(jì)一個(gè)適合于訪問(wèn)多個(gè)數(shù)據(jù)結(jié)構(gòu)的算法是不明智的,而且數(shù)據(jù)結(jié)構(gòu)由多個(gè)算法來(lái)對(duì)其進(jìn)行同種操作也是多余的。

此后,面向?qū)ο蟮某绦蛟O(shè)計(jì)方法被提出并獲得了發(fā)展。

2.面向?qū)ο笳Z(yǔ)言的特征

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,算法與數(shù)據(jù)結(jié)構(gòu)被捆綁成一個(gè)“類(lèi)”,類(lèi)進(jìn)一步具體化為實(shí)物,即對(duì)象。于是程序被進(jìn)一步理解為:程序=(對(duì)象+對(duì)象+…),對(duì)象=(算法+數(shù)據(jù)結(jié)構(gòu))?,F(xiàn)實(shí)世界本身就是一個(gè)對(duì)象的世界,任何對(duì)象都通過(guò)它的屬性和行為體現(xiàn)出來(lái)。即程序就是許多對(duì)象在計(jì)算機(jī)中相繼表現(xiàn)的體現(xiàn)。從這樣的角度看問(wèn)題,我們?cè)陂_(kāi)發(fā)程序時(shí)就不用為程序功能如何實(shí)現(xiàn)而費(fèi)盡心機(jī)了,而只要通過(guò)對(duì)象的組合就可以輕易實(shí)現(xiàn)。面向?qū)ο蟪绦蛟O(shè)計(jì)思想突破了軟件思想的障礙,使得程序規(guī)模迅速擴(kuò)大,軟件產(chǎn)業(yè)得以飛速發(fā)展。面向?qū)ο蟪绦蛟O(shè)計(jì)是軟件設(shè)計(jì)方法發(fā)展的必然結(jié)果。

C++是一種流行的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。它通過(guò)類(lèi)機(jī)制,最有效地實(shí)現(xiàn)了面向?qū)ο蟮脑怼K沟梦覀兡軓恼鎸?shí)客觀的角度來(lái)理解和開(kāi)發(fā)應(yīng)用程序。因此,可以說(shuō)C++是類(lèi)機(jī)制比較完善的一種高級(jí)語(yǔ)言。

3.C++和C

C++是一種高效實(shí)用的程序設(shè)計(jì)語(yǔ)言,它同時(shí)兼有面向過(guò)程和面向?qū)ο蟪绦蛟O(shè)計(jì),因而得到了廣泛應(yīng)用。C++從C進(jìn)化而來(lái),是C語(yǔ)言的超集,C中的語(yǔ)法規(guī)則在C++中都適用。C++也可以說(shuō)是C的增強(qiáng)版,所以在名字中使用了C語(yǔ)言中的自增量運(yùn)算符++,而形成C++。但是,C++并不是C語(yǔ)言的簡(jiǎn)單擴(kuò)充,而是一個(gè)本質(zhì)性的變革。它在繼承C語(yǔ)言?xún)?yōu)點(diǎn)的基礎(chǔ)上,提供了面向?qū)ο蟪绦蛟O(shè)計(jì)的能力。C++是一門(mén)優(yōu)秀的、高效實(shí)用的、具有發(fā)展前途的程序設(shè)計(jì)語(yǔ)言。學(xué)好C++,很容易觸類(lèi)旁通地學(xué)好其他程序設(shè)計(jì)軟件。

1.輸入與輸出

C++有許多自己的特性,其中之一是將輸入/輸出改進(jìn)為I/O流。例如,cout<<2就是將2這個(gè)數(shù)據(jù)送給顯示器,cin>>a就是從鍵盤(pán)讀取數(shù)據(jù)賦給a。cout和cin都是關(guān)鍵字。標(biāo)識(shí)符cout代表屏幕,運(yùn)算符<<用于把內(nèi)容放進(jìn)輸出流,即將數(shù)據(jù)送到顯示器。若有語(yǔ)句cout<<"IlearnC++";,執(zhí)行該語(yǔ)句之后就能在顯示器上看到“IlearnC++”。1.2C++入門(mén)輸出后若要換行可以使用語(yǔ)句cout<<“IlearnC++”<<endl;,endl的作用是換行并刷新輸出流。用cout<<的方式輸出數(shù)據(jù)時(shí),對(duì)于基本數(shù)據(jù)類(lèi)型,它能自動(dòng)匹配一種合適的類(lèi)型輸出,所以輸出時(shí)不必再指出數(shù)據(jù)類(lèi)型。標(biāo)識(shí)符cin代表鍵盤(pán),提取運(yùn)算符>>用于把內(nèi)容放進(jìn)輸入流,即把從鍵盤(pán)敲入的數(shù)據(jù)送到給定的單元中。

C++規(guī)定,凡使用輸出流和輸入流的程序,要用#include<iostream.h>包含頭文件。這部分內(nèi)容詳見(jiàn)第8章。

2.標(biāo)識(shí)符

在C++中,將由程序員命名的各名稱(chēng),如變量名a等都稱(chēng)為標(biāo)識(shí)符。在命名標(biāo)識(shí)符時(shí)要注意幾點(diǎn):第一,標(biāo)識(shí)符要以字母或下劃線開(kāi)頭,后接由字母、數(shù)字或下劃線組成的字符序列;第二,命名標(biāo)識(shí)符時(shí),不能使用已被系統(tǒng)定義的關(guān)鍵字;第三,可用大小寫(xiě)字符來(lái)區(qū)別不同的標(biāo)識(shí)符。

表1-1列出了C++中的關(guān)鍵字。表1-1C++中的關(guān)鍵字1.3.1從結(jié)構(gòu)到類(lèi)

有一個(gè)學(xué)生的部分信息如圖1-1所示,在C中可以用結(jié)構(gòu)體類(lèi)型描述如下:

structstudent

{longnum;

charname[20];

intscore;

};

structstudentstu;1.3類(lèi)的基本概念圖1-1結(jié)構(gòu)組成上面的描述在C中定義了一個(gè)student的結(jié)構(gòu)體,并定義了一個(gè)該結(jié)構(gòu)體的變量stu。在C++中也有結(jié)構(gòu)的概念,如:

structstudent

{longnum;

charname[20];

intscore;

};

studentstu;比較這兩種方法,對(duì)于同樣的定義,C++的描述只不過(guò)少了關(guān)鍵字struct。在C++中我們認(rèn)為該描述定義了一個(gè)student的結(jié)構(gòu)體,并定義了一個(gè)該結(jié)構(gòu)體的對(duì)象stu。stu就是一個(gè)學(xué)生對(duì)象,學(xué)生是人,當(dāng)然會(huì)有一些行為。為了表現(xiàn)行為,在C++中的結(jié)構(gòu)體內(nèi)還可以定義函數(shù),用它可以實(shí)現(xiàn)某一功能。接上題描述一個(gè)學(xué)生的情況,并增加學(xué)習(xí)行為,在C++中用結(jié)構(gòu)體的方法可描述如下:

structstudent

{longnum;

charname[20];

intscore;

voidStudy();

};

studentJonas;該描述定義了一個(gè)名叫student的結(jié)構(gòu)體,并定義了一個(gè)該結(jié)構(gòu)體的對(duì)象Jonas。于是就可用Jonas.score=5;進(jìn)行賦值,用Jonas.Study()來(lái)調(diào)用成員函數(shù)表現(xiàn)行為。這兩個(gè)語(yǔ)句的語(yǔ)意可描述為:Jonas得到了5個(gè)學(xué)分,Jonas去學(xué)習(xí)。

在C++的結(jié)構(gòu)體中可以定義函數(shù)。我們將結(jié)構(gòu)內(nèi)定義的函數(shù)稱(chēng)為成員函數(shù),通過(guò)它可以實(shí)現(xiàn)某種功能來(lái)表現(xiàn)行為。在C中,結(jié)構(gòu)體內(nèi)的成員是公開(kāi)的,在結(jié)構(gòu)體外部通過(guò)變量名引導(dǎo)就可以對(duì)成員進(jìn)行訪問(wèn),這樣就很難保證數(shù)據(jù)的安全。為了能對(duì)結(jié)構(gòu)體內(nèi)成員的訪問(wèn)有所限制,C++中引入了“類(lèi)”的概念。所謂“類(lèi)”,是把事物的數(shù)據(jù)和與之相關(guān)的功能封裝在一起,形成一種特殊的結(jié)構(gòu)體,用以表示真實(shí)事物的一種抽象概念。在C++中定義類(lèi)的關(guān)鍵字用class而不用struct。C++中的類(lèi)是struct的一種形式。類(lèi)是C++語(yǔ)言中的一種數(shù)據(jù)類(lèi)型,它既可以包含描述事物特征的數(shù)據(jù),又可以包含表現(xiàn)這些特征的函數(shù)。在類(lèi)中的成員允許有public(公有的)、private(私有的)和protected(保

護(hù)的)。

在面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,程序是通過(guò)對(duì)象的表現(xiàn)來(lái)實(shí)現(xiàn)的,而對(duì)象的所有行為和特征都是由類(lèi)來(lái)決定的。因此要建立對(duì)象,首先必須定義類(lèi)。定義類(lèi)的一般方法如下:

class類(lèi)名

{private: //標(biāo)識(shí)成員的性質(zhì)

私有成員

public:

//標(biāo)識(shí)成員的性質(zhì)

公有成員

};關(guān)鍵字class和類(lèi)名組成類(lèi)頭,類(lèi)名的命名要符合標(biāo)識(shí)符的規(guī)定,通常第一個(gè)字母要大寫(xiě)。類(lèi)的定義體用“{”和“}”括住,可將它稱(chēng)為類(lèi)體。類(lèi)體中是類(lèi)成員表。右括號(hào)后加分號(hào)“;”,作為類(lèi)定義的結(jié)束標(biāo)記。一個(gè)類(lèi)就是由用戶定義的一個(gè)新增類(lèi)型,這個(gè)類(lèi)型并不“抽象”,我們對(duì)它的使用就像使用int和float一樣簡(jiǎn)單。在上面的定義方法中,“//”之后的文字是注釋?zhuān)瑢?duì)程序的執(zhí)行不起作用,但可以幫助理解程序。在上面的描述中,類(lèi)名Student代表的是一個(gè)新增數(shù)據(jù)類(lèi)型,可以通過(guò)它來(lái)定義對(duì)象。對(duì)象的定義方法與我們用內(nèi)部類(lèi)型定義變量的方法一樣。例如:

voidmain()

{StudentJonas;}//定義了一個(gè)Student類(lèi)的對(duì)象Jonas

引入類(lèi)的概念之后,我們可以把學(xué)生信息重新描述為:定義了一個(gè)學(xué)生類(lèi)Student,并在主函數(shù)中定義了一個(gè)該類(lèi)的對(duì)象Jonas。1.3.2屬性與行為

類(lèi)的描述主要由屬性和行為兩部分組成。屬性用于描寫(xiě)個(gè)性,由數(shù)據(jù)成員來(lái)完成。行為用于實(shí)現(xiàn)某一功能,由成員函數(shù)來(lái)完成。行為(函數(shù))publicStudy(intx)屬性(數(shù)據(jù))privatenum、name[20]、score圖1-2屬性和行為

在C++中定義類(lèi)時(shí)并不分配內(nèi)存單元,只有定義了類(lèi)的對(duì)象之后才分配內(nèi)存單元。在例1-1中定義了一個(gè)類(lèi)Student,并通過(guò)該類(lèi)定義了一個(gè)對(duì)象Jonas,這時(shí)就在內(nèi)存中開(kāi)辟了一片空間,如圖1-2所示。有了內(nèi)存空間,就可以對(duì)該空間的數(shù)據(jù)進(jìn)行存取等操作了。

用private和public可將類(lèi)的成員分為私有和公有兩個(gè)區(qū)。private區(qū)的成員具有私有性,類(lèi)的外部不能訪問(wèn)它們;public區(qū)的成員具有公有性,類(lèi)的外部可以對(duì)它們進(jìn)行訪問(wèn)。我們將private、public等稱(chēng)為訪問(wèn)控制說(shuō)明。圖1-2屬性和行為類(lèi)中的所有成員只能是成員函數(shù)或數(shù)據(jù)成員。類(lèi)的行為由成員函數(shù)來(lái)實(shí)現(xiàn),類(lèi)的特征由數(shù)據(jù)成員來(lái)表現(xiàn)。在上面的類(lèi)定義中,Student類(lèi)有學(xué)號(hào)、姓名和成績(jī)?nèi)齻€(gè)特征,有學(xué)習(xí)課程的行為,并通過(guò)學(xué)習(xí)累積學(xué)分。

在主函數(shù)中定義了一個(gè)Student類(lèi)的對(duì)象Jonas。整個(gè)學(xué)生是一個(gè)群體,是一個(gè)學(xué)生類(lèi),而Jonas是學(xué)生中的一個(gè)對(duì)象,是學(xué)生中的一員。Jonas有統(tǒng)計(jì)學(xué)分的行為,該行為是公有的,同時(shí)他還有學(xué)號(hào)、姓名、成績(jī)等私有屬性。1.3.3封裝與隱藏

1.類(lèi)的封裝

類(lèi)的封裝就是標(biāo)識(shí)成員的訪問(wèn)控制說(shuō)明,即指定某成員具有public(公有的)、private(私有的)或protected(保護(hù)的)性質(zhì)。類(lèi)的這一要求稱(chēng)為類(lèi)的封裝性。在完成了封裝后,對(duì)于說(shuō)明為public的成員,類(lèi)的外部可以對(duì)它們進(jìn)行訪問(wèn)和操作;對(duì)于私有或保護(hù)成員,類(lèi)的外部不能對(duì)它們進(jìn)行訪問(wèn),只有該類(lèi)的成員函數(shù)才有權(quán)對(duì)它們進(jìn)行訪問(wèn)。對(duì)于不指定訪問(wèn)控制說(shuō)明的成員,默認(rèn)其封裝性為private。

2.封裝的作用

類(lèi)有許多特性和方法,用戶不需要全部了解,也能很好地實(shí)現(xiàn)其功能,這就如我們并不需要了解電視機(jī)的內(nèi)部結(jié)構(gòu),只需通過(guò)一些按鈕便可使它發(fā)揮作用一樣。生產(chǎn)廠將內(nèi)部實(shí)現(xiàn)技術(shù)與外部接口自成于一體,這種自成一體性,稱(chēng)為封裝。經(jīng)過(guò)封裝,用戶通過(guò)接口使類(lèi)發(fā)揮作用,既保護(hù)了內(nèi)部元器件,又有利于技術(shù)保密。因此,封裝的作用就是有選擇地隱藏類(lèi)中的特性和方法。通過(guò)封裝有選擇地隱藏類(lèi)中的特性和方法,將類(lèi)的一些數(shù)據(jù)成員聲明為私有以及通過(guò)公有成員函數(shù)對(duì)它們進(jìn)行訪問(wèn),有助于保護(hù)它們的完整性。

C++定義的類(lèi)具有封裝性。正確的類(lèi)定義一旦建立,就可以將類(lèi)看做是完成封裝的實(shí)體,可以作為一個(gè)整體單元被使用。通過(guò)公有接口也就是成員函數(shù),對(duì)類(lèi)屬性實(shí)現(xiàn)有效的和有限的訪問(wèn),既使類(lèi)發(fā)揮了功效,又使類(lèi)得到了可靠的保護(hù),這就是封裝的作用。

在C++中,成員函數(shù)的行為是由程序員規(guī)定好的,只能完成預(yù)定的功能,其他想通過(guò)成員函數(shù)來(lái)對(duì)被封裝的數(shù)據(jù)成員進(jìn)行破壞的行為都不被理睬。這一封裝特性正是C++符合軟件工程理論的又一精妙之處。

3.封裝的目的

(1)相對(duì)于外部函數(shù)(普通函數(shù)或其他類(lèi)的成員函數(shù))而言,使類(lèi)內(nèi)部的保護(hù)和私有成員不被肆意更改。

(2)只有類(lèi)的成員函數(shù)才能訪問(wèn)保護(hù)或私有成員,使類(lèi)具有自身的維護(hù)功能。

(3)限制類(lèi)的外部接口,把類(lèi)分成兩部分,一部分是公有的,一部分是保護(hù)的。

(4)減少類(lèi)與其他代碼的關(guān)聯(lián)程度??梢灶?lèi)比一下我們家中的電腦,它由接口、鍵盤(pán)和主機(jī)箱等組成。接口和鍵盤(pán)是public的,允許我們使用,而主機(jī)箱內(nèi)是protected或private的,除維修人員以外是不能打開(kāi)的。這樣做的好處是主機(jī)箱內(nèi)部的元器件可以不被肆意拆卸,減少了許多麻煩。通過(guò)接口、鍵盤(pán)和鼠標(biāo)等,我們可以正確地使用電腦的功能。而接口、鍵盤(pán)和鼠標(biāo)的功能是有限的,對(duì)它們的使用一般不會(huì)造成主機(jī)箱內(nèi)元件的損壞。通常我們所說(shuō)的對(duì)象就是現(xiàn)實(shí)世界中的實(shí)體。比如我們每一個(gè)人就是一個(gè)對(duì)象。人有大腦、眼睛、鼻子、耳朵和手等。人還會(huì)有一些行為,如行走、工作和思考等。除了具有上面列舉的共同特性之外,每一個(gè)人還有自己的姓名、年齡和身高等。

把具有相同特性的對(duì)象進(jìn)行抽象,歸并在一起,就可以用“類(lèi)”的概念來(lái)描述。比如在描述人時(shí),先要描述人類(lèi)。首先說(shuō)明人類(lèi)是什么,然后說(shuō)一個(gè)具體的人就是其中的一員,即一個(gè)對(duì)象。這種方法用程序設(shè)計(jì)的語(yǔ)言來(lái)描述就是先定義類(lèi),然后由類(lèi)來(lái)定義對(duì)象。1.4現(xiàn)實(shí)生活中的類(lèi)與對(duì)象1.4.1類(lèi)的描述

C++使得我們能從真實(shí)客觀的角度來(lái)理解、開(kāi)發(fā)應(yīng)用程序,這就要求程序設(shè)計(jì)應(yīng)當(dāng)是現(xiàn)實(shí)世界的體現(xiàn)。

比如描述汽車(chē)類(lèi),首先區(qū)分哪些是汽車(chē)的行為,哪些是它的特征。汽車(chē)的型號(hào)、生產(chǎn)廠和發(fā)動(dòng)機(jī)等是特征,汽車(chē)的載客、行駛和制動(dòng)等是行為。因?yàn)槲覀儾幌M?chē)用戶改變型號(hào)、生產(chǎn)廠等,所以可將它們作為汽車(chē)類(lèi)的私有數(shù)據(jù)成員。汽車(chē)的價(jià)值是供人使用,因此要將汽車(chē)的載客、行駛等作為汽車(chē)類(lèi)的公有成員函數(shù)。類(lèi)的外部可以對(duì)這些公有成員函數(shù)進(jìn)行訪問(wèn),以便能表現(xiàn)它的行為。1.4.2類(lèi)與對(duì)象

現(xiàn)實(shí)世界中的對(duì)象不僅有共性也有個(gè)性。我們?nèi)绾螌F(xiàn)實(shí)世界中的對(duì)象轉(zhuǎn)化為程序中的對(duì)象呢?即對(duì)于現(xiàn)實(shí)世界中的對(duì)象,如何在程序中表現(xiàn)出來(lái)呢?在本節(jié)中就要解決這個(gè)問(wèn)題。程序中的對(duì)象也就是編程對(duì)象,它就是將對(duì)象的特性與行為組合在一起得到的結(jié)果。

1.編程中的類(lèi)

程序設(shè)計(jì)的目的就是要解決實(shí)際問(wèn)題。下面描述現(xiàn)實(shí)生活中的對(duì)象——人,并將他轉(zhuǎn)換為編程對(duì)象。類(lèi)是一個(gè)抽象的概念,對(duì)象才是一個(gè)客觀的實(shí)體。例如,人類(lèi)就是一個(gè)類(lèi),它可以有具體實(shí)物,就是人,這個(gè)人就是人類(lèi)的對(duì)象。人有身高體重,并占有一定的空間。

2.編程中的對(duì)象

現(xiàn)實(shí)生活中的對(duì)象是生產(chǎn)、制造或生養(yǎng)出來(lái)的,程序中的對(duì)象要由類(lèi)來(lái)定義。在程序中要定義對(duì)象,先要定義類(lèi),再通過(guò)類(lèi)定義對(duì)象。類(lèi)對(duì)所定義對(duì)象的數(shù)量并沒(méi)有限制。

現(xiàn)在用程序設(shè)計(jì)語(yǔ)言來(lái)描述一個(gè)學(xué)生對(duì)象。

3.代碼解釋

在例1-2中,Student就是一個(gè)類(lèi),它具有所有學(xué)生的共同特征和行為。該類(lèi)有Student、Study和Display三個(gè)成員函數(shù),它們就是Student類(lèi)對(duì)象所具有的行為。函數(shù)的具體實(shí)現(xiàn)就是它的行為能力。目前三個(gè)函數(shù)所做的事分別為初始化、累積學(xué)分和顯示成績(jī)。該類(lèi)有num、name和score三個(gè)成員,它們就是Student類(lèi)對(duì)象的特征,分別描述了學(xué)號(hào)、姓名和成績(jī),稱(chēng)為數(shù)據(jù)成員。

publicStudent()、Study(intx)、Display()、noprivatenum、name[20]、score在main函數(shù)中用StudentJonas;?定義了一個(gè)Student類(lèi)的對(duì)象Jonas,內(nèi)存空間分配如圖1-3所示。Jonas就是學(xué)生中的一員,于是就具有Student、Study和Display的行為能力以及num、name和score特征。

在類(lèi)中,因?yàn)槌蓡T函數(shù)是public,所以在類(lèi)的外部可用對(duì)象名和分量運(yùn)算符“.”來(lái)訪問(wèn)成員,如Jonas.Display();或Jonas.no=223;。對(duì)于Jonas的private成員,就不能用對(duì)象名加分量運(yùn)算符來(lái)訪問(wèn),即若用Jonas.num=2007;?就出錯(cuò)。圖1-3結(jié)構(gòu)示意圖

4.訪問(wèn)控制

在類(lèi)的定義中,成員函數(shù)往往是類(lèi)的共性,是類(lèi)的所有對(duì)象共同具有的行為,所以將它們聲明為public,這樣便于類(lèi)的所有對(duì)象訪問(wèn)它們。也就是說(shuō),在類(lèi)的外部能指揮對(duì)象,使其完成某種操作。類(lèi)的數(shù)據(jù)成員往往是對(duì)象的個(gè)性與特征,一般聲明為private或protected。對(duì)于private或protected成員,類(lèi)的外部是不能對(duì)它們進(jìn)行訪問(wèn)的,只有通過(guò)類(lèi)的成員函數(shù)才可訪問(wèn)。在面向?qū)ο蟪绦蛟O(shè)計(jì)中,程序被描述為:程序=(對(duì)象+對(duì)象+…),即程序就是許多對(duì)象在計(jì)算機(jī)中的相繼表現(xiàn)。

對(duì)象=(算法+數(shù)據(jù)結(jié)構(gòu))表明一個(gè)對(duì)象就是一個(gè)程序?qū)嶓w。對(duì)象是由類(lèi)來(lái)定義的。1.5程序的具體實(shí)現(xiàn)1.5.1定義成員函數(shù)

C++的類(lèi)中有成員函數(shù)和數(shù)據(jù)成員兩大部分。在類(lèi)定義中,類(lèi)的行為由函數(shù)來(lái)實(shí)現(xiàn),稱(chēng)此函數(shù)為成員函數(shù)。類(lèi)的特征用非函數(shù)形式來(lái)表現(xiàn),稱(chēng)其為數(shù)據(jù)成員。將類(lèi)中函數(shù)稱(chēng)為成員函數(shù)的含義是:其一,它是類(lèi)中的成員;其二,它是函數(shù),它能訪問(wèn)類(lèi)中的所有成員。成員函數(shù)的主要任務(wù)是,實(shí)現(xiàn)對(duì)對(duì)象的數(shù)據(jù)成員的操作。成員函數(shù)建立了類(lèi)的內(nèi)部與外部有限聯(lián)系的橋梁。成員函數(shù)一般都聲明為公有的,這些公有成員函數(shù)在程序設(shè)計(jì)中被稱(chēng)為類(lèi)的接口。類(lèi)的使用者用這些接口操作類(lèi)的所有數(shù)據(jù)成員。

在C++中有兩種方法來(lái)定義成員函數(shù):在類(lèi)中直接定義成員函數(shù);分別定義,即先定義類(lèi),然后再定義成員函數(shù)。

2.分別定義

所謂分別定義,就是在定義類(lèi)之后再定義成員函數(shù)。分別定義時(shí),必須指出該成員函數(shù)屬于哪個(gè)類(lèi)。因此,定義成員函數(shù)的一般方法是:

返回類(lèi)型類(lèi)名::函數(shù)名(參數(shù)表){函數(shù)體}

其中,::稱(chēng)為域區(qū)分符。在上述代碼中用到了域區(qū)分符::,它在這里是雙目運(yùn)算符,指明該函數(shù)或數(shù)據(jù)屬于哪個(gè)類(lèi)。當(dāng)用分別定義的方法定義成員函數(shù)時(shí),就要使用域區(qū)分符。

域區(qū)分符還可作為單目運(yùn)算符使用。此時(shí)它的作用是,使得被屏蔽的全局對(duì)象在它的作用域內(nèi)重現(xiàn)。該用法是C++中新增的內(nèi)容。在C中,在全局對(duì)象(包括變量、函數(shù)等)的作用域內(nèi)一旦定義了同名的局部對(duì)象,就將全局對(duì)象屏蔽而不可見(jiàn)。在C++中我們可以用域區(qū)分符::使被屏蔽的全局對(duì)象可見(jiàn)。使用方法是,在數(shù)據(jù)或函數(shù)前加::,表示該數(shù)據(jù)或函數(shù)是全局?jǐn)?shù)據(jù)或全局函數(shù),而非成員。請(qǐng)看下面的例子。本例中定義了三個(gè)全局變量month、day和year。在它們的作用域內(nèi),函數(shù)Set中又定義了同名變量,將原變量屏蔽。所以在Set函數(shù)體中,若要訪問(wèn)數(shù)據(jù)成員,就直接給出變量名,若要訪問(wèn)被屏蔽的全局變量,就要加域區(qū)分符::。同樣地,在函數(shù)Set的作用域內(nèi),類(lèi)Tdate中又定義了同名函數(shù)Set,將原函數(shù)屏蔽。因此在成員函數(shù)Set中要訪問(wèn)被屏蔽的函數(shù)Set時(shí)就要加域區(qū)分符::。

3.接口與實(shí)現(xiàn)相分離

上面提供的兩種定義成員函數(shù)的方法在本質(zhì)上是一種方法,即類(lèi)的定義和成員函數(shù)的定義在同一個(gè)文件中。將類(lèi)的定義和其成員函數(shù)的定義分為兩個(gè)文件,然后再用包含文件建立聯(lián)系,這是目前開(kāi)發(fā)程序常用的做法。我們把類(lèi)定義看成是類(lèi)的外部接口。由于接口的連接是通過(guò)成員函數(shù)來(lái)實(shí)現(xiàn)的,因此把類(lèi)的成員函數(shù)定義看成是類(lèi)的內(nèi)部實(shí)現(xiàn)。我們稱(chēng)這一方法為接口與實(shí)現(xiàn)相分離。經(jīng)分離后,包含類(lèi)定義的部分稱(chēng)為頭文件,包含成員函數(shù)定義的部分稱(chēng)為實(shí)現(xiàn)文件。然后再用包含文件建立聯(lián)系,將它們編譯連結(jié)成一體。例1-3先建立一個(gè)名叫stu.h的頭文件,將所有類(lèi)定義都放入其中,再建立一個(gè)名叫stu.cpp的實(shí)現(xiàn)文件,并用#include“stu.h”將頭文件包含到實(shí)現(xiàn)文件內(nèi)。

在頭文件中用到的#ifndefSTUD_H、#defineSTUD_H…#endif是預(yù)處理代碼,其作用是防止該頭文件被多次包含。在開(kāi)發(fā)一個(gè)大型程序時(shí)常使用該方法。

4.接口與實(shí)現(xiàn)相分離的評(píng)價(jià)

接口與實(shí)現(xiàn)相分離有利于軟件公司將類(lèi)庫(kù)作為商品。在該商品中只提供頭文件和目標(biāo)模塊,并不公開(kāi)內(nèi)部實(shí)現(xiàn)。這種技術(shù)被稱(chēng)為信息隱藏。用戶只要用包含頭文件的方法就能使用該類(lèi)庫(kù),這樣既有效地保護(hù)了開(kāi)發(fā)者的知識(shí)產(chǎn)權(quán),又實(shí)現(xiàn)了資源共享。我們推薦采用接口與實(shí)現(xiàn)相分離的方法。這樣做的好處主要有:

(1)保護(hù)知識(shí)產(chǎn)權(quán)。通過(guò)分離可將類(lèi)內(nèi)部的特性和方法隱藏起來(lái),用戶不需要知道也無(wú)法知道類(lèi)是如何工作的,只需要了解其外特性和外部操作就能有效并安全地使用類(lèi),使其發(fā)揮功效,實(shí)現(xiàn)共享與保密的統(tǒng)一。

(2)高效與方便。當(dāng)由于某種原因需要改變類(lèi)的內(nèi)部私有實(shí)現(xiàn)代碼時(shí),只要接口不變就不會(huì)影響到類(lèi)的用戶。1.5.2調(diào)用成員函數(shù)

在類(lèi)定義中聲明的成員名以及類(lèi)的數(shù)據(jù)成員或成員函數(shù),都屬于類(lèi)的作用域。在類(lèi)的作用域內(nèi),類(lèi)的成員之間可以直接互訪。在類(lèi)的作用域外只能訪問(wèn)公有成員,且要有對(duì)象名引導(dǎo)。一般情況下,成員函數(shù)總是聲明為公有,數(shù)據(jù)成員聲明為私有或保護(hù)。

對(duì)于實(shí)施封裝后的類(lèi),外部不能對(duì)其保護(hù)或私有成員進(jìn)行直接訪問(wèn)。對(duì)類(lèi)中數(shù)據(jù)成員的訪問(wèn),要通過(guò)成員函數(shù)來(lái)完成。成員函數(shù)是類(lèi)的接口。成員函數(shù)屬于某個(gè)類(lèi)或?qū)ο?,所以?dāng)要調(diào)用成員函數(shù)時(shí)必須指明隸屬關(guān)系,即要用類(lèi)或?qū)ο髞?lái)引導(dǎo),或者用指向某對(duì)象的指針來(lái)引導(dǎo)。

調(diào)用成員函數(shù)分為在類(lèi)的內(nèi)部調(diào)用和在類(lèi)的外部調(diào)用兩種情況。在類(lèi)的內(nèi)部調(diào)用是指在成員函數(shù)中調(diào)用同一類(lèi)的另一個(gè)成員函數(shù),此時(shí)可以直接進(jìn)行,不需要使用點(diǎn)“·

”運(yùn)算符。在類(lèi)的外部調(diào)用成員函數(shù)的方法可有如下幾種。

1.用對(duì)象引導(dǎo)

用對(duì)象引導(dǎo)調(diào)用成員函數(shù)的形式類(lèi)似于訪問(wèn)一個(gè)結(jié)構(gòu)體對(duì)象的分量,先指明對(duì)象,再指明成員,即以對(duì)象加上點(diǎn)“·

”操作符和成員函數(shù)的形式訪問(wèn),如下面例1-4中的t1.Set(2002,1,28)。

2.用類(lèi)名引導(dǎo)

采用類(lèi)名引導(dǎo)的方法調(diào)用成員函數(shù)要求類(lèi)名與域區(qū)分符結(jié)合使用,即類(lèi)名::成員函數(shù)。用這種方法訪問(wèn)類(lèi)的成員函數(shù)的具體內(nèi)容將在第3章和第7章中介紹。

3.用指針訪問(wèn)

通過(guò)類(lèi)的指針也可以訪問(wèn)成員函數(shù),方法是:先定義一個(gè)類(lèi)的指針,用指針指向?qū)ο螅缓笥迷撝羔樥{(diào)用成員函數(shù),如例1-4中的p->play()。

4.用引用傳遞

用引用傳遞來(lái)訪問(wèn)成員函數(shù)是指用對(duì)象的引用來(lái)調(diào)用成員函數(shù),這看上去和使用自身的簡(jiǎn)單情況一樣。這部分內(nèi)容將在第4章中介紹。運(yùn)行結(jié)果:

Thedateis:2002 1 28

Thedateis:2002 11 5

Thedateis:2002 1 28

w=2

Thedateis:2002 11 5

在例1-4中定義了Tdate類(lèi)并對(duì)它進(jìn)行了封裝;定義了一個(gè)與Tdate類(lèi)成員函數(shù)同名的普通函數(shù)Set。例1-4演示了三種成員函數(shù)的訪問(wèn)方法。第一種,通過(guò)對(duì)象名,如t1.Set(2002,1,28)和t2.Set(2002,11,5);第二種,通過(guò)類(lèi)的指針,如p->play();第三種,在類(lèi)的成員函數(shù)內(nèi)訪問(wèn)該類(lèi)成員函數(shù),如Tdate::Set()中的play()。在類(lèi)的成員函數(shù)中對(duì)類(lèi)的所有成員的訪問(wèn)沒(méi)有限制。

普通函數(shù)Set不能訪問(wèn)Tdate類(lèi)中的private成員,但可以訪問(wèn)類(lèi)中的公有數(shù)據(jù)成員。訪問(wèn)方法為對(duì)象名加分量運(yùn)算符加公有成員名。如例1-4中的t2.week=18和Set()中的t.week=w。1.6.1成員函數(shù)和數(shù)據(jù)成員的關(guān)系

通過(guò)類(lèi)來(lái)創(chuàng)建一個(gè)或多個(gè)對(duì)象時(shí),這些對(duì)象都有各自所占有的空間,它們?cè)趦?nèi)存中的分布情況是:每個(gè)對(duì)象都會(huì)自動(dòng)生成一份表現(xiàn)自我特征的數(shù)據(jù)成員拷貝,并獨(dú)占某一片空間。而成員函數(shù)只有一份拷貝,它由該類(lèi)所有的對(duì)象共享。也就是說(shuō),同類(lèi)的各對(duì)象都能得到一份數(shù)據(jù)成員的拷貝,這些拷貝屬于各個(gè)對(duì)象所有,彼此之間不能共享;而成員函數(shù)僅有一份,它為各個(gè)對(duì)象所共享。

同一個(gè)類(lèi)的各對(duì)象的成員函數(shù)和數(shù)據(jù)成員的關(guān)系如圖1-4所示。1.6this指針圖1-4成員函數(shù)和數(shù)據(jù)成員的關(guān)系從圖1-4可知,當(dāng)創(chuàng)建多個(gè)對(duì)象時(shí),有多份數(shù)據(jù)成員的副本,而只有一份成員函數(shù)的副本,也就是我們常說(shuō)的一對(duì)多的關(guān)系。那么成員函數(shù)如何區(qū)分?jǐn)?shù)據(jù)成員是哪個(gè)對(duì)象的呢?1.6.2this指針的作用

某個(gè)類(lèi)定義了多個(gè)對(duì)象,為了節(jié)省空間,在該類(lèi)的各個(gè)對(duì)象中有多份數(shù)據(jù)成員的拷貝,只有一份成員函數(shù),它是各對(duì)象共有的。這唯一的一份成員函數(shù)要供該類(lèi)的所有對(duì)象共同使用,C++通過(guò)引入this指針來(lái)區(qū)分各對(duì)象的數(shù)據(jù)成員。1.6.3this指針的工作方式

每個(gè)對(duì)象都有一個(gè)指向自身的指針——this指針。在引用對(duì)象內(nèi)部成員時(shí),this指針是一個(gè)隱含的參數(shù)。關(guān)鍵字this給出了調(diào)用成員函數(shù)的對(duì)象的地址。每當(dāng)調(diào)用成員函數(shù)時(shí),編譯器會(huì)向this指針?lè)峙湔{(diào)用該函數(shù)對(duì)象的地址。在例1-4中使用t1.Set(2002,1,28);和t2.Set(2002,11,5);兩次調(diào)用同一個(gè)成員函數(shù)Set,對(duì)于數(shù)據(jù)成員month、day、year分屬于t1或t2的確認(rèn),就是通過(guò)this指針完成的。當(dāng)對(duì)某一對(duì)象操作時(shí)就有一個(gè)隱含的this指針指向該對(duì)象,所以說(shuō)在進(jìn)行t1.Set(2002,1,28);的Set函數(shù)中,隱含的t1對(duì)象的this指針起到了this->month=m;this->day=d;this->year=y;this->play();的作用。

【例1-5】this指針的作用和工作方式演示。#include<iostream.h>

classTest

{public:

voidSet(int);

voidShow(); //成員函數(shù)

private:

intx;

};

voidTest::Set(inta){x=a;}運(yùn)行結(jié)果:

x=12 this->x=12 (*this).x=12

//三種表現(xiàn)形式完全等價(jià),輸出結(jié)果一樣

x=24 this->x=24 (*this).x=24

從輸出的兩行數(shù)據(jù)可知,加與不加this,結(jié)果都一樣,它通過(guò)隱含的this指針來(lái)區(qū)分不同對(duì)象的數(shù)據(jù)成員。

this指針也可以使被屏蔽的對(duì)象重現(xiàn)。對(duì)于類(lèi)成員函數(shù)中出現(xiàn)的變量(對(duì)象)名,編譯器的查找過(guò)程是:首先在該成員函數(shù)中尋找匹配,接著在類(lèi)成員中尋找匹配,然后考慮在該成員函數(shù)定義之前的名字空間域中尋找匹配。運(yùn)行結(jié)果:

x=6

由于在Test函數(shù)中定義了局部變量x,因此執(zhí)行x=8時(shí)編譯器首先匹配到了局部變量x,于是x=8就作用到了局部變量x。若要使其作用到類(lèi)數(shù)據(jù)成員x,就要用this->x。要注意this指針不是一個(gè)常規(guī)的變量,不能取得this的地址或者給它賦值。1.7.1作用域

類(lèi)的作用域是指類(lèi)定義和相應(yīng)的成員函數(shù)定義的作用范圍。在該范圍內(nèi),一個(gè)類(lèi)中的成員之間可以相互訪問(wèn)。在類(lèi)的成員函數(shù)之外對(duì)類(lèi)的數(shù)據(jù)進(jìn)行訪問(wèn)是有限制的。

1.在成員函數(shù)內(nèi)部

在成員函數(shù)內(nèi)部,對(duì)該類(lèi)的數(shù)據(jù)成員或成員函數(shù)的訪問(wèn)沒(méi)有什么限制與不同。1.7作用域、可見(jiàn)性及命名規(guī)則

2.在成員函數(shù)外部

在類(lèi)的成員函數(shù)之外對(duì)類(lèi)的數(shù)據(jù)成員進(jìn)行訪問(wèn)是有限制的。對(duì)于private或protected的數(shù)據(jù)成員,只能通過(guò)成員函數(shù)進(jìn)行訪問(wèn)。對(duì)于public的數(shù)據(jù)成員,可以用Jonas.x進(jìn)行直接訪問(wèn)。按上面的類(lèi)和成員函數(shù)的定義,可以添加main函數(shù)如下:voidmain()

{Student Jonas; //定義Student類(lèi)的對(duì)象Jonas

Jonas.x=6; //公有成員可以進(jìn)行直接訪問(wèn)

Jonas.StudyA(5);

//私有成員只能通過(guò)成員函數(shù)進(jìn)行有限訪問(wèn)

}1.7.2可見(jiàn)性

類(lèi)的作用域確定了變量名或者函數(shù)名等標(biāo)識(shí)符的可見(jiàn)性,當(dāng)標(biāo)識(shí)符在作用域內(nèi)可見(jiàn)時(shí),就可以使用該標(biāo)識(shí)符。但是當(dāng)成員名與程序中的其他變量名或者函數(shù)名同名時(shí),就要用下面的方法進(jìn)行訪問(wèn)。

1.同名的局部變量的可見(jiàn)性

如果在成員函數(shù)中定義了同名的局部變量,則將原變量屏蔽,即不可訪問(wèn)原變量。在本例中,Student類(lèi)的成員函數(shù)Study可以訪問(wèn)Student類(lèi)的私有數(shù)據(jù)成員num,但是在Study中又定義了同名的局部變量num,此時(shí)將原變量num屏蔽而使其不可訪問(wèn),即使加上域區(qū)分符也不行,因?yàn)閚um不是全局?jǐn)?shù)據(jù),所以::num=123非法。正確的方法是:Student::num=123或this->num=123。

2.類(lèi)名可見(jiàn)性

如果一個(gè)非類(lèi)名隱藏了類(lèi)名,則類(lèi)名通過(guò)加前綴class即可見(jiàn)。

voidfun()

{intStudent; //定義一個(gè)變量Student,是變量名而非類(lèi)名

classStudentstu;//定義一個(gè)對(duì)象stu,非類(lèi)名隱藏了類(lèi)名

Student=8; //對(duì)變量賦值

}在本例中,在fun函數(shù)之前已經(jīng)定義了Student類(lèi),而在fun內(nèi)又將Student定義為變量名。這在語(yǔ)法上是成立的,其實(shí)際效果是這個(gè)變量名隱藏了類(lèi)名,使類(lèi)名不可見(jiàn)。要使類(lèi)名可見(jiàn),就要加前綴class。

3.非類(lèi)名可見(jiàn)性

如果一個(gè)類(lèi)名隱藏了一個(gè)非類(lèi)名,則用一般作用域規(guī)則即可。

intStudent;

//全局變量

voidfun()

{

classStudent //定義一個(gè)局部類(lèi)

{inta;};

Studentstu; //定義一個(gè)對(duì)象stu

::Student=8;

//對(duì)全局變量賦值,要加前綴域區(qū)分符

}在本例中,類(lèi)名Student隱藏了全局變量名Student,對(duì)變量的訪問(wèn)要加域區(qū)分符。這個(gè)Student類(lèi)屬于函數(shù)中定義的局部類(lèi),它的成員函數(shù)必須在類(lèi)定義內(nèi)部定義。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,這種情況很少出現(xiàn)。1.7.3命名規(guī)則

C++中要求一個(gè)名字必須有唯一的作用域,因此就存在有關(guān)命名的規(guī)則。這些規(guī)則包括:

(1)一個(gè)名字不能同時(shí)指定為兩種類(lèi)型。如:

??classStudent

{…};

typedefintStudent;

//error,把Student同時(shí)定義為類(lèi)類(lèi)型和整型

因?yàn)閠ypedef并沒(méi)有創(chuàng)建新的類(lèi)型,所以Student同時(shí)被指定為兩種類(lèi)型。

(2)類(lèi)名不能重名。

(3)非類(lèi)名(常量名、變量名、函數(shù)名、對(duì)象名和枚舉成員名)不能同名。如:

Studentstu;

voidstu()

//error,函數(shù)名同對(duì)象名

{…}1.8C++程序結(jié)構(gòu)1.8.1類(lèi)庫(kù)的構(gòu)成

一個(gè)商業(yè)性C++類(lèi)庫(kù)包括類(lèi)定義和成員函數(shù)定義。類(lèi)定義以頭文件的方式提供,成員函數(shù)則以代碼的方式提供。該方式以一定的計(jì)算機(jī)硬件或操作系統(tǒng)為背景編譯實(shí)現(xiàn)。

在設(shè)計(jì)類(lèi)時(shí)要考慮到封裝,往往把數(shù)據(jù)成員作為私有或保護(hù)的,而將成員函數(shù)作為公有的。需要多少數(shù)據(jù)成員,主要由參加運(yùn)算的數(shù)據(jù)量來(lái)決定。

面向?qū)ο髴?yīng)用程序設(shè)計(jì)方法常常能夠減少函數(shù)調(diào)用所需傳遞的參數(shù)個(gè)數(shù)。這一優(yōu)點(diǎn)得益于這樣一個(gè)事實(shí):既將數(shù)據(jù)成員和成員函數(shù)封裝在類(lèi)的內(nèi)部,又賦予了成員函數(shù)訪問(wèn)數(shù)據(jù)成員的權(quán)利。1.8.2程序開(kāi)發(fā)

C++的程序設(shè)計(jì)方法是:首先要設(shè)計(jì)類(lèi),對(duì)于想要實(shí)現(xiàn)的各功能,可添加成員函數(shù)并在函數(shù)體內(nèi)完成功能的設(shè)計(jì);然后再定義對(duì)象,通過(guò)對(duì)象來(lái)調(diào)用成員函數(shù),使該對(duì)象表現(xiàn)出所需行為。

【例1-7】演示一個(gè)完整的程序開(kāi)發(fā)過(guò)程。

【例1-8】建立一個(gè)計(jì)算類(lèi),用面向?qū)ο蟪绦蛟O(shè)計(jì)的觀點(diǎn)實(shí)現(xiàn)三項(xiàng)要求:已知月球上的物體重量是地球上的1/17,編寫(xiě)程序計(jì)算在地球上重量數(shù)為1~100(間隔為10)的物體在月球上的對(duì)應(yīng)重量數(shù);編寫(xiě)程序求出1到X之間的所有素?cái)?shù);顯示計(jì)算結(jié)果。方法二:添加可選擇操作菜單。若選擇1就計(jì)算1~100之間地球與月球上的物體重量數(shù)對(duì)應(yīng)關(guān)系;若選擇2就求出1~100之間的素?cái)?shù);若選擇3就輸出結(jié)果。

//cou.h類(lèi)頭文件名,類(lèi)的外部接口

#ifndefCOU_H

#defineCOU_H

classCount

{private://cou.cpp類(lèi)的內(nèi)部實(shí)現(xiàn)

#include"cou.h"

#include<iostream.h>

boolCount::Begin()

{charch;

cout<<"1.countweight\n";

cout<<"2.countdata\n";

cout<<"3.countshow\n";

cout<<"Chooseone(qtoquit):";

cin>>ch;

if(ch<'1'||ch>'3'&&ch!='q') //選擇q就退出通過(guò)以上兩例可以看出,面向?qū)ο蟪绦蛟O(shè)計(jì)包含類(lèi)庫(kù)開(kāi)發(fā)和應(yīng)用程序設(shè)計(jì)兩個(gè)環(huán)節(jié),其中的大量工作就是類(lèi)庫(kù)開(kāi)發(fā),應(yīng)用程序設(shè)計(jì)要盡量簡(jiǎn)單明了。在定義類(lèi)時(shí),要將所需的屬性(數(shù)據(jù)成員)和行為(成員函數(shù))加入其中。在應(yīng)用程序設(shè)計(jì)時(shí),就由類(lèi)來(lái)定義對(duì)象并讓對(duì)象表現(xiàn)自己(調(diào)用成員函數(shù))。例1-8中的程序片段可以用圖1-5表示。

圖1-5中將程序分成三個(gè)模塊。用戶代碼放在第三個(gè)文件user.cpp中。在cou.cpp和user.cpp中的代碼共享由cou.h提供的界面信息,除此之外這兩個(gè)文件就是互不相關(guān)的,可以分別編譯。分別編譯在實(shí)際開(kāi)發(fā)應(yīng)用程序中是相當(dāng)重要的,它可以幫助我們更好地實(shí)現(xiàn)模塊化。圖1-5程序結(jié)構(gòu)●?C++是C的超集,C中可用的語(yǔ)法規(guī)則在C++中都可用。

●?在面向?qū)ο蟪绦蛟O(shè)計(jì)中,程序被描述為:對(duì)象=(算法+數(shù)據(jù)結(jié)構(gòu)),程序=(對(duì)象+對(duì)象+…)。

●?C++是一種流行的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。它通過(guò)類(lèi)機(jī)制,最有效地實(shí)現(xiàn)了面向?qū)ο蟮脑?。它使得我們能從真?shí)生活的角度來(lái)理解、開(kāi)發(fā)應(yīng)用程序。

●?類(lèi)是對(duì)現(xiàn)實(shí)世界中的實(shí)體進(jìn)行抽象的結(jié)果。類(lèi)是一個(gè)抽象的概念,是一個(gè)抽象的數(shù)據(jù)類(lèi)型。本章要點(diǎn)●?定義類(lèi)由關(guān)鍵字class開(kāi)始,后加類(lèi)名和用“{”及“}”括住的類(lèi)定義體,最后加“;”。

●?類(lèi)名要符合標(biāo)識(shí)符的命名規(guī)定。建議其第一個(gè)字母要大寫(xiě),以區(qū)分類(lèi)名和對(duì)象名。

●?對(duì)象是一個(gè)客觀的實(shí)體,是類(lèi)的一個(gè)實(shí)例。

●?對(duì)象的特性:對(duì)象是類(lèi)的一個(gè)實(shí)例,它具有成員函數(shù)和數(shù)據(jù)成員。其中成員函數(shù)表現(xiàn)了對(duì)象的行為

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論