C 之物件切割

2021-06-17 22:20:47 字數 555 閱讀 4594

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...