Clases y .h en C++

Iniciado por emom, 11 Diciembre 2015, 18:52 PM

0 Miembros y 1 Visitante están viendo este tema.

emom

Muy buenos dias, hace un tiempo decidi aprender C++ ya que considero que es un lenguaje eficaz asi que estoy creando aplicaciones con este. Uso el IDE de NetBeans, pero cuando creo una clase se crea un .h el cual contiene todos los metodos sin algun procedimiento y el .cpp el cual hace referencia a este .h y contiene una referencia a los objetos del .h, se que significa eso pero mi duda aqui es ¿Como puedo hacer herencia en las clases creadas de esta manera?
Otra pregunta si utilizo la declaracion que se le parece a Java:

class loquesea{
int queseyo;
}

¿Creen que haya problema para crear un .h posteriormente? ¿Es posible que mediante este procedimiento pueda crear una libreria dinamica? Gracias por su atencion.

Otra cosita mas, ustedes creen que Python es un buen lenguaje o estaria mejor aprender Ruby o C#.

Zodiak98

Simplemente incluyes la cabecera donde se encuentra la clase en la que quieres heredar. En C++ simplemente se necesita avisar que tal cosa existe, ya sea una clase, una función, etc,... y que está definida en algún lugar, así que si trabajarás con ella en 'x' file, tienes que indicarle que existe, es decir, el prototipo.

Acá te dejaré un ejemplo que hice rápido y sencillo:

//main.cpp
Código (cpp) [Seleccionar]

#include "ejemplo2.h"

using namespace std;

int main() {
    Persona Pedro(21, (char*)"Pedro");

    Pedro.mostrarDatos();
    Pedro.hablar();
    Pedro.caminar();

    cout << endl;

    Alien Marciano(576, (char*)"AFKG756");

    Marciano.mostrarDatos();
    Marciano.hablar();
    Marciano.caminar();

    cin.get();
    return 0;
}



//ejemplo1.h
Código (cpp) [Seleccionar]

#ifndef EJEMPLO1_H_INCLUDED
#define EJEMPLO1_H_INCLUDED

#include <iostream>
using namespace std;
class Persona {
public:
    Persona(int _edad, char* _nombre) : edad(_edad), nombre(_nombre) { }
    void caminar();
    void mostrarDatos();
    void hablar();
private:
    int edad;
    char* nombre;
};

#endif // EJEMPLO1_H_INCLUDED



//ejemplo1.cpp
Código (cpp) [Seleccionar]

#include "ejemplo1.h"

void Persona::caminar() {
    cout << nombre << " esta caminando..." << endl;
}

void Persona::mostrarDatos() {
    cout << "Nombre: " << nombre << "\nEdad: " << edad << endl;
}

void Persona::hablar() {
    cout << nombre << " esta hablando..." << endl;
}



//ejemplo2.h
Código (cpp) [Seleccionar]

#ifndef EJEMPLO2_H_INCLUDED
#define EJEMPLO2_H_INCLUDED

#include "ejemplo1.h"

class Alien : public Persona {
public:
    Alien(int _edad, char* nombre) : Persona(_edad, nombre) { }
};

#endif // EJEMPLO2_H_INCLUDED


Como observarás, en ejemplo2.h estoy haciendo herencia de la clase Persona y simplemente coloco la cabecera en donde está esa clase, es decir en ejemplo1.h.
Luego en el constructor de la clase Alien, llamo al constructor de la clase Persona para modificar las variables miembro. Ahora, si quieres incluir más funciones e ir trabajando directamente con esas variables miembro de la clase Persona sin tener que estar llamando funciones, simplemente las cambias de private a protected. Y así será menos tedioso, espero no haberte confundido con eso, es para que lo tengas en cuenta. :)

Sobre tu pregunta sobre cuál lenguaje es mejor, pues depende para qué lo quieras utilizar. Todo lenguaje tiene un gran potencial, pero depende de uno saber aprovecharlo. Un ejemplo sencillo sería, ¿cuál es mejor para aplicaciones de escritorio, C++ o C#? Aunque ambos sirven, C# te simplifica mucho la vida. ¿Y para un juego potente? C++ es el mejor candidato de ambos.

Saludos. :)