Переменные после двоеточия в конструкторе - программирование

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

Я все еще изучаю С++ и пытаюсь понять это. Я просматривал код и видел:

point3(float X, float Y, floatZ) :
x(X), y(Y), z(Z)  // <----- what is this used for
{
}

В чем смысл "x (X), y (Y), z (Z)", сидящего рядом с параметрами конструктора?

4b9b3361

Ответ 1

Это способ вызова конструкторов членов класса point3. если x, y и z - float, то это всего лишь более эффективный способ записи этого

point3( float X, float Y, float Z):
{
   x = X;
   y = Y;
   z = Z;
}

Но если x, y и z являются классами, то это единственный способ передать параметры в их конструкторы

Ответ 3

В вашем примере point3 находится конструктор класса с тем же именем (point3), а материал в справа от двоеточия : перед открывающей скобкой { является список инициализации, который, в свою очередь, строит (т.е. инициализирует) point3 (и может также использоваться для передачи аргументов конструкторам в базовом классе [es], если они есть.)

Ответ 4

Инициализация члена, как указывали другие. Но важно знать следующее:

Когда аргументы имеют тип float или другие встроенные типы, нет явных преимуществ, кроме того, что использование инициализации члена, а не назначение (в теле конструктора) более идиоматично в С++.

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