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

clases virtuales

Estas en el tema de clases virtuales en el foro de C/C++ en Foros del Web. Buenas. Tengo un problema con unas clases virtuales. A.h class A { private: double latitude; public: A(); ~A() {}; virtual void connect() = 0; virtual ...
  #1 (permalink)  
Antiguo 30/03/2012, 05:00
 
Fecha de Ingreso: marzo-2012
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
clases virtuales

Buenas.

Tengo un problema con unas clases virtuales.

A.h

class A {

private:
double latitude;
public:
A();
~A() {};

virtual void connect() = 0;
virtual double getLatitude() = 0;
};

B.h

class B: public A{
B();
virtual ~B();

void connect() = 0;
double getLatitude() = 0;
}

Despues en el .h de mi aplicacion, creo un A *puntero; Para despues en el .cpp crear un objeto de B y asignárselo a puntero.Pero no se cómo hacer la asignación, todo lo que intento me da error de compilación.

B tipoB;
puntero = tipoB;

o

puntero = new B();

He mirado ejemplos, pero aunque lo haga como dicen, no hay manera.

Alguien me puede echar una mano?

gracias.
  #2 (permalink)  
Antiguo 31/03/2012, 09:02
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: clases virtuales

La clase B tiene que implementar las funciones connect y double para poder se instanciada (no puede tener funciones virtuales puras, es decir, sin implementación)

Además, si pones "= 0" en un método, tienes que declararlo virtual (estas definiendo una función virtual sin implementación), no puedes poner sólo = 0.

A lo que voy es a que no puedes instanciar una clase que contenga métodos abstractos.


B.h

Código C++:
Ver original
  1. class B: public A{
  2. B();
  3. virtual ~B();
  4.  
  5. void connect();
  6. double getLatitude();
  7. }

B.c
Código C++:
Ver original
  1. void B::connect(){
  2. //Implementación
  3. }
  4.  
  5. double B::getLatitude(){
  6. //Implementación
  7. }

Etiquetas: clases, int, virtuales
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 12:01.