[C con Clase] problema con matriz
Steven Davidson
steven en conclase.net
Vie Jul 6 15:31:22 CEST 2007
Hola Miguel,
El pasado 2007-07-05 04:15:55, miguel escribió:
m> Buenas noches Steven (y cualquier persona que lea este mensaje)
[CORTE]
m> no estoy seguro y por eso me gustaría aclarar el punto, pero el hecho de que haya declarado
m> float matriz;
m> en algo que yo entiendo como un campo (creo que es así que se llama cuando uno crea una variable dentro de una clase), y luego haga:
Sí. A veces se llama "dato o variable miembro", "propiedad", o incluso "atributo".
m> clase{
m> float matriz[][]={{1,2,3},{4,5,6},{7,8,9}};
m> en algo que se me ocurre que pueda ser un constructor (ya que viene después de lo que parece la declaración de la clase, pero a lo que le faltaría (quizás por esto fué tu "mirando exclusivamente la declaración de 'matriz'") el espacio para los parámetros o la declaración "class" para ser una clase (eliminando los dos renglones anteriores y aclarando mi duda), no haría que, aparte de el error que has mencionado, estuviera declarando dos variables diferentes con el mismo nombre?, si es así, habría conflicto en la compilación? o el compilador tomaría la última como una variable local?, pero entonces, cómo se haría para llegar a
Exactamente. Existirían dos variables: una local al "constructor" y otra "menos local" en el ámbito de la clase. Esto es análogo a hacer lo siguiente:
int func()
{
int i=0;
for( int i=1; i<100; i++ )
{
...
}
...
}
Aquí tendríamos dos variables diferentes con el mismo nombre, 'i'. Dentro del bucle 'for', usaríamos "su" variable 'i', que es local al bucle. No podríamos usar la variable 'i' local a 'func()', estando dentro del bucle 'for'.
> la otra sin tener conflicto? algo como this.matriz? y, de ser así, podría hacer una asignación this.matriz=matriz[0][0]? y/o inversa? matriz[0][0]=this.matriz? la verdad no tengo muy claro este punto y si pudieses (o cualquier otra persona que desee hacerlo) aclararme este punto te (se) lo agradecería enormemente.
Sí; así es. Usaríamos explícitamente el puntero 'this' para referirnos a los datos miembros. Por ejemplo,
class Algo
{
private:
int dato;
public:
Algo( int dato )
{
this->dato = dato;
}
};
Me temo que varias personas escriben código así. Personalmente, habría elegido otro nombre para el parámetro como por ejemplo '_dato', 'nDato', 'ddato', o algo por el estilo. Usar el mismo nombre de algo que ya existe son ganas de tener problemas aposta.
En cuanto a tu duda, no deberías tenerla, porque te has contestado a ti mismo. Al fin y al cabo, son dos variables declaradas correctamente aunque sean diferentes, porque están en diferentes ámbitos. En este caso, puedes usar el puntero 'this' para poder distinguir entre una y otra. Siguiendo tu ejemplo,
class Otro
{
private:
float matriz[3][3];
public:
Otro( float matriz[3][3] )
{
this->matriz[0][0] = matriz[2][2];
this->matriz[1][1] = matriz[1][1];
this->matriz[0][2] = matriz[2][1];
}
};
Espero haber aclarado la duda.
Steven
Más información sobre la lista de distribución Cconclase