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: Aug 2007
Ubicación: Zaragoza
Posts: 78
Poder: 12
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: Aug 2007
Ubicación: Zaragoza
Posts: 78
Poder: 12
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.180
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
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: 1.937
Poder: 13
escafandra Va camino a la famaescafandra Va camino a la fama
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: Aug 2007
Ubicación: Zaragoza
Posts: 78
Poder: 12
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 07-04-2011 23:02:54
clase que contiene otra clase definida de forma posterior astwin OOP 5 20-02-2009 11:26:55
Duda sobre creación de clase (Free y Destroy) adlfv OOP 3 09-10-2005 06:11:16
Duda sobre operadores Luis M. Varios 2 28-03-2005 19:21:22
sobrecarga de operadores zuriel_zrf Varios 1 11-09-2003 13:08:36


La franja horaria es GMT +2. Ahora son las 20:14:37.


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