from:華山大師兄
問題描述
程式如下:
#include #include最後的執行結果:using
namespace
std;
class
base
};class derived:public
base
};void
fun1(base b)
void fun2(base *b)
void fun3(base &b)
intmain()
原因解釋
從上面可以看出 指標和位址傳遞可以實現虛函式的多型功能,而在fun1(base b)中 傳遞derived物件時發生了的物件切割,而物件切割不會發生多型,所以呼叫base當中對應的函式。
綜上:多型的實現是通過指標和引用;而物件的轉換只會造成物件切割,不能實現多型
C 物件切割
當把乙個派生類物件賦給乙個基類物件時,會發生物件切割。另外用基類物件強制轉換派生類物件也會 物件切割會發生什麼呢?include stdafx.h include using namespace std class cshape cshape virtual void draw double m c...
c 物件切割 Object Slicing
當把乙個派生類物件賦給乙個基類物件時,會發生物件切割。另外用基類物件強制轉換派生類物件也會 物件切割會發生什麼呢?include using namespace std class cshape cshape virtual void draw double m color class crect ...
c 物件切割示例
概念 當乙個子類物件通過值傳遞給基類物件,如foo base derived obj 這個基類的拷貝建構函式將被呼叫.此時子類的特性將被切割,只有基類相關操作.也就是說如果我們向上轉型如果不用引用或指標,物件將被切割.這是也我們應該傳引用而不是傳值的原因.示例 cpp include include...