Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-02-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
Duda operadores de clase

Hola, no sé si es que no entiendo bien el uso de operadores sobrecargados,
pero no consigo usarlos.

Intento poder acceder a un elemento mediante el operador [], pero que el tipo del
elemento sea distinto del tipo de la clase.

Os pongo un ejemplo básico, defino la siguientes clase:

Código:
class miClase
{
	private:
		int a[2];
	public:
		miClase() { a[0] = 1; a[1] = 2;}
                int & operator[] (int pos){ return a; }
};

void main()
{
     miClase * z = new miClase();
     int b = z[1];
}
Supuestamente podría acceder al elemento número [1] y obtener un valor de tipo INT tal y como
defino en mi operador de clase

pues todo lo contrario, obtengo error de compilación "E2034 Cannot convert 'miClase' to 'int'

¿alguien sabe que hago mal?

gracias
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #2  
Antiguo 21-02-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
alguna idea?
__________________
http://www.qdsSoftware.com
Responder Con Cita
  #3  
Antiguo 21-02-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues a ver, de esto no sé gran cosa, pero de entrada, el operador debería regresar una entrada del arreglo y no todo el arreglo ¿no? Tampoco entiendo el uso de los apuntadores, ¿por qué no devuelves directamente la entrada?

Prueba así:

Código:
class miClase
{
	private:
		int a[2];
	public:
		miClase()
		{
			a[0] = 1;
			a[1] = 2;
		}
		
        int operator[] (int pos){ return a[pos]; }
};

int main(int argc, char *argv[])
{
     miClase * z = new miClase();
     int b = (*z)[1];
}
// Saludos
Responder Con Cita
  #4  
Antiguo 21-02-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El error es que estás aplicando el operador [] a un puntero no a un objeto de la clase. Cuando se aplica a un puntero funciona como un índice.

Fíjate en esta implementación:

Código:
class miClase
{
	private:
		int a[2];
	public:
		miClase() { a[0] = 1; a[1] = 2;}
                int& operator[] (int i){ return a[i]; }
};

void main()
{
  miClase z;        // esto en C++ es perfectamente válido y muy útil.
  int b = z[1];
}
o en esta como apuntó roman. Un poco mas engorrosa pero con punteros:
Código:
void main()
{
  miClase *z = new miClase;
  int b = (*z)[1];   // Aplicamos el operador [] a un objeto no a un puntero.
}
Tu decides según tus necesidades.


Saludos.
Responder Con Cita
  #5  
Antiguo 22-02-2012
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
efectivamente ese era el problema

muchas gracias
__________________
http://www.qdsSoftware.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar mi clase a una clase de 3 capas o lo mas parecido elarys OOP 2 08-04-2011 00:02:54
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 12:26:55
Duda sobre creación de clase (Free y Destroy) adlfv OOP 3 09-10-2005 07:11:16
Duda sobre operadores Luis M. Varios 2 28-03-2005 20:21:22
sobrecarga de operadores zuriel_zrf Varios 1 11-09-2003 14:08:36


La franja horaria es GMT +2. Ahora son las 21:51:19.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi