Переменные после двоеточия в конструкторе
Я все еще изучаю 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++.
Очевидным преимуществом является то, что если аргументы принадлежат пользовательским классам, эта инициализация члена приведет к вызовам для копирования конструкторов, в отличие от конструкторов по умолчанию, если это делается с использованием присваиваний (в теле конструктора).