@newuser8888

Как разобраться в конструкторах класса и инициализации переменных в ней, в чем различие?

1-й вариант:
class Token_stream {
public:
  Token_stream() : buffer(0), full(false) {}
  void putback(Token t);
  Token get();

private:
  Token buffer;
  bool full;
};

Token_stream ts;

2-й вариант:
class Token_stream {
public:
  void putback(Token t);
  Token get();

private:
  Token buffer = 0;
  bool full = false;
};

Token_stream ts;

Есть ли какая-то разница?
И почему так конструктор не работает:
class Token_stream {
public:
  Token_stream() {
    buffer = 0;
    full = false;
  }
  void putback(Token t);
  Token get();

private:
  Token buffer;
  bool full;
};

Token_stream ts;
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Есть ли какая-то разница?

Разница в том, что инициализация bool full = false; выполняется для любого конструктора, у которого поле full не перечислено в списке инициализации.
Конечное состояние конструируемого объекта одинаково в обоих случаях.

И почему так конструктор не работает:

Потому что у класса Token отсутствует конструктор по умолчанию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 05:01
999999 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект