Объявление класса без статики - PullRequest
0 голосов
/ 21 марта 2011

у меня есть class Queue; У меня есть эти переменные, определенные в этом классе ... int head, tail;

Одна из функций проверяет if (head==tail), однако я не могу объявить head и tail равными 0 в этой функции, иначе каждый раз, когда я вызываю эту функцию, она сбрасывается сама ...

Как я могу объявить head и tail равными 0 без статических переменных ... мне нужно сделать конструктор по умолчанию?

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Вы можете сделать это в конструкторе; более конкретно в списке инициализации конструктора!

class Queue
{
  int head, tail;
  public:
    Queue() : head(0), tail(0) {}
          // ^^^^^^^^^^^^^^^^ this is called initialization-list!
};

В списке инициализации вы можете инициализировать все ваши переменные!

Если это выглядит страшно, вы также можете сделать это:

class Queue
{
  int head, tail;
  public:
    Queue() 
    {
        head = 0;
        tail = 0;
    }
};

Но первый подход предпочтителен , так как это инициализация, а второй - присвоение!

Прочтите этот FAQ: Должны ли мои конструкторы использовать "списки инициализации" или "присваивание"?

1 голос
/ 21 марта 2011

Да, в C ++ любые нестатические переменные должны быть инициализированы в методе, и хорошим выбором является конструктор (или, возможно, метод init(), в зависимости от того, что вы делаете)

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