Hola, no soy bueno explicando.
Lo que sucede es que en c++ las funciones no son virtuales por defecto asi que si tu quieres usar el metodo B sobre la clase A
Ejemplo:
A* b = new B()
b->print() // print debe ser virtual en A si no se usa el print A
asi que supongo lo que te falta es declarar el metodo virtual
bueno aqui van unos ejemplos
sin virtual
Código:
#include <iostream>
using namespace std;
class A
{
public:
void print()
{
cout << "A" << endl;
}
};
class B : public A
{
public:
void print()
{
cout << "B" << endl;
}
};
int main()
{
A* b[4];
b[0] = &A();
b[1] = &A();
b[2] = &B();
b[3] = &B();
for(int i = 0; i < 4; i++)
{
cout << typeid(*b[i]).name() << endl;
b[i]->print();
}
return 0;
}
con virtual
Código:
#include <iostream>
using namespace std;
class A
{
public:
virtual void print()
{
cout << "A" << endl;
}
};
class B : public A
{
public:
void print()
{
cout << "B" << endl;
}
};
int main()
{
A* b[4];
b[0] = &A();
b[1] = &A();
b[2] = &B();
b[3] = &B();
for(int i = 0; i < 4; i++)
{
cout << typeid(*b[i]).name() << endl;
b[i]->print();
}
return 0;
}
te recomiendo que uses una interface
Código:
#include <iostream>
using namespace std;
class I
{
public:
virtual void print() = 0;
};
class A : public I
{
public:
void print()
{
cout << "A" << endl;
}
};
class B : public I
{
public:
void print()
{
cout << "B" << endl;
}
};
int main()
{
I* b[4];
b[0] = &A();
b[1] = &A();
b[2] = &B();
b[3] = &B();
for(int i = 0; i < 4; i++)
{
cout << typeid(*b[i]).name() << endl;
b[i]->print();
}
return 0;
}