1. 程式人生 > >面向物件思想----不看後悔!

面向物件思想----不看後悔!

面向物件思想----不看後悔!

前言: 
整理這份資料的目的是為了幫助朋友們能夠更直觀的理解面向物件的程式設計。讓後來者能夠少走一些彎路。但其中不免有許多漏洞及錯誤,也還

請前輩提出寶貴的更改意見,畢竟交流會讓我們不斷的進步。 
技術是日新月異的,他不會等待你的成長。技術要拿出來於別人交流,自己學是自己主觀意識上的理解,有對有錯!交流會讓進步變得更快。

我認為如果計算機 的體系結構不發生革命性的變化,我們現在所應用的程式語言也就百變不離奇蹤了!學程式設計學的是什麼?思想!精通一門編

程語言(最好是面向物件的語言)後再去 搞其他的程式語言,你會發現過程是如此的行雲流水!為什麼?你已經把程式設計的思想掌握了,再去學

其他的,無非是學習一種新的語法格式了。 
我在這裡並不是和你討論怎麼去用C++或JAVA,也不是和你討論怎麼去學他們,我要和你討論的是怎麼去理解面向物件。其中主要會涉及到“類

、物件、 繼承、屬性、方法、靜態、過載、隱藏、重構、宣告、定義、初始化、賦值等”其中有許多相關技術我只會一代而過,讓你有一種到

此一遊的意味我就達到目的了, 而更詳細的技術內幕,就請參考其他相關書籍而深入研究吧!因為我只是在和你探討如何去更好的理解面向對

象! 
如何去提高效率?重複使用資源,把別人的東西拿來就用。這是很不錯的主意!而對於你來說,最大的資源就是信心以及積極性!好,打起精

神來,讓我們一同到面向物件的程式設計中去尋幽訪勝吧! 
注:文章中所有程式例項我都使用JAVA寫的,當然在C++中也就大同小異了了,不同的地方我會指出! 
注:文章中的正文文字用黑色,說明文字用藍色,強調文字用橙色,批改文字用紅色!

正文:

1.基本概念: 
1.1 類與物件的初探 
要我說,無論是面向過程的語言也好,面向物件的語言也罷,我首先要給他講的都是類和物件!--------“這個世界是由什麼組成的?”這個

問題如果 讓不同的人來回答會得到不同的答案。如果是一個化學家,他也許會告訴你“還用問嘛?這個世界是由分子、原子、離子等等的化學

物質組成的”。如果是一個畫家 呢?他也許會告訴你,“這個世界是由不同的顏色所組成的”。……呵呵,眾說紛紜吧!但如果讓一個分類學

家來考慮問題就有趣的多了,他會告訴你“這個世界是 由不同型別的物與事所構成的”好!作為面向物件的程式設計師來說,我們要站在分類學家

的角度去考慮問題!是的,這個世界是由動物、植物等組成的。動物又分為單 細胞動物、多細胞動物、哺乳動物等等,哺乳動物又分為人、大

象、老虎……就這樣的分下去了! 
現在,站在抽象的角度,我們給“類”下個定義吧!我的意思是,站在抽象的角度,你回答我“什麼是人類?”首先讓我們來看看人類所具有

的一些特徵,這個 特徵包括屬性(一些引數,數值)以及方法(一些行為,他能幹什麼!)。每個人都有身高、體重、年齡、血型等等一些屬

性。人會勞動、人都會直立行走、人都會 用自己的頭腦去創造工具等等這些方法!人之所以能區別於其它型別的動物,是因為每個人都具有人

這個群體的屬性與方法。“人類”只是一個抽象的概念,它僅僅 是一個概念,它是不存在的實體!但是所有具備“人類”這個群體的屬性與方

法的物件都叫人!這個物件“人”是實際存在的實體!每個人都是人這個群體的一個對 象。老虎為什麼不是人?因為它不具備人這個群體的屬

性與方法,老虎不會直立行走,不會使用工具等等!所以說老虎不是人! 
由此可見-------類描述了一組有相同特性(屬性)和相同行為(方法)的物件。在程式中,類實際上就是資料型別!例如:整數,小數等等。

整數也有 一組特性和行為。面向過程的語言與面相物件的語言的區別就在於,面向過程的語言不允許程式設計師自己定義資料型別,而只能使用程

序中內建的資料型別!而為了模 擬真實世界,為了更好的解決問題,往往我們需要建立解決問題所必需的資料型別!面向物件程式設計為我們提供

瞭解決方案。

