3

Tengo una clase Ruleta donde uno de sus atributos es un objeto de tipo Crupier. Necesito inicializar dicho objeto dentro del constructor de la clase Ruleta.

He intentado lo siguiente pero no funciona, así que agradecería si alguien me explica cuál es la manera correcta de hacerlo:

Ruleta(Crupier crupier); //en el .h

Ruleta::Ruleta(Crupier crupier)
{

crupier_=crupier("atributo1","atributo2"); //en el .cc (crupier_ es el atributo de tipo Crupier que tiene la clase Ruleta)

}
horro
  • 195
  • 6
Mateo803
  • 109
  • 3

1 Answers1

5

La inicialización de variables miembro se debería realizar de esta otra forma:

Ruleta::Ruleta(Crupier crupier)
  : crupier_(crupier)
{
}

Ya que así se invoca únicamente el constructor copia de Crupier. Inicializar las variables miembro dentro de las llaves del constructor tiene sus implicaciones: primero se invoca el constructor por defecto de Crupier y, a continuación, se invoca el operador de asignación de Crupier.

Por otro lado, tal y como estás declarando el constructor de Ruleta estás haciendo una copia innecesaria de crupier, ya que pasas la variable por valor. En estos casos es mejor usar una referencia:

Ruleta::Ruleta(Crupier const& crupier)

O, si usas C++11 o superior y Crupier implementa el constructor adecuado, también puedes usar la semántica de movimiento:

Ruleta::Ruleta(Crupier crupier)
  : crupier_(std::move(crupier))
{ }
eferion
  • 49,291
  • 5
  • 30
  • 72
  • Vale mencionar que ciertos tipos de variables *solo* se pueden inicializar así (referencias, constantes, non-constructibles por defecto). – Aconcagua Dec 17 '19 at 13:19