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