Entonces creé un constructor en una clase Point.

Clase

class Point {
public:
    Point(); //declare default constructor
    double x;
    double y;
};

Constructor

Point::Point()  {
  x=0.0;
  y=0.0;
}

Ahora, cuando imprimo los valores predeterminados de xey en main, se muestran como 0 y 0, lo que espero.

Sin embargo, solo por diversión, cambiaron la declaración del constructor a lo siguiente:

Declaración de nuevo constructor

Point::Point()  {
  double x=0.0;
  double y=0.0;
}

Ahora, cuando llamé al mismo constructor, obtuve el valor de xey como 2.16703e-314 y 6.95313e-310 respectivamente. Ahora, conozco el propósito de un constructor. Lo que quería saber era qué sucede cuando agrego el tipo de variable ax e y cuando declaro un constructor que comienza a comportarse así. Espero que la pregunta esté clara. Feliz de aclarar si no lo es.

-5
Arpan Ganguli 15 oct. 2018 a las 23:19

2 respuestas

La mejor respuesta

El primer caso

Point::Point() {
  x=0.0;  // refers to class member variable x 
  y=0.0;  // refers to class member variable y
}

El segundo caso

Point::Point()  {
  double x=0.0; //Creating local variable with same name as class member variable
  double y=0.0; //Creating local variable with same name as class member variable
}

Los comentarios explican lo que está sucediendo en cada caso. Entonces, en el segundo caso, cuando intenta acceder a la variable miembro de la clase, obtiene un valor basura ya que está creando una variable local con el mismo nombre que la variable miembro de la clase (ubicación de memoria diferente en comparación con la variable miembro de la clase).

0
Shrikanth N 15 oct. 2018 a las 20:41

En C ++ se le permite "sombrear" variables. Cuando "sombrea" una variable, crea una nueva con el mismo nombre que una en un alcance "externo". Ahora el nombre se refiere a la variable interna y los cambios no se reflejan en la externa.

Los compiladores con configuraciones de advertencia decentes le dirán cuando haga esto.

Point::Point()  {
  double x=0.0;
  double y=0.0;
}

Aquí, x y y están sombreando las variables miembro Point::x y Point::y. Entonces x=0.0 no cambia el x en Point.

6
Yakk - Adam Nevraumont 15 oct. 2018 a las 20:25