這一章主要講得就是過載和模板。其中過載又分為了函式名過載,運算子過載和輸入/輸出插入符過載。
一:函式名過載
c++允許乙個函式名對應多個函式體,形成函式名的多型性。在c++中,編譯器主要是靠過載函式的引數形式的不同來與函式體繫結,而不是靠返回值的型別。
因此:要實現函式名過載,就是說函式名必須相同,引數形式必須不同。引數形式不同主要包括型別不同,或者引數個數不同。
1)型別不同時,注意呼叫轉換的二義性。例如:對於過載函式float max(float a,float b),double max(double a,double b),當使用語句max(2,5)時,將會出現轉換方面的繫結二義性。
2)個數不同時,注意預設引數產生的二義性。所謂的預設引數,就是說在函式宣告和定義時,直接對引數賦值。它有兩個特點,乙個是預設引數只可以函式宣告中設定一次,只有無函式宣告時,才可在函式定義中設定。另乙個特點是定義順序從右到左(但呼叫順序是從左到右的),即乙個引數設定了預設值後,右邊的引數都需要有才可。如int max(int a,int b=2,int c=3)是對的,而int max(int a,int b=2,int c)則是錯誤的。
若有預設引數函式int max(int a int b=2, int c=3,int d=4),則max(1)已等價於max(1,2,3,4),因此檔案中不能再有過載函式int max(int a)出現。由於引數a並沒有預設賦值,因此呼叫max()也將是錯誤的。
3)函式功能不同,不要做過載,以免出現呼叫結果的誤解。如int add(int x, int y) float add(float x, float y)。
4)函式值相同,引數形式也相同,只有返回值不同的函式,c++編譯器不能對它們從引數形式上加以區別,會被認為是乙個函式的重複說明。
二:運算子過載和插入符過載
這個沒有做過深入的研究,既然是過載,必然也會跟函式過載類似,它有兩種過載形式:成員函式方式和友元函式方式。以下也是運算子過載的注意事項。
1)不能改變優先順序和結合性
1)程式設計師不能定義新的運算子有:., *, ::, ?:。
2)對一元運算子,友元函式形式過載時,只宣告乙個形參;成員函式形式過載時,不顯示宣告形參。
對二元運算子,友元函式形式過載時,宣告二個形參; 成員函式形式過載時,顯示宣告乙個形參。(記住不能帶兩個引數哦)
三:函式模板/類模板
過載函式主要是解決函式名相同,引數形式不同(引數個數不同,或者引數型別不同)的問題。
函式模板只解決函式名相同,引數個數也相同,僅型別不同的問題。
4 過載和重寫
內容提要 結合 觀察覆蓋,過載和方法重複 從物件導向角度,分析覆蓋時需要注意的兩大準則 子類方法覆蓋 override 父類方法 方法的過載 overload 過載 方法同名,不同參 方法同名,同參,不同引數名,是重複方法 方法同名,同參,不同返回值,是重複方法 子方法覆蓋時的限制 子類方法不能縮小...
C 問題4 過載
在同一作用域類,一組函式的函式名相同,引數列表不同 引數個數不同或者引數型別不同 返回值可同可不同。過載函式通常用來在同乙個作用域內,用同乙個函式名命名一組功能相似的函式,這樣做減少了函式名的數量,避免了名字空間的汙染,對於程式的可讀性有很大的好處。1 多型 用同乙個東西表示不同的形態。2 多型分為...
Java基礎整理(3) 過載與重寫
方法名一致,引數列表中引數的順序,型別,個數不同。過載與方法的返回值無關,存在於父類和子類,同類中。可以丟擲不同的異常,可以有不同修飾符。引數列表必須完全與被重寫方法的一致,返回型別必須完全與被重寫方法的返回型別一致。構造方法不能被重寫,宣告為 final 的方法不能被重寫,宣告為 static 的...