elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Crear puntero a clase abstracta y problema usando vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Crear puntero a clase abstracta y problema usando vector  (Leído 2,840 veces)
cNoob

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Crear puntero a clase abstracta y problema usando vector
« en: 7 Enero 2018, 19:24 pm »

Hola!
Estoy haciendo un programa que consiste en una biblioteca que puede almacenar una serie de items, que son guardados en un vector (ficha). La clase CFicha es abstracta y es la clase base para todas las demás (libros, revistas, etc...). Aquí les dejo la clase CBiblioteca:
Código
  1. class CBiblioteca
  2. {
  3.    vector<CFicha *> ficha;
  4.  
  5.    public:
  6.        //basico
  7.        CBiblioteca();
  8.        CBiblioteca(const CBiblioteca&);
  9.        ~CBiblioteca();
  10.        CBiblioteca operator=(const CBiblioteca&);
  11.        CFicha* operator[](unsigned);
  12.  
  13.        //funciones
  14.        void AnyadirFicha(CFicha&);
  15.        int BuscarFicha(const string) const;
  16.        //eliminar siguiente ?
  17.        bool EliminarFicha(unsigned);
  18.        bool MostrarFicha(unsigned);
  19.        bool MostrarBiblioteca(void);
  20. };
Mi problema se da en el método 'operator=' y 'AnyadirFicha()', los cuales son definidos así:
Código
  1. CBiblioteca CBiblioteca::operator=(const CBiblioteca& bib)
  2. {
  3.    //primero vaciamos la matriz
  4.    for(int i = 0; i < ficha.size(); i++)
  5.        delete ficha[i];
  6.  
  7.    ficha.clear();
  8.  
  9.    //ahora copiamos los elementos
  10.    for(int i = 0; i < bib.ficha.size(); i++)
  11.        ficha.push_back(new CFicha(*(bib.ficha[i])));
  12.  
  13.    return *this;
  14. }
y
Código
  1. void CBiblioteca::AnyadirFicha(CFicha& ficha)
  2. {
  3.    ficha.push_back(new CFicha(ficha));
  4. }
ambas me dan los mismos dos errores:
 'class CFicha' has no member named 'push_back'
 invalid new-expression of abstract class type 'CFicha'

pero no entiendo por que interpreta que push_back es un método de CFicha y no de la clase vector, así como mi otra duda de si se puede crear un objeto abstracto con el operador new.


« Última modificación: 7 Enero 2018, 19:26 pm por cNoob » En línea

Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Crear puntero a clase abstracta y problema usando vector
« Respuesta #1 en: 7 Enero 2018, 20:17 pm »

Código
  1. void CBiblioteca::AnyadirFicha(CFicha& ficha)
  2. {
  3.    ficha.push_back(new CFicha(ficha));
  4. }

Fíjate que llamaste al parámetro igual que al miembro vector. Así que cuando escribes ficha, interpreta que es el parámetro. Tendrías que poner "this->ficha" para acceder, o mejor, cambiar los nombres. Por este motivo entre otros, a los campos privados de una clase, se les suele poner un '_' al inicio ("_ficha"). Sefún nomenclatura.
En cualquier caso, cambia algún nombre.

Luego, no, no puedes crear una clase abstracta. la razón de las clases abstractas es ser heredadas y que se implementen sus métodos. No tiene lógica crear un objeto de una clase abstracta, porque tendrá métodos sin definir.


En línea

cNoob

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Crear puntero a clase abstracta y problema usando vector
« Respuesta #2 en: 7 Enero 2018, 20:42 pm »

Awww dios, que error más tonto el primero  :-X
Respecto al segundo, mi intención es crear un puntero de una clase base para almacenar en el un objeto de una clase derivada de esta. En algún libro de POO he visto que hacen eso y me suena que era algo por el estilo de lo que estoy haciendo yo .-.
En línea

Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Crear puntero a clase abstracta y problema usando vector
« Respuesta #3 en: 7 Enero 2018, 20:44 pm »

Sin duda puedes tener punteros a clases abstractas, nada de eso es incorrecto. lo que no puedes es crear un objeto de una clase abstracta. Tienes que crear un objeto de una de sus clases derivadas.
En línea

cNoob

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Re: Crear puntero a clase abstracta y problema usando vector
« Respuesta #4 en: 8 Enero 2018, 16:13 pm »

y al hacer
Código
  1. ficha[i] = new CFicha
no estoy usando punteros solamente?
En línea

Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Crear puntero a clase abstracta y problema usando vector
« Respuesta #5 en: 8 Enero 2018, 19:57 pm »

Pero no puedes instanciar una clase abstracta, sea puntero o no. Una clase abstracta no se puede instanciar por sí sola, tiene que heredarse de ella.
En línea

ThunderCls


Desconectado Desconectado

Mensajes: 455


Coder | Reverser | Gamer


Ver Perfil WWW
Re: Crear puntero a clase abstracta y problema usando vector
« Respuesta #6 en: 9 Enero 2018, 20:39 pm »

Como te dicen anteriormente es un error de concepto querer instanciar una clase abstracta. Te recomiendo profundizar en temas de polimorfismo y clases abstractas.

Correcto:
TAbstract *abs = new TDerived();
abs->método(); // polimorfismo

Incorrecto:
TAbstract *abs = new TAbstract();
En línea

-[ "…I can only show you the door. You're the one that has to walk through it." – Morpheus (The Matrix) ]-
http://reversec0de.wordpress.com
https://github.com/ThunderCls/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
clase abstracta y herencia
Java
m@o_614 1 1,903 Último mensaje 27 Mayo 2012, 18:43 pm
por adastra
como apuntar a una struc de otra clase con un puntero de otra clase?. xD
Programación C/C++
anonimo12121 3 3,371 Último mensaje 21 Junio 2012, 09:58 am
por anonimo12121
Unificar código en clase abstracta « 1 2 »
Java
CaTZ 11 5,035 Último mensaje 16 Enero 2015, 10:33 am
por CaTZ
Pasar vector de puntero a char a las funciones[C] « 1 2 »
Programación C/C++
NOB2014 16 10,254 Último mensaje 22 Junio 2016, 14:56 pm
por NOB2014
C++ OOP vectores de clases - como crear un vector de una clase « 1 2 3 »
Programación C/C++
GisiNA 22 15,081 Último mensaje 21 Febrero 2017, 17:12 pm
por GisiNA
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines