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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C++, duda con las clases
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C++, duda con las clases  (Leído 4,123 veces)
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
C++, duda con las clases
« en: 7 Julio 2015, 20:22 pm »

Estoy aprendiendo programacion en C++ y al llegar a las clases me he perdido con eso de público y privado. No entiendo qué quiere decir con que las clases privadas solo se pueden modificar desde la función, ¿qué finalidad práctica tiene hacer una clase privada a diferencia de una pública?, ¿son lo mismo las clases que las estructuras?

Gracias de antemano.


En línea

Justicia es dar a cada uno lo que se merece
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #1 en: 7 Julio 2015, 21:22 pm »

En C++, las clases y las estructuras son prácticamente lo mismo. La única diferencia es que las estructuras, por defecto, todos sus miembros son públicos, y en las clases pasa al contrario, son privados.

En cuanto a ala utilidad práctica, te voy a dar un ejemplo:
Imagínate que tienes una clase que guarda el DNI, el nombre y dirección de una persona. Como podrás suponer, una vez hemos ingresado los datos no se pueden modificar (sería ilegal XD). Para prevenir que el usuario pueda modificar las variables, se hacen privadas y se crean las funciones 'getter' y si es preciso las funciones 'setter', las cuales permiten o bien solo visualizar el contenido de la variable o solamente modificarlo.

Espero que se haya entendido


En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #2 en: 7 Julio 2015, 21:47 pm »

Y ¿como edito una clase privada?
En línea

Justicia es dar a cada uno lo que se merece
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: C++, duda con las clases
« Respuesta #3 en: 7 Julio 2015, 22:20 pm »

Bueno si nunca has visto programacion orientada a objetos se podria decir que las estructuras se podrian asemejar pero en la realidad son cosas muy distintas

No te quiero confundir por eso te aconsejo leerte un libro sobre poo
estan los libros de deitel y tambien los de "pensando en c++" porque te podria enseñar algunos ejemplos en codigo pero si tovias eres nuevo en la poo no tendria caso

saludos....
En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #4 en: 7 Julio 2015, 22:28 pm »

¿Que quieres decir? Voy a presuponer que la clase la has creado tu (en caso contrario, si no tiene las funciones getter o setter es imposible visualizar o sobreescribir el valor respecticamente). Ejemplo:

Código
  1. #include <iostream>
  2.  
  3. class Persona {
  4.        public:
  5.                Persona(const char *lpszName, const char *lpszDireccion, const char *lpszDNI);
  6.  
  7.                const char *getName();
  8.                const char *getDireccion();
  9.                const char *getDNI();
  10.  
  11.        private:
  12.                const char *m_lpszName;
  13.                const char *m_lpszDireccion;
  14.                const char *m_lpszDNI;
  15. };
  16.  
  17. int main() {
  18.        Persona persona = Persona("Pepe", "Calle falsa Nº 123", "1254687321-P");
  19.  
  20.        std::cout << "El nombre de la persona es: " << persona.getName() << std::endl;
  21.        std::cout << "La dirección de la persona es: " << persona.getDireccion() << std::endl;
  22.        std::cout << "El DNI de la persona es: " << persona.getDNI() << std::endl;
  23.  
  24.        std::cin.get();
  25.        return 0;
  26. }
  27.  
  28. Persona::Persona(const char *lpszName, const char *lpszDireccion, const char *lpszDNI) {
  29.        m_lpszName = lpszName;
  30.        m_lpszDireccion = lpszDireccion;
  31.        m_lpszDNI = lpszDNI;
  32. }
  33.  
  34. const char *Persona::getName() {
  35.        return m_lpszName;
  36. }
  37.  
  38. const char *Persona::getDireccion() {
  39.        return m_lpszDireccion;
  40. }
  41.  
  42. const char *Persona::getDNI() {
  43.        return m_lpszDNI;
  44. }

Como ves, en el constructor le pasamos los datos de una persona. A partir de aquí, no podremos modificar el valor de las variables de la clase porque son privados. Sin embargo, podremos visualizarlos porque hemos creado las funciones 'getter', las cuales sirven para visualizar el contenido de las variables.
« Última modificación: 7 Julio 2015, 22:31 pm por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #5 en: 8 Julio 2015, 23:39 pm »

¿Y qué función tiene un constructor?
En línea

