使用指針在類外修改類的私有變量

類的私有變量在類外是不能訪問的,可是這種保護機制僅僅是在編譯器編譯階段來檢查的,和const是同樣,經過指針,咱們仍是能夠訪問而且修改的,由於一個類的對象僅僅包括本身的成員數據,全部的成員函數和靜態成員變量都是一個實體,該類的全部對象共享這個實體,所以對象的長度是該類全部auto變量的長度,若是該類或者其基類有虛函數,生成的對象還要加上虛函數表的指針的大小,就是vptr的大小,4個字節。關於虛函數和虛函數表,能夠參看http://blog.csdn.net/xie376450483/archive/2010/10/25/5964345.aspxios

 

數據成員在對象中的排列順序和類聲明時候的數據的前後順序同樣,對應着內存分佈,若是是多重繼承,順序和繼承的前後順序有關。其數據分佈不作過多解釋。ide

這樣咱們能夠在類外使用一個類對象指針,而後經過指針修改來獲取他的成員地址,進而修改其值函數

參看Demothis

spa

運行結果以下.net

剛開始我也納悶爲何num1的值沒有修改,不是應該是26麼?指針

哦,原來我忽略了內存對齊!找到緣由後咱們修改ptr1=ptr1+4;運行結果就正確了code

相關文章
相關標籤/搜索