程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++編程中的細節--內容覆蓋

C++編程中的細節--內容覆蓋

編輯:C++入門知識

     一個簡單的示例來講解下這個問題。
[cpp] 
class Concrete 

public: 
private: 
    int val; 
    char c1; 
    char c2; 
    char c3; 
}; 
 
class Concrete1 

    public: 
    int val; 
    char bit1; 
}; 
class Concrete2 :public Concrete1 

    public: 
    char bit2; 
}; 
 
class Concrete3 :public Concrete2 

    public: 
    char bit3; 
}; 
 
 
int main() 

    Concrete2 *pc2; 
    pc2->val = 10; 
    pc2->bit1 = 'a'; 
    pc2->bit2 = 'b'; 
    Concrete1 * pc1_1, *pc1_2; 
    pc1_1 = pc2; 
    *pc1_2 = *pc1_1; 
 
    cout<< pc2->bit2<<endl; 
    return 0; 

本來bit2的值是b,但是通過賦值後 bit2的內容被pc1_1指向的對象中為分配的內存內容覆蓋了(因為編譯器有個內存對齊的操作,也就是上面的三個類的大小分別是8bytes,12bytes,16bytes)還是貼張圖吧。

當經過這個操作:
[cpp] 
pc1_1 = pc2; 
*pc1_2 = *pc1_1; 
對象pc1_1中未分配的內容就復制給了pc1_2指向的對象。

以後寫程序的時候還真得注意這些小細節。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved