2017-04-20 64 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)之类的东西。