2011-11-18 28 views
1
class A { 
int x; 
}; 

class B : public A { 
int y; 
}; 

B b; 

我知道b被認爲是B一個完整的對象和B包含爲A子對象的對象。混淆完整的對象和子對象

但有人向我指出這一點,

第3款,C++標準1.8

(1.8/3)對於每一個對象x的,有一些對象調用x的完整 對象,確定如下: - 如果x是一個完整的對象,那麼x是x的完整對象。 - 否則,x 的完整對象是包含x的(唯一)對象的完整對象。

在這裏,我發現所有的地方所有那些x的混淆的字眼,你能解釋一下我的例子嗎?

+2

這是從哪裏摘錄?我從來沒有聽說過完整的對象子對象gobbledygook。他們稱他們爲我來自的對象和課程。 –

回答

1

bbxy完整的對象和所述子對象Ab的。

+0

你的意思是'b'是'B'的完整對象嗎?我不明白'b'本身是完全的'b'對象嗎? – user103214

+0

@user:你也可以只說'b'是*完整的對象。 – Xeo

+0

我現在看到,沒有注意到它在爲宇宙中的每個物體說話。 – user103214

3

它的聲音對我說的「完整的對象」他們指的是由新的經營者退回,或存放在堆棧中爲局部變量的對象。例如,如果我們從上面的代碼開始,那麼b是x的完整對象。我們是如何得到這個的?通過按照我們的層次結構:

  1. 是(x)它自己的完整對象嗎?不,它是A的成員,因此是更大對象的一部分。 (A)它自己的完整對象?不,它是B的超類,因此是更大對象的一部分。
  2. 是(B)它自己完整的對象?是的,因爲對象B被聲明爲B型的

(如果B的,而不是被一個仍然較大的物體的一部分,那麼我們將不得不進一步上升的結構,找到完整對象)

+0

好分層的解釋。 +1 – Xeo

3

的報價是從C++ 11標準的1.8。更完全:

2)對象可以包含其他對象,稱爲子對象。子對象可以是成員子對象(9.2),基類子對象(子句10)或數組元素。不是任何其他對象的子對象的對象稱爲完整對象。

3)對於每一個對象x,有稱爲x的完整對象的一些對象,確定如下:

  • 如果x是一個完整的對象,那麼x是x完整對象。

  • 否則,x的完整的對象是包含x的(唯一的)對象的完整對象。

換句話說,考慮一下:

struct A { }; struct B : A { }; 

A x[10]; 
B y; 

現在x[1]是一個對象,其完整的對象是xy::A是一個對象,其完整的對象是y(和兩個子對象的類型A)。

這只是術語...