Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Llamadas a funciones entre clases

Estas en el tema de Llamadas a funciones entre clases en el foro de C/C++ en Foros del Web. Buenos días, miren tengo una duda en cuanto a las llamadas a funciones entre dos clases. Supongamos que tengo dos clases A y B y ...
  #1 (permalink)  
Antiguo 20/01/2014, 05:12
 
Fecha de Ingreso: enero-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Pregunta Llamadas a funciones entre clases

Buenos días,

miren tengo una duda en cuanto a las llamadas a funciones entre dos clases.

Supongamos que tengo dos clases A y B y yo quiero llamar de la clase A a la clase B me creo un objeto de la clase B con un include del B.h

//En A.h
#include B.h

class A{
...
public:
void metodoA();
...
};

y el alguna parte del código puedo crear el objeto B->metodoB();

Pero si también quiero llamar de la clase B a la clase A no me deja hacer un include de A.h, me dice que es cíclico.


//En B.h
#include A.h <--------------Error
class B{
...
public:
void metodoB();
}


¿cómo podría hacer dos llamadas, en A.h de B->metodoB() y viceversa, en B.h de A->metodoA()?.

Gracias de antemano.
  #2 (permalink)  
Antiguo 20/01/2014, 09:15
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Llamadas a funciones entre clases

Tal vez deberías replantearte el cómo implementar lo que quieres hacer, no creo que sea una buena idea eso que dices.

  #3 (permalink)  
Antiguo 20/01/2014, 23:27
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Llamadas a funciones entre clases

Vamos a analizar el problema ;)
Sabemos que cpp y c tambien, ejecutan liea tras linea, así se hace:

1 esta linea;
2 despues esta;
3 despues esta...;

¿No?

Sabemos que todo lo que vamos usar "DEBE" estar declarado previamente.

Bien, teniendo eso claro analicemos lo que pasa.

digamos que vamos a declarar ambas clases:

class A{
// aquí to el rollo blablabla.
// Aquí para poder usar un objeto B tenias que tener class B ya creada. correcto ¿no?
// Eso tiene arreglo ¿no? ¡Si claro que si! Declaras la clase B antes de la A ;)
}

Continuamos...

Ahora según la solución que hemos decidido íbamos a poner la clase B delante de la clase A :D

class B{
// Pero un momento! ¡AHORA ME FALTA LA A! :/
// Bueno venga va eso tiene arreglo XD, ponemos la clase A delante XDD
};

Creo que a estas alturas ya lo pillas XDD
¿Como vas a llamar entre ambas clases si tienen que estar declaradas una antes de la otra?
No se puede, daría incontables avisos es mas creo que seria imposible, pero no lo afirmo por que desconozco la solución.
La solución para poder llamar a funciones de ambas clases es crear una 3ª clase que herede las 2 primeras.

class C : public A, Public B{
// Heredamos todo lo publico de ambas clases.
// A Eso se le conoce por herencia múltiple.
};



Herencia Múltiple:
https://www.youtube.com/watch?v=p7RR...A6721&index=39

pero aconsejo mirar antes herencia simples:
https://www.youtube.com/watch?v=FE3Y...A6721&index=36

Mirar todos los videos sobre clase de este canal:
Virtualteacherhttps://www.youtube.com/playlist?list=PLD534A65FD9DA6721

Estos 2 canales también, y aun son mejores:
Outkast: https://www.youtube.com/playlist?lis...A837BC005D3614

Este para mi es el mejor, eh aprendido muchicimo con el:
Paueky: https://www.youtube.com/user/paueky/...ew=1&flow=list
http://minidosis.org/C++/

Si alguien conoce alguna solución a eso pues a mi también me interesa saber :D
Pero si miras los vídeos veras que lo que quieres hacer no tiene fundamento.
Siempre puedes partir una clase en mas clases, o unirlas en un nueva heredando de otras que es prácticamente lo mismo que quieres hacer ;)
Suerte! Esos vídeos son oro, sobre todo los últimos y según tengo entendido puede que pronto dejen de estar ahí, los últimos de paueky, pues esta trabajando en un nuevo proyecto llamado minidosis 2, no se si continuara el minidosis 1, una vez me lo dijo que no lo mantendría, así que no lo se. :(
Así que date prisa en mirar todos. Yo los descargue ^^

Última edición por vangodp; 20/01/2014 a las 23:32
  #4 (permalink)  
Antiguo 21/01/2014, 09:36
 
Fecha de Ingreso: enero-2014
Mensajes: 6
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Llamadas a funciones entre clases

Gracias por la respuesta vangodp pero me autocontesto.

la solución sería la siguiente:

//En A.h

#ifndef A_H
#define A_H

#include B.h

class B;

class A{

public:
void metodoA();
}

#endif

// En alguna parte del código hacer B->metodoB



// En B.h

#ifndef B_H
#define B_H

class B{

public:
void metodo B();
}

#endif

//En alguna parte del código A->metodoA();

Esto es porque el compilador necesita saber que existe una clase a la que puede hacer referencia, en este caso en la clase A, y cuando el compilador intente compilar la clase B establecerá esa definición.
  #5 (permalink)  
Antiguo 21/01/2014, 12:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Llamadas a funciones entre clases

pues ya esta ;).
Hoy se aprende algo mas :)
No sabia si se podía hacer esto: class B;
Lo que si se es que cpp tiene apaño para todo :D
Por eso me encanta ese lenguaje.
Como en las funciones, basta estar definido antes para que funcione.
Muy bueno si señor, me va a ser muy útil a mi.

Etiquetas: clases, funciones, include
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:43.