2.3.2重載構(gòu)造函數(shù):
我還是先把概念給你吧,讓你有個認(rèn)識,隨后我們在進(jìn)行論述。
在JAVA中:
1. 函數(shù)重載是一個類中聲明了多個同名的方法,但有不同的參數(shù)個數(shù)和參數(shù)類型。
2. 函數(shù)重構(gòu)是指在子類中聲明與父類同名的方法,從而覆蓋了父類的方法。重構(gòu)解決了子類與父類的差異問題。(在討論到繼承時我會詳細(xì)說明)
在C++中:
1. 數(shù)重載的概念一樣。
2. 重構(gòu)的概念可就不一樣了,C++中功能更為龐大的虛函數(shù)。更詳細(xì)內(nèi)容這里就不錯過多介紹了!
其實(shí)關(guān)于重載的概念你并不陌生,在編程中相信你也接觸過。呵呵!讓我們來舉個操作符重載的例子你就會明白了,(JAVA中不支持這個功能)我們定義三個整數(shù)變量:
int i1=2, i2=3,i3=0; i3 = i1 + i2; 此時i3=5;加號實(shí)現(xiàn)了兩個數(shù)相加的運(yùn)算功能。然而我們現(xiàn)在要定義三個字符串變量: String str1=”jing”, str2=”wei”,str3=””; str3 = str1 + str2;
此時str3 = “jingwei”;加號實(shí)現(xiàn)了兩個字符串相加的運(yùn)算功能。同樣是加號,既可以把兩個整型的變量加在一起,也可以把兩個字符串類型的變量加在一起。同一個操作符實(shí)現(xiàn)了不同的功能------這就是所謂的操作符重載(嘿嘿,我說你一定見過吧:)!不就好像是漢語中的一詞多意一樣!我需要說明一下的是,C++中的操作符重載可沒有這么簡單。比如,我們可以對兩個自定義類型的對象進(jìn)行相加的運(yùn)算,進(jìn)行賦值的運(yùn)算。這樣書寫簡潔明了,而且非常實(shí)用。當(dāng)然,關(guān)于操作符重載的話題太多了,有興趣再看看書吧!
我們把操作符的話題在轉(zhuǎn)到函數(shù)上來,我們一直強(qiáng)調(diào)的是“對象調(diào)方法”------對象其實(shí)調(diào)的是方法的“名稱”。而我們現(xiàn)在要對方法進(jìn)想重載,也就是定義多個相同名稱的函數(shù),這樣計(jì)算機(jī)在調(diào)用的時候不會混淆嘛?我想應(yīng)該不會的,呵呵,因?yàn)閮H僅是函數(shù)名稱相同,而我們在調(diào)用函數(shù)時會把參數(shù)傳遞給他的。既是沒有參數(shù)也是一種參數(shù)傳遞參數(shù)的信息(信息為無參數(shù))!然而由于參數(shù)類型、參數(shù)數(shù)量、返回值類型不同我們就可以對相同名稱的函數(shù)進(jìn)行區(qū)分了!目的只有一個,用簡便的方法實(shí)現(xiàn)更多的功能。還是舉個例子吧,重載構(gòu)造函數(shù)!
|
public class employee{ public employee(String n,int a,char s,float e,boolean l){ //看這個構(gòu)造函數(shù) name = n; //設(shè)置員工姓名 age = a; //設(shè)置員工年齡 sex = s; //設(shè)置員工性別 emolument = e; //設(shè)置員工薪水 lunch =l; //設(shè)置員工午餐 } public employee(){ //請注意這個函數(shù)沒有參數(shù) name = “jw”; age = 20; sex = ’W’; emolument = 99; lunch = true } //……等等 };
|
看,在一個類中有兩個名稱相同的函數(shù),可我們在使用的時候系統(tǒng)如何知道我們調(diào)用的是那個版本的函數(shù)呢?呵呵,我剛剛說過了,可以通過函數(shù)的參數(shù)類型、參數(shù)數(shù)量、返回值類型來確定,F(xiàn)在我們接著試驗(yàn),我們創(chuàng)建兩個對象其中的一個調(diào)用帶參數(shù)的構(gòu)造函數(shù),第二個對象調(diào)用缺省值的構(gòu)造函數(shù)。我們來看看結(jié)果:
jingwei = new employee("jingwei",20,'M',100,false);/*創(chuàng)建這個對象的時候調(diào)用的是帶參數(shù)的構(gòu)造函數(shù)*/ flashmagic = new employee();//創(chuàng)建這個對象是調(diào)用的是卻省值的構(gòu)造函數(shù) 而得到的結(jié)果呢?讓我們一起來看一看! Jingwei這個對象中: flashmagic這個對象中:
|
age 20 age 20 sex M sex W emolument 100 emolument 99 lunch false lunch true |
看,雖然是兩個名稱完全相同的函數(shù),但完成了不同的工作內(nèi)容。呵呵!關(guān)于函數(shù)重載我們就料到這里吧,我相信你已經(jīng)有個大印象了,而更詳細(xì)的內(nèi)容仍需要你的努力!
重載普通的函數(shù)與重載構(gòu)造函數(shù)大同小異,不過他多了一個this指針!this一般是對當(dāng)前對象的引用。這么說吧,如果涉及到兩個以上的對象時就會使用this指針。每個成員函數(shù)都有一個this指針,它是一個隱藏的參數(shù),this指針只向調(diào)用它的對象!我說過方法只有一份,而對象都有自己的屬性,當(dāng)對象調(diào)用方法來先是屬性的時候,他怎么來判斷調(diào)用的時不是自己的屬性呢?這就需要this指針來大顯神威了。
關(guān)于拷貝構(gòu)造函數(shù)、內(nèi)聯(lián)函數(shù)、虛函數(shù)、模版等歐就不做過多的討論了,因?yàn)镴AVA中好像沒有這些了。不過我需要提醒你一下的是,在C++中,類內(nèi)定義的函數(shù)自動轉(zhuǎn)換為內(nèi)聯(lián)函數(shù),而這好像與我前面提到的思想有沖突。因?yàn)閮?nèi)聯(lián)函數(shù)的目的是減少函數(shù)調(diào)用的開銷!呵呵!我也沒繞出來呢!還請哪為大蝦指點(diǎn)一二!謝!
出處:相關(guān)論壇
責(zé)任編輯:冰點(diǎn)的冰藍(lán)色
上一頁 構(gòu)造函數(shù)、默認(rèn)構(gòu)造函數(shù)、 缺省構(gòu)造函數(shù) 下一頁 初始化與賦值
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|