1.2 內建資料型別與函式: 
計算機程式在儲存資料時必須跟蹤3個基本屬性為: 
1. 資訊儲存在何處; 
2. 儲存的值是多少; 
3. 儲存的資訊是什麼型別的; 
讓我們來看看程式語言的內建資料型別都有哪些!(呵呵,這個不大好說,因為每門語言都有自己獨特的資料型別,但這畢竟是少數,比如在

JAVA中有 byte型別的資料,而在C++中就沒有,希望你能舉一反三!)比如整數”int ”,浮點型別的資料”float”!字串”String”,以

及陣列還有結構體等等。然而在寫程式的時候,根據需要我們會建立一個型別的變數或常量,例 如:由於我們需要建立一個整形的變數i為5,

我們就可以這樣做,int i = 5;而根據需要我很有可能改變i的值,也就是從新給它賦值,比如讓它等與6,就可以在所需的地方改成i = 6;由

此我們知道,在“值”上可以發生變化的量就叫變數。不會發生變化的量就叫做常量了,在C++中用count關鍵字來宣告,而在JAVA中則使用

final關鍵字來宣告。由於不同語言的宣告格式不一樣,這裡就不做一一介紹了,詳細的內容清查閱相關書籍! 
在這裡我們主要討論一下函式,我們可以把函式想象成一個“實現某種特定功能的黑匣子”-------這個功能是由你來設定的,舉個例子來說:

現在我問 你“2+3等於多少”?我相信你能很快的回答我等於5。讓我們來分析分析這句話包含什麼資訊!首先我要把你的大腦想象成是一個黑

匣子,我並不知道也沒有必 要知道你的大腦是如何工作的(也就是怎麼運算的),我關心的只是我傳給你的是什麼資訊?你對資訊做了哪些處

理? 以及你返回給我的是什麼資訊?需要提醒你一下的是每個方法都會返回一個資訊給呼叫者的,除了建構函式外(稍候我會作詳細的介紹)

。我現在需要把自己當作是 一名程式設計師,而你呢?當然就是計算機了!計算即可沒有人那麼聰明,它只會按事先約好的特定的格式執行,我想

讓它具有如上所述的功能,我就要先定義這個黑匣 子!首先我要告訴這個黑匣子會有兩個整數值給你(這就是所謂的引數,是程式設計師需要給黑

匣子的資訊),然後就要定義這個黑匣子內部實現這兩個整數相加的運算 (這就是黑匣子對資料所做的加工,根據需要,你可以做任何的加工

。)。最後再標註它返回給我一個同樣是整型的數值(這是黑匣子返回給程式設計師的資訊)。一個 函式就這樣定義完了,讓我們來看看書寫格式

int addnum(int x,int y){ 
return x+y; 
}

具體的含義是這樣的:

int /*返回值型別*/ addnum /*方法(黑匣子)名稱*/ (int x,int y/*傳入的引數*/){ 
return x+y; /*內部是想方法(實現相加運算,)並用return返回給呼叫者結果*/ 
}

首先請注意上明的“return”語句!return 關鍵字的含義是向呼叫者返回緊跟在它後面的資訊!就像上面一樣,因為我問你,你才會回答我,

如果我不問你,你就不用回答我的!在計算機中也一樣,定義好這 個函式在哪裡呼叫呢?我只能告訴你,哪裡需要就在哪裡呼叫!當然,你可

以根據需要去更改引數、返回值以及內部實現,具體到如何定義如何呼叫你只好去參考相 關的資料了!在這裡我只是給你一個思想! 
有時你會遇到這樣的問題,我讓你記住,我的年齡是20歲!從字面上理解,你並沒有給我返回資訊!然而事實上,你確實給我返回了資訊,信

息的內容是“無資訊,也就是無返回值型別void”。具體的程式如下:

int myAge = 0; 
int a=20; 
void remAge(int a){ 
myAge=a; 
}

具體的函式說明如下:

int myAge =0; //定義並初始化我的年齡為0; 
int a=20; /*定義變數a等於20*/ 
void /*返回值型別為無返回值型別*/ remAge /*函式名稱*/(int a /*傳入的引數*/){ 
myAge=a; //內部實現方法,注意,沒有return返回!!! 
}

關於函式的話題還有很多很多,這裡就不一一介紹了,我的目的是讓你知道函式是怎麼一會事兒!為下面的討論作鋪墊!

1.3 指標以及引用: 
指標及引用是在C++中有的,JAVA中沒有。JAVA中取消了對記憶體的操作,隨之而來的事也取消了操作符過載的操作。不過在稍候我還是會介紹一

