C/Visual C - Objetos en C++ no en VC++

 
Vista:

Objetos en C++ no en VC++

Publicado por neo (40 intervenciones) el 07/02/2004 08:18:25
Hola tengo los siguientes problemas:
El primero es hay una forma de saber el nombre del objeto que se esta usando en ese momento.
por que necesitaria crear una lista con todos los nombres de los objetos instanciados para luego unirlos a un mini generador de eventos que me cree, el cual maneja el mouse y yo necesitaria saber en que objeto hizo el click el mouse para ejecutar el procedimiento correspondiente.
El segundo problema es de diseño yo tengo una clase padre, dentro de ella cree el controlador de errores, pero a mi se me ocurrio crear un sub clase que maneje los errores de la clase padre, de esta manera el codigo seria mas legible.¿como lo hago?, yo se como se deriva pero no se nada mas y tampoco se como ejecuto un metodo de la clase padre, ademas debo instanciar el objeto de la clase error.?
y el ultimo problema es cuando yo declaro un procedimiento con el parametro (...) como tomo el dato de los parametros osea

void suma(int valor1,...)
yo quiero sumar valor1 mas el segundo parametro que no es obligatorio, pero en este caso se lo pase
como se el valor del parametro.

Desde ya muchas gracias al que se digne a leer el mensaje completo y si me pueden dar una mano en cualquiera de los problemas se los voy agradecer.
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 en C++ no en VC++

Publicado por El Mogur (202 intervenciones) el 08/02/2004 18:06:55
Hola!

En C++ no hay forma directa de saber el nombre de un objeto en tiempo de ejecución. Sin embargo, puedes almacenar una lista con todos los punteros a los objetos que has ido creando, para tenerlos localizados.
Lo del ratón, una forma "sencilla" es la siguiente: creas una clase 'Rectangulo' o algo así, que guarde las esquinas superior-izquierda e inferior-derecha, del rectángulo ("botón"), y un método a ejecutar cuando se pulse sobre él (método virtual). Luego metes todos los 'rectángulos' que hay en tu pantalla en una lista; cuando el ratón genera un evento, recorres la lista mirando si la pulsación quedó dentro de cada uno de los rectángulos, y en caso afirmativo, llamas al método:

class CRectangulo {
public:
int x1, y1, x2, y2;
virtual void rectanguloPulsado() = 0;
}

y luego una lista con todos los rectángulos creados
std::list<CRectangulo*> listaBotones;

El gestor del evento:

void OnClick(int x, int y) {
for each (rect in listaBotones) {
if (estaDentro(x, y, in);
in->rectanguloPulsado;
}
}

Por último, por cada botón, tienes que crear una clase distinta:

class CMiBotonAceptar() {
public:
virtual rectanguloPulsado() {
// ...
};
}

El segundo problema no logro entenderlo r:-m

Por último, en el tercero, si la función suma siempre va a tener dos parámetros, no se utilizan los "...", pues eso se usa
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 en C++ no en VC++

Publicado por Muchas Gracias y mas dudas (40 intervenciones) el 09/02/2004 15:27:52
Te agradezco mucho tu dispocision a ayudar a los que recien empiezan como yo, en mi caso en la POO, no te hagas problema por el segundo problema, por que ya lo solucione, pero diculpame pero hay cosas de tu respuesta que no logro entender.

Por ejemplo no entiendo el funcionamoento de la clase rectangulo, osea nunca maneje listas, tiene algo que ver en la declaracion de la lista que este el nombre de la clase, lo que yo puedo intuir es lo siguiente vos en la lista vas guardando las instancias de la clase, luego en el for la recorres y ejecutas el metodo segun el objeto que corresponda dentro de la lista, ahora supongamos que sea el objeto de index 3 de la lista y hago un printf a su propiedad me va imprimir la propiedad del objeto 3 .

Y mi problema 3 es que pasa si yo le paso 4 parametros a la funcion suma como interpreto que parametro es y su contenido

Muchisimas gracias por entregar tu conocimiento tan librebemente como lo haces
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 en C++ no en VC++

Publicado por El Mogur (202 intervenciones) el 10/02/2004 10:18:26
Hola,

Si, la idea de la lista es la que tú dices; tenemos una lista de rectángulos, y en el for la recorremos, y vamos llamando al método de cada una de las instancias que aparecen en la lista.
Lo de que aparezca el nombre de la clase rectángulo en la declaración de la lista es porque la lista que puse es la que viene en la librería de C++, y se declara así: si quieres una lista de enteros (int):

std::list<int> miListaEnteros;

Si quieres una lista de punteros a rectangulos (CRectangulo*):

std::list<CRectangulo*> miLista;

y así. (hay que incluir list.h)

Y lo de la suma, busca en la ayuda por va_list, va_start, va_arg y va_end. De hecho, en la ayuda de C++ Builder, viene un ejemplo muy parecido al que tú quieres: una función que recibe un mensaje (char*), y una lista de enteros acabados con cero, los suma todos y escribe el mensaje y el resultado:

#include <stdio.h>
#include <stdarg.h>

/* calculate sum of a 0 terminated list */
void sum(char *msg, ...)
{
int total = 0;
va_list ap;
int arg;
va_start(ap, msg);
while ((arg = va_arg(ap,int)) != 0) {
total += arg;
}
printf(msg, total);
va_end(ap);
}

int main(void) {
sum("The total of 1+2+3+4 is %d\n", 1,2,3,4,0);
return 0;
}
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 en C++ no en VC++

Publicado por neo (40 intervenciones) el 10/02/2004 20:36:48
Hola mira ahora incluyo la list.h pero me tira 26 errores tenes idea de que puede ser,ademas la lista la declaras fuera del main, es para que sea global? no, ademas me parece que tengo que configurar el TC para usarla viste en linker, como lo tenes que configurar cuando usas graficos.
Me fije y list.h no se encuentra con todas las demas .h sino que esta en otro directorio con otras .h tengo que poner la direccion en el include

Muchas gracias otra vez
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