给出c ++类Student和声明:
Student
类型的对象:Student a[10];
Student
类型对象的数组:
Student *a[10];
Student
类型的对象:
vector<Student> c;
Student
:vector<Student*> d
可以在不创建任何学生对象的情况下声明4个(可以多个)中的哪一个?
我最初的想法是所有这些(a,b,c,d),但我被告知只有指针(b和d)才可以在不创建对象的情况下声明。我希望对此有所澄清。感谢。
答案 0 :(得分:5)
2,3,4。 (1)已经有10名学生申报。 (2)指针数组是如此,在Student对象中不需要只需要学生令牌的声明(你可以只有&#34;类学生&#34;空声明它可以工作)。 (3)直到你没有把东西放在std中,向量是空的。但在这种情况下,您需要在范围内定义Student(例如&#34; class Student {};&#34;),因此限制比2更严格。 (4)与2相同。
答案 1 :(得分: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)
的东西。