閭d箞鎴戜滑鐪熺殑灝辨病鍔炴硶鐩存帴淇敼綾葷殑縐佹湁鏁版嵁鎴愬憳浜嗗悧錛?br>
鏉ョ湅涓孌典唬鐮侊細
1 #include <iostream>
2 using namespace std;
3
4
5 class A
6 {
7 private:
8 // a & b are private members of class A
9 int a;
10 double b;
11 public:
12 // initialize a & b as value 0
13 A() : a(0), b(0) {}
14
15 public:
16 // for display the value of a & b
17 int GetA();
18 double GetB();
19 };
20
21 int A::GetA()
22 {
23 return a;
24 }
25
26 double A::GetB()
27 {
28 return b;
29 }
30
31 int _tmain(int argc, _TCHAR* argv[])
32 {
33 A test;
34
35 cout << "before pointer access:\n"
36 << " test.a = " << test.GetA() << "\n"
37 << " test.b = " << test.GetB() << "\n" << endl;
38
39 // access object test of class A by pointer
40 int* privateA = reinterpret_cast<int*>(&Test);
41 double* privateB = reinterpret_cast<double*>(&Test) + 1;
42
43 // value changing by pointer!
44 *privateA = 1;
45 *privateB = 2.5;
46
47 cout << "after pointer access:\n"
48 << " test.a = " << test.GetA() << "\n"
49 << " test.b = " << test.GetB() << "\n" << endl;
50
51 return 0;
52 }
53
榪愯鍚庤緭鍑虹粨鏋滀負錛?br>before pointer access:
test.a = 0
test.b = 0
after pointer access:
test.a = 1
test.b = 2.5
鍙互鐪嬪埌錛岃櫧鐒舵垜浠凡緇忓皢 A::a 鍜?A::b澹版槑涓?private 錛屼絾鍦ㄥ己澶х殑鎸囬拡闈㈠墠錛岀被鐨勪換浣曠粏鑺傞兘鏆撮湶鏃犻仐銆?br>
鏌愮紼嬪害涓婏紝綾葷殑涓涓璞″彲浠ョ湅浣滃寘鍚笉鍚岀被鍨嬪厓绱犵殑鏁扮粍錛屽叾鏁版嵁鎴愬憳鐨勫湴鍧鍋忕Щ鐢辨暟鎹垚鍛樺湪綾誨畾涔変腑鐨勯『搴忓喅瀹氣斺旂被瀵硅薄鐨勫湴鍧鎸囧悜綾諱腑絎竴涓瀹氫箟鐨勬暟鎹垚鍛樼殑鍦板潃錛涚浜屼釜琚畾涔夌殑鏁版嵁鎴愬憳鐨勫湴鍧鍙栧喅浜庣涓涓暟鎹垚鍛樼殑綾誨瀷錛岃嫢絎竴涓負 int 鍨嬶紝鍒欏啀鍋忕Щ 4 涓瓧鑺? sizeof(int) )鍗沖緱鍒扮浜屼釜鏁版嵁鎴愬憳鐨勫湴鍧錛堟湁鏃朵篃涓嶄竴瀹氭槸榪欐牱錛屽涓婁緥涓紝鐢變簬綾誨瀷瀵歸綈鐨勭紭鏁咃紝瀹為檯鍋忕Щ 8 涓瓧鑺? sizeof(double) )鎵嶅緱鍒扮浜屼釜鏁版嵁鎴愬憳鐨勫湴鍧錛屽叿浣撳唴瀹逛笉鍦ㄦ湰鏂囪璁鴻寖鍥村唴錛夈?br>
鎵浠ュ嵆浣夸綘灝嗗叾浠栨墍鏈夌粏鑺傞兘闅愯棌鍦?cpp 涓紝浣嗗ご鏂囦歡涓笉鍙伩鍏嶅湴浼氬嚭鐜扮鏈夋暟鎹垚鍛樼殑澹版槑銆傝岀被鐨勫叾浠栫敤鎴峰彧瑕佽兘鐪嬪埌榪欎釜澹版槑錛屽氨鑳芥帹綆楀嚭綾諱腑鍚勬暟鎹垚鍛樼殑鐩稿鍦板潃鍋忕Щ錛屼粠鑰岀敤鎸囬拡杞繪澗瀹炵幇瀵圭鏈夋垚鍛樼殑璁塊棶銆?br>
涓婁緥鍙縐佹湁鏁版嵁鎴愬憳榪涜浜嗛獙璇侊紝鏈夊叴瓚g殑鍙互璇曡瘯鐪嬬敤鍑芥暟鎸囬拡鑳藉惁璁塊棶縐佹湁鎴愬憳鍑芥暟銆?

]]>