2017-04-20 17 views
0

鑑於C++類學生和聲明爲:聲明矢量和指針而無需創建任何類型的對象

  1. 的陣列,可容納Student類型的10個對象:Student a[10];
  2. ,可容納10個指針的數組 Student *a[10];
  3. 的STL矢量c可以容納Student類型的10個對象:: vector<Student> c;
  4. 類型的對象
  5. ,可容納型 Student對象的指針10 STL的vector:vector<Student*> d

哪4(可超過一個以上)可以在不產生任何學生對象聲明?我最初的想法是,他們都(a,b,c,d),但我被告知只有指針(b和d)纔可以聲明而不創建對象。我希望對此做一些澄清。謝謝。

回答

5

2,3,4。 (1)已申報10名學生。 (2)是指針數組,因此在Student對象的聲明中不需要Student對象(您可以只有「class Student」空聲明才能工作)。 (3)直到你不把東西放在std中的向量是空的。但是在這種情況下,你需要讓學生在範圍內定義(比如「class Student {};」),所以限制比2更嚴格。 (4)與2相同。

+0

我不認爲3需要一個默認的構造函數。 – juanchopanza

+0

是的,我認爲你是對的。但是你需要學生不被聲明,但爲了創建模板而定義。 –

+0

是的,你一定需要一個完整的類型來實例化一個向量。 – juanchopanza

2

在2,4 ,您使用的類型是Student *,它只是一個指向0xff0f0f之類地址的數字。在這種情況下不會創建該對象,因爲您正在創建一個地址,它可以指向任何東西,甚至什麼都不指向。所以,以後你必須將它們指向實際的對象。把它們想象成像int address_array[10]這樣的定義。

另外,1與3不同。當您創建一個像Student a[10]這樣的數組時,您將在內存中創建10個Student對象,併爲其中的每個對象調用默認構造函數。在3中,當你定義vector<Student> a時,沒有真正發生,直到你實際上調用a.push_back(some_student)之類的東西。