C/Visual C - Objetos

 
Vista:

Objetos

Publicado por neo (40 intervenciones) el 25/02/2004 20:42:14
Hola:
Saben que significa virual void nombre()=0
Para que sirve operator
y que es ponerlo const al final de la declaracion de metodo

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Objetos

Publicado por El Mogur (202 intervenciones) el 25/02/2004 21:47:18
Una a una...

1.- virtual int nombre() = 0;

En la declaración de una clase P, significa vairas cosas:
a) Los objetos de "esa clase" tienen una función nombre, que devuelve un entero.
b) Por el 'virtual', la implementación de esa clase puede ser sobreescrita por las clases hijas (digamos class H), es decir, pueden dar otra implementación distinta para la función. Después si tienes:
P *obj = new H();
obj->nombre();
se llama a la función nombre definida en la clase H, no en la clase P, a pesar de que obj es un puntero a P.
c) Por el '=0', la clase P NO IMPLEMENTA la función nombre, por lo que las clases hijas DEBEN implementarla. La clase P es lo que se llama clase abstracta, debido a que no implementa todas las funciones, así que no se pueden crear objetos de esa clase (esto, repito, es debido al '=0'; si no se pone, la clase P tendrá el código de nombre).

/-----/

2.- Operator sirve para sobrecargar operadores. El ejemplo tipico es tener una clase que representa los números complejos (aquello de a + b·i, donde i es la raiz de menos uno). Lo normal es tener algo como:
class Complejo {
public:
float a, b;
....
}
Y luego un montón de métodos distintos, para hacer operaciones con complejos, etc.
La cosa es que claro, si luego tu tienes dos complejos c1 y c2, lo que molaría sería poder poner algo como:

suma = c1 + c2;

en vez de

suma = c1.suma(c2);

y para eso vale el operator :)

[... en la clase complejo ... ]

Complejo operator+(Complejo op2) {
Complejo ret;
ret.a = a + op2.a; ret.b = b + op2.b;
return ret;
}

/------------/

3.- El const al final de un método de una clase significa que la función no cambia los atributos de ese objeto. Por ejemplo:

class Persona {
private:
int edad;
public:
int dameEdad() const {return edad;}
}

Es una buena costumbre poner el const en las funciones, porque a veces te verás en la necesidad de hacer una función como:

void escribeEdad(const Persona &persona) {
cout << persona.dameEdad();
}

Si la funcion dameEdad no la tienes declarada como const, no podrás hacerlo, porque el parámetro 'persona' de la funcion es constante (no puede cambiarse dentro de la función), y el compilador no sabe que dameEdad no lo cambia.
Así que, no hagas lo que yo, y si sobrecargas el operador suma de los complejos como he hecho antes, declara la función const, porque el this no lo cambia ;)

Un saludo.

P.D.: No sé si he ido demasiado despacio/deprisa en la explicación... pero eran tres preguntas que pueden dar para mucho si las quieres con detalle, o para poco si lo quieres saber por curiosidad...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por neo (40 intervenciones) el 26/02/2004 14:18:15
Mira te agradezco mucho por tu ayuda, ahora si tienes el tiempo suficiente para poder explicarme mas en detalle te lo agradeceria.
debido a que los conceptos los entendi pero me faltaria un poco mas de info para saberlo mejor

Muchas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por Nicolas (183 intervenciones) el 26/02/2004 17:54:46
En www.bruceeckel.com hay un libro del chabon q es buenisimo sobre objetos. Hay en C++ y en JAVA

Salu2!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Objetos

Publicado por El Mogur (202 intervenciones) el 27/02/2004 00:45:17
Justo lo que iba a decir yo :)

Thinking in C++ se llama. Es muy bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar