面向對象編程,我的思想(6)
發表時間:2024-01-11 來源:明輝站整理相關軟件相關文章人氣:
[摘要]2.3.2重載構造函數:我還是先把概念給你吧,讓你有個認識,隨后我們在進行論述。在JAVA中:1. 函數重載是一個類中聲明了多個同名的方法,但有不同的參數個數和參數類型。2. 函數重構是指在子類中聲明與父類同名的方法,從而覆蓋了父類的方法。重構解決了子類與父類的差異問題。(在討論到繼承時我會詳細說...
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++中的操作符重載可沒有這么簡單。比如,我們可以對兩個自定義類型的對象進行相加的運算,進行賦值的運算。這樣書寫簡潔明了,而且非常實用。當然,關于操作符重載的話題太多了,有興趣再看看書吧!我們把操作符的話題在轉到函數上來,我們一直強調的是“對象調方法”------對象其實調的是方法的“名稱”。而我們現在要對方法進想重載,也就是定義多個相同名稱的函數,這樣計算機在調用的時候不會混淆嘛?我想應該不會的,呵呵,因為僅僅是函數名稱相同,而我們在調用函數時會把參數傳遞給他的。既是沒有參數也是一種參數傳遞參數的信息(信息為無參數)!然而由于參數類型、參數數量、返回值類型不同我們就可以對相同名稱的函數進行區分了!目的只有一個,用簡便的方法實現更多的功能。還是舉個例子吧,重載構造函數!
public class employee{
public employee(String n,int a,char s,float e,boolean l){ //看這個構造函數
name = n; //設置員工姓名
age = a; //設置員工年齡
sex = s; //設置員工性別
emolument = e; //設置員工薪水
lunch =l; //設置員工午餐
}
public employee(){ //請注意這個函數沒有參數
name = “jw”;
age = 20;
sex = ’W’;
emolument = 99;
lunch = true
}
//……等等
};
看,在一個類中有兩個名稱相同的函數,可我們在使用的時候系統如何知道我們調用的是那個版本的函數呢?呵呵,我剛剛說過了,可以通過函數的參數類型、參數數量、返回值類型來確定�,F在我們接著試驗,我們創建兩個對象其中的一個調用帶參數的構造函數,第二個對象調用缺省值的構造函數。我們來看看結果:jingwei = new employee("jingwei",20,'M',100,false);/*創建這個對象的時候調用的是帶參數的構造函數*/
flashmagic = new employee();//創建這個對象是調用的是卻省值的構造函數
而得到的結果呢?讓我們一起來看一看!
Jingwei這個對象中: flashmagic這個對象中:name jingwei name jw
age 20 age 20
sex M sex W
emolument 100 emolument 99
lunch false lunch true看,雖然是兩個名稱完全相同的函數,但完成了不同的工作內容。呵呵!關于函數重載我們就料到這里吧,我相信你已經有個大印象了,而更詳細的內容仍需要你的努力!重載普通的函數與重載構造函數大同小異,不過他多了一個this指針!this一般是對當前對象的引用。這么說吧,如果涉及到兩個以上的對象時就會使用this指針。每個成員函數都有一個this指針,它是一個隱藏的參數,this指針只向調用它的對象!我說過方法只有一份,而對象都有自己的屬性,當對象調用方法來先是屬性的時候,他怎么來判斷調用的時不是自己的屬性呢?這就需要this指針來大顯神威了。關于拷貝構造函數、內聯函數、虛函數、模版等歐就不做過多的討論了,因為JAVA中好像沒有這些了。不過我需要提醒你一下的是,在C++中,類內定義的函數自動轉換為內聯函數,而這好像與我前面提到的思想有沖突。因為內聯函數的目的是減少函數調用的開銷!呵呵!我也沒繞出來呢!還請哪為大蝦指點一二!謝!