些操 作符過載的功能等。引用主要還是用在函式引數的傳遞上。所以我在這裡就不做過多的介紹了。他們很實用,有興趣的同學可以參閱C++

相關書籍。 
1.4 運算子及控制語句: 
還是自己看看相關書籍吧,這裡就不再熬述了!

2.深入探討面向物件: 
2.1“型別”的內部細節: 
有了上面的知識,我們現在就可以深入的挖掘類的內部實現了。所有的知識點我都會圍繞著類與物件展開,在此之前,我希望你能夠確信對以

上所介紹的基本內容已完全掌握了! 
是的,面向物件的程式語言最大的特色就是可以編寫自己所需的資料型別,以更好的解決問題。我想我必須要幫你搞清楚“類,物件,屬性,

方法它們之間的關 系”!就像我前面所說的,人這個“類”是什麼也做不了的,因為“人類”只是一個抽象的概念,它不是實實在在的“東西

”,而這個“東西”就是所謂的物件。只 有人這個“物件”才能去工作。而類呢?類是物件的描述!物件從類中產生出來!此時,物件具有類

所描述的所有的屬性以及方法。-------一定要理解這句 話!!! 
也許你已經有些不知所措了,沒關係!好好的回味一下,我再舉個例子!例如電視機,電視機都有工作原理圖,那麼什麼叫電視機呢?只要它

能夠實現工作原理圖的 所有功能的物體,我們都叫它電視機。你想想是不是這麼一回事兒?可是,電視機原理圖是不能工作的,也就是這個原

理圖不能收看節目,只有電視機這個“實體 ——即所謂的物件”才能收看節目,也就是說,從類生成出物件之後才算得上是真正的有意義!才

能開始工作。此時,電視機擁有電視原理圖所描述的所有的屬性及 方法!明白了吧,呵呵! 
我先前介紹過,類是屬性與方法的集合。而這些屬性與方法可以被宣告為私有的(private),公共的(public)或是受保護(protected)的,他

們描述了對類成員的訪問控制。下面我分別做一下介紹: 
1. 公共的(public):把變數宣告為公共型別的之後,那麼就可以通過物件來直接訪問,一切都是暴露無遺的!也就是說,你的信用卡密碼

別人也能夠直接得到。 
2. 私有的(private):如果把變數宣告為私有的情況就好多了,想要得到我的信用卡密碼,物件必須要呼叫專用的方法才能夠得到。 
3. 受保護的(protected):介紹繼承時再討論。 
4. 預設控制訪問符(friendly)://JAVA中有而C++中沒有。 
為了實現資料的封裝,提高資料的安全性,我們一般會把類的屬性宣告為私有的,而把類的方法宣告為公共的。這樣,物件能夠直接呼叫類中

定義的所有方法,當對 象想要修改或得到自己的屬性的時候就必須要呼叫以定義好的專用的方法才能夠實現。你想想,你會把你的信用卡密碼

公佈出來嘛?呵呵!所以,我們提倡的是: “物件調方法,方法改屬性”; 
2.2通過例項看記憶體分配: 
說了這麼多,讓我們來看一個例項吧!比如:現在我們要編寫某家公司員工管理系統,你認為最合適的資料型別是什麼?我認為是員工個人!

但是在面向過程的 語言中,這樣做是不允許的,因為它只能使用語言中的內部資料型別!而員工不在這個內部資料型別之內!也許有人會說可

以用C語言中的struct,好注意! 畢竟它是類的基礎!如果你以前是一名面C或B的程式設計師,請你忘掉這些,讓我們一起看看如何用類來實現這

一切吧! 
某家公司的員工是人類的一個特殊群體,它除了具備人類的所有特性與方法外,它還有額外的特性與方法,比如她有她的工資、信用卡密碼、

作息時間等等,這 些特性以及工作內容,工作量等等這些方法。而在計算機中我們該如何定義這個類呢?下面我將寫出它的格式,讓你看看在

計算機中它是張什麼樣子的!

