herencia desde una clase concreta
Publicado por manuel (14 intervenciones) el 09/07/2006 18:40:09
hola.
es permitido hacer lo sgte:?
1) tengo una clase en dos archivos:
en archivo A.hpp tengo:
class A
{
public:
A();
~A();
int print();
};
y en archivo A.cpp tengo:
#include "A.hpp"
A::A(){}
A::~A(){}
int A::print()
{
cout << "clase A" << endl;
}
consideracion:
- esta clase ya esta "funcionando" un buen tiempo,
- OTRAS clases pueden estar utilizandola, conteniendola.
- los objetos de clase A puedo accesarlos mediante un puntero a clase A.
Ahora bien.
DESPUES DE UN TIEMPO veo la necesidad de crear una NUEVA clase, heredando de clase A.
si hasta hace poco 'class A' era considerada concreta, ahora la consideraria como clase base.
2) creo dos archivos mas:
archivo B.hpp contiene:
class B: public A
{
public:
B();
~B();
int print();
};
y archivo B.cpp contiene:
#include "B.hpp"
B::B():A(){}
B::~B(){}
int B::print()
{
cout << "clase B" << endl;
}
hasta aqui, clase B hereda de clase A.
El problema surge cuando quiera accesar las instancias de A y B mediante un puntero a clase A. Asi:
A *pa;
A aa;
B bb;
pa= &aa;
pa->print(); // OK. imprime "clase A"
pa=&bb;
pa->print;() // imprime "clase A". indeseado. debe imprimir "clase B".
para que funcione DEBO MODIFICAR 'A.hpp", asi:
class A
{
public:
A();
virtual ~A();
virtual int print();
};
ahora va a funcionar, PERO la duda es la sgte:
"al modificar A.hpp SOLO por querer derivar clase B, no puedo estar creando un problema para las otras clases que YA estaban utilizando la <<version antigua>> de A.hpp"?
saludos
es permitido hacer lo sgte:?
1) tengo una clase en dos archivos:
en archivo A.hpp tengo:
class A
{
public:
A();
~A();
int print();
};
y en archivo A.cpp tengo:
#include "A.hpp"
A::A(){}
A::~A(){}
int A::print()
{
cout << "clase A" << endl;
}
consideracion:
- esta clase ya esta "funcionando" un buen tiempo,
- OTRAS clases pueden estar utilizandola, conteniendola.
- los objetos de clase A puedo accesarlos mediante un puntero a clase A.
Ahora bien.
DESPUES DE UN TIEMPO veo la necesidad de crear una NUEVA clase, heredando de clase A.
si hasta hace poco 'class A' era considerada concreta, ahora la consideraria como clase base.
2) creo dos archivos mas:
archivo B.hpp contiene:
class B: public A
{
public:
B();
~B();
int print();
};
y archivo B.cpp contiene:
#include "B.hpp"
B::B():A(){}
B::~B(){}
int B::print()
{
cout << "clase B" << endl;
}
hasta aqui, clase B hereda de clase A.
El problema surge cuando quiera accesar las instancias de A y B mediante un puntero a clase A. Asi:
A *pa;
A aa;
B bb;
pa= &aa;
pa->print(); // OK. imprime "clase A"
pa=&bb;
pa->print;() // imprime "clase A". indeseado. debe imprimir "clase B".
para que funcione DEBO MODIFICAR 'A.hpp", asi:
class A
{
public:
A();
virtual ~A();
virtual int print();
};
ahora va a funcionar, PERO la duda es la sgte:
"al modificar A.hpp SOLO por querer derivar clase B, no puedo estar creando un problema para las otras clases que YA estaban utilizando la <<version antigua>> de A.hpp"?
saludos
Valora esta pregunta


0