Какова цель этого объявления c ++? - PullRequest
0 голосов
/ 19 августа 2010

struct Student {

         Student(){

         }
   };

И перечисление:

   enum studenttype_t { levelA = 0, levelB = 1, levelC = 2 };

Тогда где-то еще объявлено:

   vector<Student *> student;

Может ли оно использоваться следующим:

   student[levelA] = new Student();

Если так, что означает student[levelA]?это 0 в этом случае?и какова функция последнего утверждения, то есть student[levelA] = new Student();?спасибо

Ответы [ 3 ]

5 голосов
/ 19 августа 2010

Да, levelA равно 0. C ++ допускает автоматическое преобразование значения enum в int (в отличие от C #, которое требует явного приведения).

student[levelA] = new Student(); означает выделение памяти в куче, создание объекта Student в этой памяти и сохранение адреса нового объекта в первом элементе вектора student. Однако нет необходимости в элементе 0 в векторе - когда он был создан, он имел длину 0 - так что это фактически неопределенное поведение.

student.push_back(new Student()); говорит о добавлении нового объекта к следующему (в настоящее время первому) элементу вектора.

2 голосов
/ 19 августа 2010

Это точно , что означает student[LevelA].Вектор похож на массив, но расширяемый.Все, что

enum studenttype_t { levelA = 0, levelB = 1, levelC = 2 };
vector<Student *> student(5); // need a size, else defaults to zero.
student[levelA] = new Student();

делает, - это создает такой вектор (из Student указателей) и создает первый (индекс 0).

1 голос
/ 19 августа 2010

levelA - это константа, 0. student - это вектор, а student [levelA] - нулевой элемент этого вектора.Элементы вектора имеют тип Student *, т.е. указатели на объекты Student.

student[levelA] = new Student();

создает экземпляр student [0] с новым классом Student.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...