物件切割,指標和引用對多型的支援

2021-07-13 21:23:10 字數 885 閱讀 7225

物件切割:

一般來說派生類分配的儲存空間大於基類分配的儲存空間,如果不通過指標和引用而是直接將派生類物件複製給基類物件就會造成切割。

切割導致無法通過基類呼叫基類的成員函式。

例子:

class bear : public zooanimal

{}

bear b;

zooanimal za = b;

za.rotate();//呼叫zooanimal::rotate()

直接通過物件複製引起切割。也就是說多型所造成的「乙個以上的型別」的潛在力量,也就是基類和多個派生類之間關係,並不能夠實際發揮在「直接訪問object」這件事情上。因此,oo程式設計並不支援對object的直接處理(《深度探索c++物件模型》)。

zooanimal za;

zooanimal *pza;

bear b;

pza = &b;

將za或者b的位址,指定給pza,沒有問題。乙個指標或引用之所以支援多型,是因為他們並不引發記憶體中任何"與型別有關的記憶體委託操作「。會受到改變的只有他們所指向的記憶體的」內容和解釋方式「。

但是當把乙個基類直接初始化為乙個派生類時,派生類會被切割以塞入較小的基類中,因此多型就不存在。因為切割後包含內容不同。如下:

bear b;

zooanimal *pz = &b;

bear *pb = &b;

他們每個都指向bear object的第乙個byete. 其間的差別是,pb所涵蓋的位址包含整個bear obeject,而pz所涵蓋的位址只是包含bear 物件中的 zooanimal 例項。

C 物件指標和物件引用

在c 中,可以說明指向類的資料成員和成員函式的指標 1 指向資料成員的指標格式如下 型別說明符 類名 指標名 2 指向成員函式的指標格式如下 型別說明符 類名 指標名 參數列 如下例 class a public int fun int b a int i int c private int a 定...

引用 指標和物件的區別

引用 charles yang 的 指標和物件的區別 簡單來說,指標是一棟大樓的門牌號碼,它的物件是這棟大樓。程式說明,主要是為程式中用到的變數開記憶體單元。程式開頭的指標說明幹什麼呢,也是開記憶體單元,為的是放門牌號碼。無論樓大樓小那怕是一間屋,它的指標,也就是門牌號碼,都一般大,只佔乙個記憶體單...

C 中的物件指標和物件引用

在c 中,可以說明指向類的資料成員和成員函式的指標。指向資料成員的指標格式如下 型別說明符 類名 指標名 指向成員函式的指標格式如下 型別說明符 類名 指標名 參數列 例如,設有如下乙個類a 定義乙個指向類a的資料成員c的指標pc,其格式如下 int a pc a c 再定義乙個指向類a的成員函式f...