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

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

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

Другие вопросы по тегам