你是要函數重載嗎?函數重載要滿足下列條件:
成都創新互聯公司專業為企業提供建水網站建設、建水做網站、建水網站設計、建水網站制作等企業網站建設、網頁設計與制作、建水企業網站模板建站服務,10年建水做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
函數名稱必須相同。
參數列表必須不同(個數不同、類型不同、參數排列順序不同等)。
函數的返回類型可以相同也可以不相同。
僅僅返回類型不同不足以成為函數的重載。
你定義了兩個average函數,除了形參名字不一樣,其他都一樣,所以是不合法的。
而且如果都是float類型,沒必要寫兩個,一個函數就夠了,只是返回給不同的變量即可,比如第一個返回給average1,第二個返回給average2就行了。自定義函數里的average1只是一個代號,你換成其他任何名字一樣可以執行并返回數值。
c語言寫重載函數:
首先明確重載函數的定義:在相同的聲明域中的函數名相同的,而參數表不同的,即通過函數的參數表而唯一標識并且來區分函數的一種特殊的函數。
當將要定義一組函數,使它們執行一系列的操作,但是它們是應用在不同的參數類型上的。此時可以選擇重載函數。
例如:
上面的三個函數都可以大概地說成判斷一組數中的最大值,對于函數的用戶來說,他們并不關心函數定義的細節,也就是說他們不關心判斷兩個整數的大小和判斷數組(vector容器)數的大小應該使用不同的函數,而對于程序的設計者來說這可是不得不想到的。程序員必須記住并查找每個函數名。而函數的重載把程序員從這種問題的復雜性中解放了出來,C++提供了這種支持。
上面的三個比較大小的函數可以定義成:
通過參數就可以一眼分辨不同的函數。
標準C, 不支持函數重載。
函數重載是C++的概念。 不光是類的成員函數, 一般函數以及模板函數都是可以重載的。
不能重載的運算符只有5個:
1、. ?(成員訪問運算符)
2、.* ?(成員指針訪問運算符)
3、:: ?(域運算符)
4、sizeof
(長度運算符)
5、?: ?(條件運算符)
前兩個運算符不能重載是為了保證訪問成員的功能不能被改變,域運算符和sizeof
運算符的運算對象是類型而不是變量或一般表達式,不具備重載的特征。
C++對運算符重載定義了如下幾條規則。
1) C++不允許用戶自己定義新的運算符,只能對已有的C++運算符進行重載。
例如,有人覺得BASIC中用“**“作為冪運算符很方便,也想在C++中將”**“定義為冪運算符,用”3**5“表示35,這樣是不行的。
2)
重載不能改變運算符運算對象(即搡作數)的個數。如關系運算符“”和“ ” 等是雙目運算符,重載后仍為雙目運算符,需要兩個參數。運算符“
+”,“-”,“*”,“”等既可以作為單目運算符,也可以作為雙目運算符,可以分別將它們重載為單目運算符或雙目運算符。
3)
重載不能改變運算符的優先級別。例如“*”和“/”優先于“
+”和“-”,不論怎樣進行重載,各運算符之間的優先級別不會改變。有時在程序中希望改變某運算符的優先級,也只能使用加圓括號的辦法強制改變重載運算符的運算順序。
4)
重載不能改變運算符的結含性。如賦值運算符是右結合性(自右至左),重載后仍為右結合性。
5)
重載運算符的函數不能有默認的參數,否則就改變了運算符參數的個數,與前面第(2)點矛盾。
6)
重載的運算符必須和用戶定義的自定義類型的對象一起使用,其參數至少應有一個是類對象(或類對象的引用)。也就是說,參數不能全部是C++的標準類型,以防止用戶修改用于標準類型數據的運算符的性質,如下面這樣是不對的:
int operator + (int a,int b)
{
retum(a-b);
}
原來運算符+的作用是對兩個數相加,現在企圖通過重載使它的作用改為兩個數相減。
如果允許這樣重載的話,如果有表達式4+3,它的結果是7呢還是1?顯然,這是絕對禁止的。
如果有兩個參數,這兩個參數可以都是類對象,也可以一個是類對象,一個是C
++標準類型的數據,如
Complex operator + (int a,Complexc)
{
return Complex(a +c.real, c.imag);
}
它的作用是使一個整數和一個復數相加。
7)
用于類對象的運算符一般必須重載,但有兩個例外,運算符“=”和“”不必重載。
①賦值運算符( =
)可以用于每一個類對象,可以利用它在同類對象之間相互賦值。
我們知道,可以用賦值運算符對類的對象賦值,這是因為系統已為每一個新聲明的類重載了一個賦值運算符,它的作用是逐個復制類的數據成員。用戶可以認為它是系統提供的默認的對象賦值運算符,可以直接用于對象間的賦值,不必自己進行重載。但是有時系統提供的默認的對象賦值運算符不能滿足程序的要求,例如,數據成員中包含指向動態分配內存的指針成員時,在復制此成員時就可能出現危險。在這種情況下,
就需要自己重載賦值運算符。
②地址運算符也不必重載,它能返回類對象在內存中的起始地址。
8)
從理論上說,可以將一個運算符重載為執行任意的操作,如可以將加法運算符重載為輸出對象中的信息,將“”運算符重載為“小于”運算。但這樣違背了運算符重載的初衷,非但沒有提髙可讀性,反而使人莫名其妙,無法理解程序。應當使重載運算符的功能類似于該運算符作用于標準類型數據時所實現的功能(如用“+”實現加法,用“”實現“大于”的關系運算)。
9)
運算符重載函數可以是類的成員函數,也可以是類的友元函數,還可以是既非類的成員函數也不是友元函敝的普通函數。
參考資料
C++相關文章.C語言中文網[引用時間2018-4-1]
你的這種重載方式不對,如果你仔細去看看重載的定義,你就會發現只是類型不同的函數參數重載是不好實現的,編譯器不能夠識別你調用的是哪一個函數。函數的重載可以傳遞的參數個數不一致,函數返回值不一致,但是對于有相同參數,參數類型不同這種重載一般是不能實現的。
C語言中,有沒有參數的函數都不能重載,只有C++才有函數重載功能。