Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/06/2008, 16:38
desgraciado
 
Fecha de Ingreso: septiembre-2003
Mensajes: 20
Antigüedad: 20 años, 8 meses
Puntos: 2
Pregunta Respuesta: TYPEID y HERENCIA

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;
}