una que programacion polimorfismo metodos herencia derivada constructores clases clase c++ constructor ctor-initializer

que - polimorfismo c++



Variables después de los dos puntos en un constructor (3)

En su ejemplo, point3 es el constructor de la clase con el mismo nombre ( point3 ), y el material a la derecha de los dos puntos : antes del corchete de apertura { es la lista de inicialización , que a su vez construye (es decir, inicializa) el miembro de point3 variables (y también se pueden usar para pasar argumentos a los constructores en la clase base [es], si corresponde)

Esta pregunta ya tiene una respuesta aquí:

Todavía estoy aprendiendo C ++ y tratando de entenderlo. Estaba mirando a través de un código y vi:

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

¿Cuál es el significado de "x (X), y (Y), z (Z)" al lado de los parámetros del constructor?


Es una forma de invocar a los constructores de los miembros de la clase point3. si x, y, yz son flotantes, entonces esta es solo una forma más eficiente de escribir esto

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

Pero si x, y y z son clases, entonces esta es la única manera de pasar parámetros a sus constructores


Inicialización de miembros como otros han señalado. Pero es más importante saber lo siguiente:

Cuando los argumentos son del tipo float u otros tipos incorporados, no hay ventajas claras, excepto que el uso de la inicialización de miembros en lugar de la asignación (en el cuerpo del constructor) es más idiomático en C ++.

La clara ventaja es que si los argumentos son de clases definidas por el usuario, esta inicialización de miembro daría lugar a llamadas para copiar constructores en lugar de constructores predeterminados si se hace usando asignaciones (en el cuerpo del constructor).