[C++]¿Comunicacion entre clases?

Iniciado por skorpion32, 25 Julio 2011, 22:38 PM

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

skorpion32

Saludos espero me puedan ayudar

Verán estoy aprendiendo C++ y tengo la siguente duda

Quiero comunicar una una clase con otra (estas clases estan en archivos distintos), ¿para poder hacerlo se usan los archivos de cabecera?

Vi que había que definir prototipos en un archivo.h y en otro archivo.cpp definir dichos métodos como tal, que correspondan con el archivo de cabecera.

Despues para poder usar los metodos de esa clase en otra, bastaria con incluir el #include "archivo.h" y ya podria acceder a sus metodos y atributos con un objeto de dicha clase , ¿no?

Mi duda es si esto es "Valido" o correcto, yo lo hago así , pero me entró la duda.

Saludos!!
_________________________
En java esto bastaba con incluir el mismo paquete y ya podia instanciar a la otra clase

Queta

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

Acermax

Creo que skorpion no se refiere a la amistad entre clases, sino simplemente a usarla.

Si es así, tal y como lo haces y dices es correcto.


Queta

Convendría leer los hilos antes de comentar ;).
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

skorpion32

Sii esos son metodos validos , pero van mas alla de lo que planteo en mi duda inicial , si yo tengo DOS ARCHIVOS DISTINTOS , osea un claseuno.cpp y otro clasedos.cpp , estas no se conoceran , lo unico que io querria hacer es generar un objeto de la otra clase y usarlo, a menos que declare sus prototipos de una en un por ej . clasedos.h , y este incluirlo . Aparte de la relacion de estas dos clases. mi duda es si ese metodo es valido ¿?

Queta

Sí. Mira este ejemplo que acabo de hacer, a ver si es lo que realmente quieres:

main.cpp

Código (cpp) [Seleccionar]
#include <cstdio>
#include "clase.h"

int main()
{
clase1 _clase1;
clase2 _clase2;

printf("clase1: %d\n", _clase1.suma(5, 5));

printf("clase2: %d\n", _clase2.resta(1));

getchar();

return 0;
}


clase.h

Código (cpp) [Seleccionar]
class clase1
{
public:
int suma(int, int);
};

class clase2
{
public:
int resta(int);
};


clase1.cpp

Código (cpp) [Seleccionar]
#include "clase.h"

int clase1::suma(int a, int b)
{
return a + b;
}


clase2.cpp

Código (cpp) [Seleccionar]
#include "clase.h"

clase1 _clase1;

int clase2::resta(int a)
{
int numero = _clase1.suma(2, 3);

return numero - a;
}
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

Foxy Rider

¿ Podrías describir más que es lo que querés hacer ? Me llegan múltiples formas de resolverlo a la cabeza, pero cada una tiene su pro y contra, y están pensadas para resolver distintos problemas ...

Saludos.

P.S: Uff, hace milenios que no entro a este subforo ! x'D

skorpion32

Gracias muchachos , ya me quedo claro  :D

PiroskY

la verdad que me parece una forma horrenda y engorrosa eso de poner la cabecera en un archivo y desarrollarlas en otro

Yo hago un .h para cada clase, y debajo de la clase desarrollo sus métodos
Y si los métodos son extremadamente cortos, los desarrollo ahí mismo.


Respondo lo que creo es tu duda:

Supongo que si te aventuraste con las clases, ya pasaste por las estructuras,
De ser así, te comento, el principal cambio es el encapsulamiento.
(o es lo que importa de momento, según interpreto tu duda)

Vos con estructuras podes acceder a sus atributos simplemente con estructura.atributo

Ahora, si estas usando clases como corresponde, todos tus atributos van a ser privados y solo vas a poder acceder a ellos mediante métodos de esa clase (los cuales, obviamente, tienen que ser públicos)
Entonces, si tu clase tiene un atributo Dato1, vos vas a tener que mediante un método, devolver ese dato o un puntero al mismo
Y si lo vas a querer modificar, vas a tener que crear un método que reciba el nuevo valor de Dato1 y reemplazar al anterior

Acá pongo un ejemplito:

Main
Código (cpp) [Seleccionar]

#include <iostream>
#include <string.h>
#include "Class.h"

using namespace std;

int main()
{
    clsPersona persona1;

    cout << "Ingrese la edad" << endl;
    persona1.setEdad();

    cout << "Ingrese el nombre" << endl;
    persona1.setNombre();

    cout << endl;
    cout << persona1.getNombre() << endl;
    cout << persona1.getEdad() << endl;

return 0;
}


Class.h
Código (cpp) [Seleccionar]

using namespace std;

class clsPersona
{
    private:
        char nombre[30];
        int edad;

    public:
        char* getNombre(){return this->nombre;};
        int getEdad(){return this->edad;};
        void setNombre(){cin >> this->nombre;};
        void setEdad(){cin >> this->edad;};
};


Por otro lado:

"Después para poder usar los metodos de esa clase en otra, bastaria con incluir el #include "archivo.h" y ya podria acceder a sus metodos y atributos con un objeto de dicha clase , ¿no?"

Me genera mucha intriga lo que dijiste ahí.
Hablas de usar los métodos de una clase para otra clase?

"podría acceder a sus atributos con un objeto de dicha clase".
Por las dudas te aclaro, cuando vos instancias una clase, estas creando un "paquete" de sus atributos, no es que la clase tiene sus atributos y vos accedes a ellos mediante el objeto.
Vos podes tener muchos objetos de una misma clase, y cada uno tiene su atributo nombre por ejemplo, cada uno independiente del otro.

espero algo de esto te sirva, y no haber escrito tanto al dope.

saludos