以物件方式看c 指標(一)

2021-06-18 00:03:06 字數 960 閱讀 3424

乙個指向zooanimal(乙個類)的指標是如何與乙個指向整型的指標或者指向template array的指標有所不同?

zoolanimal *px;

int *pi;

array< string > *pta;

以記憶體需求的觀點來說,沒有什麼不同。以上三種型別都有足夠的記憶體來放置乙個機器位址(通常是乙個word)。以上「指向不同型別的指標」間的差異,既不在於其指標表示方法不同,也不在於其內容(代表乙個位址)不同,

而是在於其所定址出來的物件(object)型別不同。也就是說,「指標型別」會教導編譯器如何解析某個特定位址中的記憶體內容及其大小。

zooanimal類定義如下:

class zooanimal;

zooanimal za( "zoey" );

zooanimal *pza = &za;

分析以上**:

圖1:非派生類的物件布局和指標布局

1、乙個指向位址1000的整數指標,在32位機器上,將涵蓋位址空間1000~1003(4個位元組)

2、如果string是傳統的8-bytes(包含乙個4-bytes的字元指標和乙個用來表示字串長度的整數),那麼乙個zooanimal指標將橫跨位址空間1000~1015(4+8+4)(?這個地方不是太明白,如上圖,int loc佔4個bytes,string 佔8個bytes,那4個bytes是vptr虛表佔的還是位址1000佔的?自己認為是vptr虛表佔的。)

那麼乙個指向位址1000而型別為void*的指標,將涵蓋怎樣的位址空間?這個我們是不知道的!這就是為什麼乙個型別為void*的指標只能夠含有乙個位址,而不能夠通過它操作所指物件的緣故。

學習《深入探索c++物件模型》所整理。

教你如何以物件的方式思考

寫給大家看的物件導向程式設計書 眾所周知,在深入某種程式語言或建模語言之前必須先熟悉物件導向思維過程。遺憾的是,許多軟體專業人員往往沒有花費適當的時間和精力來真正理解物件導向的基本概念,就匆忙地一頭扎入這些書中。這不是一本單純講解語法的程式設計書,也不是一本純粹的概念書,作者擺脫程式設計書容易陷入的...

C 以物件為成員的例子

using system using system.collections.generic using system.text namespace test 年月日 birthday.year,birthday.month,birthday.day,birthday.clock.to24 呼叫第四個...

c 物件指標

c 指向成員函式的指標好容易錯啊!include using namespace std class time void showtime 主要看 void time p3 p3 time showtime t2.p3 這幾串 第一行 定義指向time類公用成員函式的指標變數p3,void是函式型別...