Visual C++ 6.0編譯器負責將C++源代碼編譯成匯編文件,轉換為中間文件obj文件),然後使用連接器將相關的中間文件連接在一起,生成可執行的二進制文件,希望本文能教會你更多東西。
1.多態性的概念
多態性是指用一個名字定義不同的函數,這函數執行不同但又類似的操作,從而實現“一個接口,多種方法”。多態性的實現與靜態聯編、動態聯編有關。靜態聯編支持的多態性稱為編譯時的多態性,也稱靜態多態性,它是通過函數重載和運算符重載實現的。動態聯編支持的多態性稱為運行時的多態性,也稱動態多態性,它是通過繼承和虛函數實現的。
2.函數重載
函數重載的意義在於他能用同一個名字訪問一組相關的函數。在類中普通成員函數和構造函數都可以重載,特別是構造函數的重載他提供了多種初使化方式)給用戶更大的靈活性。
在基類和派生類的函數重載有兩種情況:一種是參數有所差別的重載。另一種是參數沒有差別的重載,只是他們屬於不同的類。可以用以下兩種方法來區分這兩種函數:用對象名加以區分;使用“類名::”加以區分。
3.運算符重載稱動態多態性
他是通過繼承和虛函數實現的。運算符重載通過創建運算符函數operator@()來實現。運算符函數定義了重載的運算符將要進行的操作,這種操作通常作用在一個類上。這樣,在編譯時遇到名為operator@的運算符函數@表示所要重載的運算符),就檢查傳遞給函數的參數的類型。
重載運算符與預定義運算符的使用方法完全相同,它不能改變原有運算符的參數個數單目或雙目),也不能改變原有的優先級的結合性。用戶不能定義新的運算符,只能從C++源代碼已有的運算符中選擇一個恰當的運算符重載。
成員運算符函數運算符函數可以定義為它將要操作的類的成員稱為成員運算符函數),也可以定義為非類的成員,但是非成員的運算符函數大多是類的友元函數稱為友元運算符函數)。成員運算符函數在類中的聲明格式為:
4.賦值運算符
繼承C語言,用戶自定義的類和結構都要能進行賦值運算。而數組名不能賦值,數組名實質上是一個常量指針。對於任何類,C++源代碼提供了默認的賦值運算符。一般地,默認的賦值運算符重載是能夠勝任工作的。當類中有指針類型時,需要自定義賦值運算符函數。一般其函數體包含兩部分:與析構函數類似,取消對象已經占有的資源;
與構造函數類似,谄渲蟹峙湫碌淖試礎?br> 類的賦值運算符重載“=”只能重載為成員函數,不能重載為友元函數。
重載後的運算符函數operator=()不能被繼承。
拷貝構造函數和賦值運算符重載的區別:聲明和定義方式不同;調用方式不同。
5.C++源代碼
虛函數是重載的另一種表現形式,允許虛函數調用與函數體之間的聯系在運行時才建立。定義:虛函數就是在基類中被關鍵字virtual說明,並在派生類中重新定義的函數,在派生類中重新定義時,其函數原形包括返回類型,函數名,參數個數與參數類型的順序,都必須與基類中的原形必須相同。
構造函數不能是虛函數,但析構函數可以是虛函數。虛函數與重載函數的關系:當普通的函數重載時,其函數的參數或參數類型必須有所不同,函數的返回類型也可不同;在派生類中,重新定義虛函數時要求函數名、返回類型、參數個數、參數的類型和順序與基類中的函數原形完全相同;
若僅僅返回類型不同,其余均相同,系統會給出錯誤信息。虛函數重載時若僅僅函數名相同,而參數的個數、類型或順序不同系統將它作為普遍函數重載,虛函數的特征將會丟失。多重繼承與虛函數:多重繼承可視為多個單繼承的組合。
6.純虛函數和抽象類
純虛函數:是一個在基類中說明的虛函數,他在該基類中沒有定義,但要求在它的派生類中定義自己的版本,或重新說明為純虛函數。純虛函數的一般形式:virtual type func_name參數表)=0type是函數的返回類型,func_name是函數名)。抽象類:一個類至少有一個純虛函數的類。抽象類提供了處理各種不同派生類的統一接口,將實現的責任交給了派生類。