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