看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 以下是我做的小小測試 不過我故意不寫成繼承 : class AA{ : public: : AA():x(0),a(0){} : int x; : int a; : void FOO(){cout<<"A"<<endl;} : }; : class BB{ : public: : BB():y(0.0),b(0.0){} : double y; : double b; : int z; : void FOO(){cout<<"B"<<endl;} : }; : int main() : { : BB *pb=new BB; pb 指向 BB 物件的第一個位置 ↙ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ / \ / \ / y b z : AA* p=(AA*)pb; 把pb這個位置當成是AA物件的位置丟給p 所以 p 也指向 BB 物件的第一個位置 (在p的眼中他是AA) pb, p ↙ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ / \ / \ / y b z : p->x=5; p->x 是第一個位置 所以應該是 y 的前四個 byte pb, p ↙ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | int 5 | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ / \ / \ / y b z : char *ptr=(char*)&pb->y; y 是BB物件的第一個位置 所以等同於把 pb 所指的位置傳給 ptr (只是type不同 不過沒查 反正都硬轉了) pb, p, ptr ↙ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | int 5 | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ / \ / \ / y b z : ptr-=4; 假如沒有 : cout<<(int)*ptr; 把 ptr 所指的位置當成 int 輸出 所以不意外會是 5 pb, p, ptr ↙ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | int 5 | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ / \ / \ / y b z : return 0; : } 那如果 ptr -= 4 的話呢? ptr pb, p ↙ ↙ +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ | int 5 | | | | +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ \ / \ / \ / y b z 就跑到前面了... : 如果ptr不-4 印的出5 : 可是我不懂為啥可以印 -- 人家可不是為了你才這樣做的哦! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.198.35.85 ※ 編輯: dendrobium 來自: 60.198.35.85 (01/29 23:39)
dendrobium:s/查/差 :p 01/29 23:42
loveme00835:推認真 01/29 23:49
kkroy:超讚! 感謝認真圖文教學! 01/30 13:11
VictorTom:推圖:) 01/30 13:22
alongalone:推推推....精美圖文講解 01/30 14:00
softwind:可是c++ primer裡面說 變數宣告和排列不一定相同 01/31 01:22
loveme00835:回樓上, 宣告跟定義是不同東西喔~ 01/31 02:31
loveme00835:用來解說的話很清楚呀 01/31 03:39
yayarice:推 02/01 04:27