Justicia es dar a cada uno lo que se merece
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #6 en: 9 Julio 2015, 01:40 am »

El constructor es un método (para que me entiendas, función perteneciente a una clase) especial. Este método sirve para inicializar la clase (por ejemplo, inicialuzar las variables privadas) y es llamado cuando declaras un objeto. Al igual que las funciones, puedes sobrecargarlo.

En el caso de la clase de ejemplo que te he puesto, el constructor es el siguiente:
Código
  1. Persona(const char *lpszName, const char *lpszDireccion, const char *lpszDNI)

Como podrás ver, al principio no lleva ni 'int', ni 'void' ni ningún tipo de variable. Esto es porque se da por defecto void. Por ejemplo, esto también sería válido:
Código
  1. void Persona(const char *lpszName, const char *lpszDireccion, const char *lpszDNI)

Como ya se ha dicho, el constructor sirve para inicializar la clase, por lo que sólamente podrás usarlo cuando declaras el objeto, como puedes ver en el código que te dejé de ejemplo:

Código
  1. int main() {
  2.        Persona persona = Persona("Pepe", "Calle falsa Nº 123", "1254687321-P");

COSA MUY IMPORTANTE: ¡¡EL CONSTRUCTOR DEBE TENER EL MISMO NOMBRE QUE LA CLASE!!
« Última modificación: 9 Julio 2015, 01:52 am por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #7 en: 9 Julio 2015, 01:55 am »

Si creas un constructor con parámetros que debes introducir, pero después no se lo asignas a un objeto, el compilador te dará un error

Código que da error:

Código
  1. class FOO {
  2. public:
  3. FOO(int nParametro1, int nParametro2);
  4.  
  5. void metodo1();
  6. void metodo2();
  7. };
  8.  
  9. int main() {
  10. FOO foo;
  11.  
  12. return 0;
  13. }

Mensaje de error: No existe ningún constructor predeterminado para la clase "FOO" (Mensaje de Visual Studio v12.0)

Código bueno:
Código
  1. class FOO {
  2. public:
  3. FOO(int nParametro1, int nParametro2);
  4.  
  5. void metodo1();
  6. void metodo2();
  7. };
  8.  
  9. int main() {
  10. FOO foo = FOO(5, 6);
  11.  
  12. return 0;
  13. }

Para simplificar, también lo puedes poner así:
Código
  1. FOO foo(5, 6)
En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #8 en: 9 Julio 2015, 01:59 am »

Si la clase tiene un constructor que solo necesite un parámetro, puedes hacer lo siguiente:

Código
  1. class FOO {
  2. public:
  3. FOO(int nParametro1);
  4.  
  5. void metodo1();
  6. void metodo2();
  7. };
  8.  
  9. int main() {
  10. FOO foo = 20;
  11.  
  12. return 0;
  13. }

Si has usado la clase string, seguro que has usado/visto algo parecido a esto:

Código
  1. #include <string>
  2.  
  3. int main() {
  4. std::string cadena = "Esto es una cadena";
  5.  
  6. return 0;
  7. }

Como ves, esta el la forma simplificada. Esto se puede hacer porque la clase string tiene un constructor de un solo parámetro de tipo const char *
En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: C++, duda con las clases
« Respuesta #9 en: 9 Julio 2015, 10:03 am »

Ostias tío, gracias por todo esto, es un detallado, me has.ayudado mucho.
En línea

Justicia es dar a cada uno lo que se merece
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con Clases
.NET (C#, VB.NET, ASP)
Senior++ 6 3,046 Último mensaje 24 Febrero 2012, 10:48 am
por Senior++
Duda con las clases [c++] « 1 2 »
Programación C/C++
Lotux5 11 5,235 Último mensaje 20 Abril 2013, 02:29 am
por rir3760
Duda con clases « 1 2 »
Java
robertito_prado 12 6,209 Último mensaje 1 Agosto 2013, 18:13 pm
por robertito_prado
[Duda] Clases abstractas
Java
ElChulon 3 2,431 Último mensaje 31 Julio 2016, 16:36 pm
por hectornunezrivas
[Duda] Problema con javascript CLASES [Solucionado]
Desarrollo Web
dobleamarilla 6 2,494 Último mensaje 7 Septiembre 2018, 23:50 pm
por dobleamarilla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines