Переменные после двоеточия в конструкторе [дубликат]


На этот вопрос уже есть ответ здесь:

Я все еще изучаю 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 17

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++.

Явное преимущество заключается в том, что если аргументы принадлежат определяемым пользователем классам, то инициализация этого члена приведет к вызовам конструкторов копирования, а не конструкторы по умолчанию, если они выполняются с использованием назначений (в теле конструктора).