Переменные после двоеточия в конструкторе [дубликат]
На этот вопрос уже есть ответ здесь:
Я все еще изучаю C++ и пытаюсь понять его. Я просматривал какой-то код и увидел:
point3(float X, float Y, float Z) :
x(X), y(Y), z(Z) // <----- what is this used for
{
}
Что означает "x(X), y(Y), z (Z)", сидящий рядом с параметрами конструктора?
3 ответа:
Это способ вызова конструкторов членов класса point3. если x, y и z являются поплавками, то это просто более эффективный способ записи этого
point3( float X, float Y, float Z): { x = X; y = Y; z = Z; }
Но если x, y и z являются классами, то это единственный способ передать параметры в их конструкторы
В вашем примере
point3
является конструктор класса с тем же именем (point3
), а материал справа от двоеточия:
перед открывающей скобкой{
является списком инициализации , который в свою очередь строит (т. е. инициализирует) переменные-членыpoint3
(и может также использоваться для передачи аргументов конструкторам в базовом классе[es], если таковые имеются.)
Инициализация членов, как указывали другие. Но гораздо важнее знать следующее:
Когда аргументы имеют тип float или другие встроенные типы, нет никаких явных преимуществ, за исключением того, что использование инициализации члена, а не присваивания (в теле конструктора) более идиоматично в C++.
Явное преимущество заключается в том, что если аргументы принадлежат определяемым пользователем классам, то инициализация этого члена приведет к вызовам конструкторов копирования, а не конструкторы по умолчанию, если они выполняются с использованием назначений (в теле конструктора).