Эй, я пытаюсь переключиться с инициализации моих переменных в конструкторе на использование списка инициализатора конструктора.
Так что вместо того, чтобы писать
Class::Class(int width, int height) {
this->width = width;
this->height = height;
}
Я делаю это:
Class::Class(int width, int height) :
width(width),
height(height) {
}
Это все работает, но теперь моя проблема … Допустим, у меня есть следующий конструктор:
Class::Class(int width, int height) {
this->width = width;
this->height = height;
this->state.setCurrState(this->state.stateMenu);
this->state.setPrevState(this->state.getCurrState());
}
«state» — это просто объект класса «State», который я создаю в своем заголовке. Функции setCurrState и setPrevState имеют тип void и просто устанавливают приватную переменную класса.
Как мне конвертировать конструктор? Я знаю, что можно написать функции в списке инициализатора, но функции, которые я хочу добавить, ничего не возвращают … они недействительны, поэтому я не знаю, как бы я их назвал?
Class::Class(int width, int height) :
width(width),
height(height)
// call functions here... but how?
{
}
Большое спасибо, я надеюсь, что вы можете мне помочь <3
Нет никакого дополнительного смысла и преимущества для вызова этих функций в списке инициализатора, по крайней мере, в вашем случае.
Просто вызовите их в теле конструктора.
Важная заметка:
Вы сказали state
является членом Class
, Так на уровне конструктора, state
еще не построено, то строить его само по себе бессмысленно:
state.setCurrState(state.stateMenu);
state.setPrevState(state.getCurrState());
Попробуйте написать хороший конструктор для state
Класс для установки curr / prev в начальные состояния.
Простое решение: оставить инициализирующие функции в теле конструктора.
Чуть более сложное решение:
setCurrState
а также setPrevState
не формально инициализация вашего state
объект, они просто меняют его «состояние» (без каламбура) после того, как оно было инициализировано.
Если вы считаете их семантически инициализируя ваш объект состояния, вы можете также формализовать его, включив их в конструктор состояний (который должен получить необходимые состояния и установить их сразу). Затем вы можете инициализировать его в списке инициализатора.
Добавьте функцию, которая возвращает State
:
State GiveMeAState() {
State state;
state.setCurrState(state.stateMenu);
state.setPrevState(state.getCurrState());
}
и используйте его в вашем списке инициализации:
Class::Class(int width, int height) :
width(width),
height(height),
state(GiveMeAState()) {
}