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