/*在此我需要再次宣告的是,我用的是JAVA格式,在語法格式上它與C++大不相同!許多細節以及內部操作都有諸多區別,而在思想上確實大同

小異的*/ 
//employee.java 
public class employee{ 
private String name; //員工姓名 
private int age; //員工年齡 
private char sex; //員工性別 
private float emolument; //員工薪水 
private boolean lunch; //員工午餐 
//……等等 
public void heater(){ //這個方法是用來加工員工的午餐 
lunch = true; 

public void setName(String a){ //這個方法是修改員工的姓名 
name= a; 

public String getName(){ //這個方法是得到員工的姓名 
return name; 

//……等等 
}

這樣我們就定義完了我們所需要的資料型別。現在,讓我們來看看它能夠幹什麼以及怎麼工作! 
我想要做的是,工作室裡有一個光桿司令叫“jingwei”,我修改它的名字後對對它進行輸出,看看我是怎麼做的吧! 
注意:請仔細觀察物件是如何呼叫方法的,它使用了“.”操作符!事實上是這樣的,物件呼叫公共的屬性或方法時就會使用“.”操作符。 
然而在C++中,如果定義一個同類型的指標,該指標呼叫此物件的方法時,就會使用“->”操作符。更詳細的內容清參閱相關書籍了!

//workstation.java 
import java.awt.Graphics; 
import java.applet.Applet; 
public class workstation extends Applet{ 
private employee jingwei ; //物件的宣告,此時並不分配記憶體! 
public void init(){ 
jingwei = new employee(); /*此時建立物件會呼叫建構函式,稍候介紹*/ 
jingwei.setName(“jw”); //設定我的名字 

public void paint(Graphics g){ 
g.drawString("my age is "+jingwei.getName(),10,10);//顯示我的年齡 

}

輸出結果是:

my name is jw

這串字串是在輸出視窗的x座標軸為10 px , y座標軸為10 px的位置。 
我現在要做的是,把上面的程式做個大解剖,讓你能夠看清楚它到底是怎麼一回事兒!(我可不時帶你去看裡面的彙編,呵呵,那個我也不會

:)

首先還是來看看我們自定義的資料型別employee,在應用的時候它和int型別的資料沒什麼兩樣,一樣的需要建立變數(物件),只不過前者是

咱自 己定義的,而後這是它內建的。Employee這個類中有許多屬性,也有許多方法。而此時,我們不能直接用我們所創建出來的物件呼叫它的

屬性進行修改。因 為它是private受保護型別的!我要想修改我的姓名我就要用物件呼叫setName()這個方法,而我想得到我的姓名就要呼叫

getName()這個 方法。我們完全是按照航線來行走的,這個航線就是“物件調方法,方法改屬性” 
好的,我真的相信你已經明白了這是怎麼一回事兒了!呵呵!仰起航帆,繼續前行! 
現在讓我們一起來看看workstation這個類。這是個主類,和C++中的main()函式的味道差不多。其中,在JAVA中,一個檔案只允許有而且必須

有一個主類,這個主類用public來宣告!他就跟C++中必須要有一個main()函式是一樣的。 
讓我們來看看這個類中的第一條語句!private employee jingwei ;這條語句的作用是宣告一個employee的物件jingwei(在C++中就不用宣告

了)。我想要和你說的是“宣告”與“定義”之間的區別。宣告只是 告訴計算機將要有這樣的一個變數(物件),在記憶體中它並不為這個變數

(物件)分配記憶體!而只有在定義的時候才會給這個變數(物件)分配記憶體。(需要說明一 下的是init()方法是完成初始化操作的,在此處定

義物件,為物件分配記憶體。start()方法用來啟動瀏覽器的主執行緒,paint()方法來顯示 Apple的介面。這些是Applet程式所需的,至於

Application程式就不需要了,當然了,C++中也不需要他們。關於他們的詳細內容清參閱 相關書籍) 
緊接著就開始定一個物件了,對jingwei這個物件進行操作才會有實際的意義。千萬不要有這種想法:“試圖對類進行操作!”就像前面我說的

,電視機 原理不能看電視一樣!這是毫無意義的!看這條語句jingwei = new employee();它的意思就是定義一個employee型別的物件jingwei

。此時,我想告訴你的是:“jingwei這個對想擁有了些什 麼”。它擁有了類所描述的所有的屬性及方法。下面我一一給你列出來:

/*所有的employee物件都擁有這些屬性。每建立一個物件就會從新分配一塊記憶體來存放相應物件的這些屬性。我的意思是每個物件都有自己“

獨特”的一份*/ 
private String name; //員工姓名 
private int age; //員工年齡 
private char sex; //員工性別 
private float emolument; //員工薪水 
private boolean lunch; //員工午餐 
/*所有的employee物件都擁有這些方法。但在記憶體中只有一份*/ 
public void heater(){ //這個方法是用來加工員工的午餐 
lunch = true; 

public void setName(String a){ //這個方法是修改員工的姓名 
name= a; 

public String getName(){ //這個方法是得到員工的姓名 
return name; 

/*但是,實際上在建立jingwei這個物件時計算機只給這個物件的所有的屬性分配了記憶體,而並沒有給方法分配記憶體。方法只有一個,是屬於所

有的物件的,所以無論建立了多少個物件,計算機只會為一個方法分配一塊記憶體。*/ 
我想我還是舉個例子吧,不然你非暈倒不可。呵呵! 
看我這條語句“private boolean lunch;”公司不管午餐,每個員工都需要帶飯。我們現在這樣想,公司的空間是所有的記憶體容量,你的辦公

桌就是計算機中的記憶體中的一部分(每個員工都有 一份,是在建立物件時分配的)。你把午飯帶到了公司,放在了你的辦公桌上。“午飯”佔

據了你的辦公桌的一角(佔了你自己“物件”的一塊記憶體容量)。這份午 飯只屬於你自己,同樣別人的也只屬於她自己!所以每個員工(物件

)都需要一快空間(記憶體)來存放自己的午餐(屬性)。在計算機中也是這樣的,每建立一個對 象,就會在記憶體中從新分配一塊記憶體來放“午

餐——lunch”這個屬性(物件所擁有的所有的屬性)。 
計算機只會為物件的屬性分配記憶體。因為每個物件的都不一樣!就像你往公司帶的午飯和我往公司帶的午飯不一樣是一個道理!但方法就不同

了。早晨帶的飯中 午就涼了,你需要用微波爐來加熱。微波爐可不用你帶,公司就有(只佔公司的一塊空間),它放在了午餐桌上。你想想,

微波爐屬於誰的?它屬於所有員工的!因 為每個員工都可以用它。而不必每個員工都帶一份。由此可見,每個員工(物件)都有一份午飯(屬

性),但所有的員工(物件)只一個微波爐(方法)。所有的員 工(物件)都可以通過這個微波爐(方法)來改變自己午餐(屬性)的冷熱狀

態。殊途同歸!在計算機中也就是這樣,方法只有一份,供所有的物件使用!而屬性是 每個物件一份,因為每個物件的都不一樣。別和我說你

還不明白,不然我會撞牆的,呵呵:)

2.3深入探討函式:

2.3.1建構函式、預設建構函式、 預設建構函式

對於上面的例項,它已經能完成絕大部分工作了,但它還是不完善的,還有許許多多的細節等到我們去完善!也許有的同學已經注意到了,當

我建立完 “jingwei”這個物件時,這個物件的所有的屬性都是空的,也就是說:這個物件的姓名是未定的、年齡是未定的、性別是未定的、

薪水是未定的、午餐也是 未定的。而我們想把這些屬性都新增上去,就還要用物件呼叫相應的方法,去一個個修改!天啊,這簡直是太麻煩了

!有沒有什麼好方法能夠在我們建立物件的同時 就完成了對屬性賦值的操作呢?哦不,應該說是對屬性的初始化呢?當然沒問題了,這就需要

所謂的建構函式! 
建構函式是類中最特殊的函式,它與解構函式的功能正好相反! 
從特徵上來說:1.它是程式語言中唯一沒有返回值型別的函式。 
2.它的名稱與類的名稱必須要完全相同。 
3.它必須被宣告為公共(public)的型別 
4,可以對建構函式進行過載。 
5.它在建立物件是自動被呼叫。 
從功能上來說:1.它是對類中的屬性進行初始化。 
其實,對於上面的程式來說我們沒有自己定義建構函式。但是,在這種情況下,系統會自動為我們定義一個“預設建構函式”。他會把數值變

量自動賦值為0, 把布林行變數賦值為false等等(但在C++中,預設建構函式不初始化其成員)。如果程式設計師定義了建構函式,那麼系統就不

會再為你的程式新增一個缺預設 造函數了。(在這裡,我們提倡的是自己定義建構函式,而不是用系統的預設建構函式) 
還是看個例項吧!這樣比較清楚一些!

//employee.java

public class employee{

private String name; //員工姓名

private int age; //員工年齡

private char sex; //員工性別

private float emolument; //員工薪水

private boolean lunch; //員工午餐

//……等等

public employee(){ //這個就是“預設”建構函式

name = “jw”; //設定員工姓名

age = 20; //設定員工年齡

sex = “M”; //設定員工性別

emolument = 100; //設定員工薪水

lunch = false; //設定員工午餐

}

public void heater(){ //這個方法是用來加工員工的午餐

lunch = true;

}

//……等等

};

這樣,在我們建立“jingwei”這個物件的同時,它的所有的屬性也被初始化了!顯然,這大大的提高了工作效率,但是,它還是不符合要求。

想想看, 如果我們現在建立這個型別的第二個物件的時候會發生什麼事情?告訴你,除了物件的“名”(這個名稱不在是物件屬性中的名稱,

而是物件本身的名稱)不一樣 外,其所有的“屬性值”都一樣!比如:現在我們建立第二個物件flashmagic,然而我會發現這個物件的所有的

屬性和jingwei這個物件的所有的 屬性完全相同。而我們只能在用物件的方法去改變著寫屬性了!很顯然,這種方法不大好!我們需要一種方

法在建立物件的時候為物件的屬性賦予“我們想要的 值”。 
相信你也看到了,預設建構函式就顯得無能為力了。我們需要的是帶引數的建構函式,在建立物件時,我們把引數傳給建構函式,這樣就能完

成了上述的功能!口說無憑,還是來看個例項吧:

//employee.java

public class employee{

private String name; //員工姓名

private int age; //員工年齡

private char sex; //員工性別

private float emolument; //員工薪水

private boolean lunch; //員工午餐

//……等等

public employee(String n,int a,char s,float e,boolean l){ //看這個建構函式

name = n; //設定員工姓名

age = a; //設定員工年齡

sex = s; //設定員工性別

emolument = e; //設定員工薪水

lunch =l; //設定員工午餐

}

public void heater(){ //這個方法是用來加工員工的午餐

lunch = true;

}

//……等等

};

這樣一來,在建立物件的同時我們就可以給他賦予我們想要的值,很顯然,這可就方便多了。哦,對了!還沒有告訴你怎麼建立呢!哈哈,往

前翻幾頁你會看到這句話: 
jingwei = new employee();這是建立一個物件,而我們把它改成 
jingwei = new employee("jingwei",20,'M',100,false);這樣一來,所有的工作都完成了,呵呵!(在建立物件的同時賦予了我們想要的“初

值”)

2.3.2過載建構函式: 
我還是先把概念給你吧,讓你有個認識,隨後我們在進行論述。 
在JAVA中: 
1. 函式過載是一個類中聲明瞭多個同名的方法,但有不同的引數個數和引數型別。 
2. 函式重構是指在子類中宣告與父類同名的方法,從而覆蓋了父類的方法。重構解決了子類與父類的差異問題。(在討論到繼承時我會詳細說

明) 
在C++中: 
1. 數過載的概念一樣。 
2. 重構的概念可就不一樣了,C++中功能更為龐大的虛擬函式。更詳細內容這裡就不錯過多介紹了! 
其實關於過載的概念你並不陌生,在程式設計中相信你也接觸過。呵呵!讓我們來舉個操作符過載的例子你就會明白了,(JAVA中不支援這個功能

)我們定義三個整數變數:

int i1=2, i2=3,i3=0; 
i3 = i1 + i2;

此時i3=5;加號實現了兩個數相加的運算功能。然而我們現在要定義三個字串變數:

String str1=”jing”, str2=”wei”,str3=””; 
str3 = str1 + str2;

此時str3 = “jingwei”;加號實現了兩個字串相加的運算功能。同樣是加號,既可以把兩個整型的變數加在一起,也可以把兩個字串型別

的變數加在一起。同一個 操作符實現了不同的功能------這就是所謂的操作符過載(嘿嘿,我說你一定見過吧:)!不就好像是漢語中的一詞

多意一樣!我需要說明一下的是,C++ 中的操作符過載可沒有這麼簡單。比如,我們可以對兩個自定義型別的物件進行相加的運算,進行賦值

的運算。這樣書寫簡潔明瞭,而且非常實用。當然,關於操作 符過載的話題太多了,有興趣再看看書吧! 
我們把操作符的話題在轉到函式上來,我們一直強調的是“物件調方法”------物件其實調的是方法的“名稱”。而我們現在要對方法進想重

載,也就是 定義多個相同名稱的函式,這樣計算機在呼叫的時候不會混淆嘛?我想應該不會的,呵呵,因為僅僅是函式名稱相同,而我們在調

用函式時會把引數傳遞給他的。既 是沒有引數也是一種引數傳遞引數的資訊(資訊為無引數)!然而由於引數型別、引數數量、返回值型別不

同我們就可以對相同名稱的函式進行區分