Hacer que dos objetos hablen entre si
En primer lugar, un saludo. Tengo un programa en c++ con dos clases como estas:
class ClaseA{
public:
void funcionA();
}
class ClaseB{
public:
void funcionB();
}
Lo que quiero hacer ahora es esto:
void ClaseB::funcionB(){
// .....
objetoTipoA.funcionA();
}
La cuestión es que objetoTipoA tiene que ser un objeto en concreto. ¿Cual es la mejor forma de hacerlo? ¿Pasarle un puntero del objeto en
cuestión en el constructor de la clase ClaseB y almacenarlo? ¿O hay una forma mejor?
Gracias por anticipado.
class ClaseA{
public:
void funcionA();
}
class ClaseB{
public:
void funcionB();
}
Lo que quiero hacer ahora es esto:
void ClaseB::funcionB(){
// .....
objetoTipoA.funcionA();
}
La cuestión es que objetoTipoA tiene que ser un objeto en concreto. ¿Cual es la mejor forma de hacerlo? ¿Pasarle un puntero del objeto en
cuestión en el constructor de la clase ClaseB y almacenarlo? ¿O hay una forma mejor?
Gracias por anticipado.
Otra opción, siempre que resulte razonable considerar que una ClaseB "sea" una especie de ClaseA, es derivar ClaseB de ClaseA:
ClaseA
{
public:
virtual void funcionA();
};
ClaseB : public ClaseA
{
public:
void funcionA(); // pasa por alto ClaseB::funcionA()
};
// después, para usar funcionA() desde ClaseB:
ClaseA* objetoA;
objetoA = new ClaseB; /* después de todo, una ClaseB es una especie de ClaseA */
objetoA->funcionA(); /* va a llamar a funcionA declarada en ClaseB */
objetoA->ClaseA::funcioA(); /* llama a funcionA() de la clase base ClaseA */
delete objetoA;
// Claro que esto sólo tiene sentido cuando ClaseB puede derivarse lógicamente de ClaseA; si no, las otras dos opciones son mejores.
// Alejandro
ClaseA
{
public:
virtual void funcionA();
};
ClaseB : public ClaseA
{
public:
void funcionA(); // pasa por alto ClaseB::funcionA()
};
// después, para usar funcionA() desde ClaseB:
ClaseA* objetoA;
objetoA = new ClaseB; /* después de todo, una ClaseB es una especie de ClaseA */
objetoA->funcionA(); /* va a llamar a funcionA declarada en ClaseB */
objetoA->ClaseA::funcioA(); /* llama a funcionA() de la clase base ClaseA */
delete objetoA;
// Claro que esto sólo tiene sentido cuando ClaseB puede derivarse lógicamente de ClaseA; si no, las otras dos opciones son mejores.
// Alejandro
