-
你正在使用 gcc,所以我開啟了我的膝上型電腦(帶有 Linux)來回答這個問題。
問題出在你的第八行:a & operator = (a & a) 求解:a & operator = (const a & a) 分析如下:
當函式 fun 在返回類 a 中時,編譯器需要在主函式中建立乙個臨時類常量,以便可以將其賦值給 a1。 在主要函式中由於 ** 在大鍵函式中是 a1=fun(),因此等號的右側是乙個常量(如分析中所示),但在等號運算子過載中,您只定義非常量。 因此,型別不匹配,並且 g++ 會給出錯誤訊息。
原因如下。
此外,如果我們只在函式中返回乙個基元型別,例如 int。 當函式返回時,編譯器不會建立額外的 int 常量,而只是填充返回位址指示的記憶體。 當然,如果你懂組合語言,我說的很容易理解,但如果你不懂彙編,這個解釋可能會有點混亂。
但請記住,當類返回時,編譯器會建立乙個臨時的類常量,而基元型別不會! (將類引數傳遞給函式也存在同樣的問題)。
我在 VC 中除錯了您的**,只報告了“執行時檢查失敗 3 - 變數”。'a' is being used without being defined.之後,我新增了預設建構函式“a()”,這解決了問題。 不同的編譯器會以不同的方式處理不那麼嚴謹的**!
-
我編譯沒有問題
-
C++過載是C語言中的一種函式表示形式,即過載函式。
過載函式是函式的特例,為了便於使用,C++ 允許在同一作用域中宣告多個功能相似的同名函式,但這些具有相同名稱的函式的形式引數(即引數的數量、型別或順序)必須不同。
也就是說,同乙個運算子用於完成不同的算術函式。 這是過載函式。 過載函式通常用於實現函式相似但處理資料型別不同的問題,並且不能只是函式的返回值型別。
-
1. C++函式重寫。
1) 被重寫的函式不能是靜態的。它必須是虛擬的,或者是重寫的(即函式在最原始的基類中被宣告為虛重寫,並且在 C++ 中沒有重寫)。
2) 重寫函式必須具有相同的型別、名稱和引數列表。
3)重寫函式的訪問修飾符可以不同。即使 virtual 是私有的,也可以在派生類中將其重寫為 public 並保護(這與 c 完全不同)。
2.C++函式過載。
1)直觀地說,過載是乙個同名的函式,有不同的版本(不同的引數列表:引數型別、順序)。
2) 構成過載函式集的函式必須位於同一域中。例如,試圖在基類和派生類中形成一組同名的過載函式會丟擲錯誤(呼叫函式時,編譯錯誤),實際上派生類中的新函式“version”隱藏了基類中定義的函式(隱藏在C++中很少被提及, 但存在)。
-
過載是一種多型性(如C++),有四種形式的多型性:
1.虛函式多型性。
2.模板多型性。
3.過載。 4.轉換專業化。
嚴格來說,過載是編譯時多型性,即靜態多型性,根據不同型別的函式進行編譯時,會產生不同的名稱,如int foo和char foo等。 因此,過載仍然符合多型定義——通過單一身份支援不同特定行為的能力,只是過載是靜態多型,而不是通過繼承和虛函式的動態多型。 第二個論點是過載與多型性無關,真正與多型性相關的是繼承。
當派生類重新定義基類的虛擬方法時,基類會根據分配給它的不同派生類引用動態呼叫屬於該派生類的相應方法,這些引用在編譯過程中無法確定。 因此,這樣的方法位址在執行時繫結(動態繫結)。
過載只是一種語言特徵,一種語法規則,與多型性無關,與物件導向無關。
但是,對於所謂的第二種型別的過載,有乙個特定的術語 - 重寫或重新定義。 過載和重寫的區別在於是否被重寫,重寫一般發生在不同的類之間,並且存在繼承關係,過載多在乙個類或乙個**段落中。
-
C++ 函式過載中的過載:
函式過載是指函式名稱相同,但定義不同。 函式過載允許程式設計師將一系列函式族定義為乙個統一的介面,但可以處理不同型別的資料或接受不同數量的引數。 這實現了具有不同定義的統一介面的思想。
流過載:C++ 流提取運算子和插入運算子是 C++ 類庫提供的輸入。
輸出 (iO) 運算子。 系統分別定義了 istream 和 ostream 的輸入流類 istream 和輸出流類 ostream、cin 和 cout 物件。
iostream 標頭檔案已過載 “” 和 “,因此可用於輸入和輸出標準型別資料。 但是,如果您自己定義型別,則需要重新定義。
包含這兩個運算子,以便它們可以輸入該自定義型別的年數。 格式如下:
流插入的過載:ostream &operator<<(ostream &, custom class &)。
流提取的過載:istream &operator>> (istream &, custom class &)。
操作員過載:
運算子過載是對運算子的重新定義,即運算子可用於對多種資料型別的操作。 運算子的過載在實際程式設計中很常見,例如,“+ 運算子既可用於整數加法、浮點加法,甚至字串的鏈結。 格式如下:
鍵入運算子符號(引數列表);
-
函式名稱相同,但引數不同,或者返回值不同。
-
過載是 C++ 中的相同副本。
班級成員攻擊。
功能間重負載,過載功能:du
1)同範圍(同類DAO中的ZHI);
2)功能名稱相同;
3)引數不同;
新增注釋:C++ 中同名、返回值不同、引數相同的函式不能判斷為函式過載
-
它與現有類的函式名稱相同,但引數不同。
-
所謂過載,就是函式名必須相同,返回值可以相同,也可以不同,但特徵板必須不同。
函式名和函式的區別在於,功能標記是函式可以過載。
編譯器首先選擇函式名稱,然後根據功能標記在眾多過載函式中查詢合適的函式。
這主要是在函式中,有時為了處理不同物件的一些相同問題,為了避免定義多個函式,使用過載,以上是我的建議,希望對大家有所幫助。
-
1.為使用者降低複雜性。
2.這樣減少了函式名的數量,避免了命名空間的汙染,對程式的可讀性有很大的好處。
過載函式是函式的特例,為了便於使用,C++ 允許在同一作用域中宣告多個同名函式,但這些同名函式的形式引數(指引數的數量、型別或順序)必須不同,即用同乙個運算子執行不同的函式。 這是過載函式。 過載函式通常用於解決功能相似但處理不同型別資料的問題。
-
多個功能可以用同乙個名稱(不同的引數)來實現同乙個功能,可以有效地復用**,增加可讀性。
再寫幾個例子,以便更深入地理解。
網上也有很多詳細的解釋。 比如。
-
為了簡化,有了函式過載,只要你寫乙個函式,就可以根據不同的用途來呼叫它,可以說是乙個函式,多種用途,簡化。 它顯示了物件導向程式設計的優越性。
-
我還沒看完,第一,好同志。
其實本質區別在於看函式特性:被重寫的兩個函式的函式特性是一樣的,過載的兩個函式的函式名稱是一樣的,但函式特性不同。 >>>More