1、我們已經看到,可以將派生型別的物件傳給希望接受基類引用的函式。也許會因此認為物件進行轉換,但是,事實並非如此。將物件傳給希望接受引用的函式時,引用直接繫結到該物件,雖然看起來在傳遞物件,實際上實參是該物件的引用,物件本身未被複製,並且,轉換不會在任何方面改變派生型別物件,該物件仍是派生型別物件。將派生類物件傳給希望接受基類型別物件(而不是引用)的函式時,情況完全不同。在這種情況下,形參的型別是固定的——在編譯時和執行時形參都是基類型別物件。如果用派生型別物件呼叫這樣的函式,則該派生類物件的基類部分被複製到形參。
乙個是派生類物件轉換為基類型別引用,乙個是用派生類物件對基類物件進行初始化或賦值,理解它們之間的區別很重要。
2、對基類物件進行初始化或賦值,實際上是在呼叫函式:初始化時呼叫建構函式,賦值時呼叫賦值操作符。類顯式定義怎樣用派生型別物件對基類型別進行初始化或賦值並不常見,相反,基類一般(顯式或隱式地)定義自己的複製建構函式和賦值操作符,這些成員接受乙個形參,該形參是基類型別的(const)引用。因為存在從派生類引用到基類引用的轉換,這些複製控制成員可用於從派生類物件對基類物件進行初始化或賦值。
3、從基類到派生類的自動轉換是不存在的。需要派生類物件時不能使用基類物件。
型別轉換與繼承
可以將基類的指標或引用繫結到派生類物件上有一層極為重要的含義 當使用基類的引用 或指標 實際上我們並不清楚該引用 或指標 所繫結物件的真實型別。靜態型別和動態型別 當我們使用存在繼承關係的型別時,必須將乙個變數或其他表示式的靜態型別與該表示式表示物件的動態型別區分開來。表示式的靜態型別在編譯時總是已...
繼承的建構函式,多重繼承,型別轉換與虛繼承
一 繼承的建構函式 派生類,也就是子類,它繼承了基類,當然也就繼承了基類的資料成員,我們知道,生成乙個物件是要呼叫建構函式的,這裡的子類當然也不例外,而且有經典的同學肯定也會知道,生成乙個子類物件時,不僅會呼叫子類的建構函式,而且還會呼叫父類的建構函式。我們在這裡分析一下子類的建構函式的書寫規則問題...
第二遍C primer 轉換與繼承
主要整理派生類到基類的轉換,由於派生類包含乙個基類的部分,所以是向上安全轉換,但跟訪問標號有關 1.public繼承 派生類的引用,指標,物件都可以自動轉換到基類的引用,指標,物件 include includeusing namespace std class c private int a cl...