• Ir al contenido
  • Ir a la navegación
  • Ir al buscador
 
Infoudo
ING English
Directorio WAP para móvil, Tablet, iPhone o Smartphone

Centro de Noticias de la Universidad de Oriente

Categorías

 

Inicio  |  Contacto  |  Posts  |  TIENDA PUBLISHOP  |  Sobre nosotros  |  Registro y Planes  |  Pagos  |  Donaciones

Ver Código QR de esta página

Campaña #AyudemosaYuli  |  Campaña #AyudemosaStephany.  |  ¿Interesado(a) en cursos y resolución de ejercicios de materias prácticas? Para más información, contáctenos por: Teléfono: +58 (412) - 8226575. WhatsApp y Telegram: +58 (426) - 6836955 o escriba al correo: [email protected]. Únete al grupo: SISTEMAS (UDOMO).

[»] **Musica para tu celular

WEB TRANSLATOR

LINK for English Language

Use this link for translate into English


+ Buscar en InfoUDO

 

Parte private y public de una clase en C++

Tweet
 

lunes julio 11, 2016

Uno de los principios fundamentales de la programación orientada a objetos es el encapsulamiento, esto se logra agrupando una serie de métodos (funciones) y atributos (variables) dentro de una clase.

Hemos visto que una clase tiene dos secciones: una pública y otra privada. Por principios de la programación orientada a objetos los atributos (variables) deben definirse en la parte privada y los métodos dependiendo si queremos que se los pueda llamar desde la main los definiremos de tipo público y si queremos que queden ocultos y solo puedan ser llamados dentro de la clase los definimos en la parte privada.

Problema 1:

Plantear una clase llamada Dado. Definir un atributo valor y tres métodos uno privado que dibuje una línea de asteríscos y otro dos públicos, uno que genere un número aleatorio entre 1 y 6 y otro que lo imprima llamando en este último al que dibuja la línea de asteríscos.

Programa:

#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

class Dado {
private:
    int valor;
    void separador();
public:
    void tirar();
    void imprimir();
};

void Dado::separador()
{
    cout<<"********************";
    cout<<"";
}

void Dado::tirar()
{
    srand (time(NULL));
    valor = rand() % 6 + 1;
}

void Dado::imprimir()
{
    separador();
    cout<<valor;
    cout<<"";
    separador();
}

void main()
{
    Dado d;
    d.tirar();
    d.imprimir();
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :

PartePublicPrivate1.zip

Analicemos como definimos las zonas privadas y públicas de una clase:

class Dado {
private:
    int valor;
    void separador();
public:
    void tirar();
    void imprimir();
};

El atributo valor y el método separador() como están antecedidas por la palabra clave private: significa que desde la main no se podrán acceder, es decir que si escribimos en la main lo siguiente se genera un error sintáctico:

void main()
{
    Dado d;
    d.separador(); //error
    d.valor=9; //error
    cin.get();
}

La ventaja de definir los atributos en la zona privada de la clase es que en el caso de haber un error lógico en nuestro programa el mismo queda encapsulado en una clase y es más fácil identificarlo. Por ejemplo pensemos que desarrollamos la clase Dado y cuando imprimimos su valor aparece el 9. Si hemos definido el atributo valor como private luego sólo los métodos de la clase pueden haberlo inicializado y por lo tanto el error está circunscrito a la clase Dado.

Desde la main cuando llamamos a los métodos públicos le antecediemos el nombre del objeto:

void main()
{
    Dado d;
    d.tirar(); //llamada al método tirar del objeto d
    d.imprimir(); //llamada al método imprimir del objeto d
    cin.get();
}

Dentro de la clase para llamar a otro método de la misma clase lo hacemos indicando solo el nombre del otro método (dentro del método imprimir llamamos al método separador por su nombre):

void Dado::imprimir()
{
    separador();
    cout<<valor;
    cout<<"";
    separador();
}

Importante

Una forma muy común de escribir la declaración de una clase es obviar la palabra clave private:

class Dado {
    int valor;
    void separador();
public:
    void tirar();
    void imprimir();
};

El compilador identifica todos los atributos y métodos que no se les antecede un modificador como private. Es muy común agrupar todos los atributos y métodos privados en la primer parte de la declaración de la clase y luego especificar los métodos públicos luego de la palabra clave public.

El lenguaje C++ inclusive nos permite especificar varias secciones privadas y públicas:

class Dado {
public:
    void tirar();
private:
    int valor;
    void separador();
public:
    void imprimir();
};

De todos modos esta forma de declarar la clase puede no ser muy ordenada.

En este problema tenemos que generar un valor aleatorio entre 1 y 6, utilizamos las funciones srand y rand que se encuentran en las librerías:

#include<cstdlib>
#include<ctime>

La función srand define una semilla inicial para la generación de números aleatorios y le pasamos como parámetro la hora y fecha actual (que la retorna la función time):

    srand (time(NULL));

Luego la función rand() retorna un valor entero entre 0 y RAND_MAX y luego mediante el operador matemático % (resto de una división) podemos acotar los valores enteros a obtener. Le sumamos 1 ya que queremos valores comprendidos entre 1 y 6:

    valor = rand() % 6 + 1;
  1. Desarrollar un programa que defina un vector de 5 enteros y muestre el mayor y menor elemento. En el constructor cargarlo con valores aleatorios entre 0 y 10. La clase debe utilizar solo la palabra clave public en la declaración de la clase.
Solución
#include<iostream>
#include<cstdlib>
#include<ctime>

using namespace std;

class Vector {
    int vec[5];
public:
    Vector();
    void mayor();
    void menor();
    void imprimir();
};

Vector::Vector()
{
    srand(time(NULL));
    for(int f=0;f<5;f++)
    {
        vec[f]=rand()%11;
    }
}

void Vector::mayor()
{
    int mayor=vec[0];
    for(int f=1;f<5;f++)
    {
        if (vec[f]>mayor)
        {
            mayor=vec[f];
        }
    }
    cout<<"Mayor elemento:";
    cout<<mayor;
    cout<<"";
}

void Vector::menor()
{
    int menor=vec[0];
    for(int f=1;f<5;f++)
    {
        if (vec[f]<menor)
        {
            menor=vec[f];
        }
    }
    cout<<"Menor elemento:";
    cout<<menor;
    cout<<"";
}

void Vector::imprimir()
{
    for(int f=0;f<5;f++)
    {
        cout <<vec[f]<<"-";
    }
    cout<<"";
}

void main()
{
    Vector vector1;
    vector1.imprimir();
    vector1.mayor();
    vector1.menor();
    cin.get();
}

Este proyecto lo puede descargar en un zip desde este enlace :PartePublicPrivate2.zip

— @INFOUDO.OFICIAL

— Síguenos en Facebook@INFOUDO.OFICIAL

Categorías: #C++, #


[0] Atrás | Directorio
« Inicio
Apps Infoudo
Apps Infoudo ¡Descarga el icono directo en el menú de tu equipo!
[»] Las mejores Apps para tu celular
[»] Imágenes Gratis


Comenta o lee lo que otros opinan

COMPÁRTELO:

Indica que te gusta y comparte

Me Gusta :)Facebook Tuiteame :)Twitter .WhatsApp .Telegram . LinkedIn

También te puede interesar:

NOCIONES BÁSICAS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS.
Material de Apoyo del Curso de Programación - Lenguaje C++ - Periodo (Feb - May) del año en curso
Parámetros por valor y por referencia de objetos
Parámetros por valor y por referencia de datos simples
Métodos constantes (const)
Parámetros de un método constante (const)
Definición de constantes (const)
Directiva #define
Puntero this
Métodos estáticos de una clase


« Destructor de la clase  |  Sobrecarga de métodos »
 
Apps Infoudo
 
Buscador:
Powered by Google:


Web móvil
Imágenes
La Web

 

Síguenos por RSS


Puedes leerlos mediante el navegador Firefox, lectores de noticias en la computadora o el móvil o usando el servicio de Feedburner de Google para recibir las notificaciones por correo electrónico.
RSS - Suscribirse usando Feedburner de Google

email Recibir las nuevas publicaciones de Infoudo por email

Atom


»Ir a URL
.....
Registra Gratis Tu Negocio
....
Sugerir un nuevo sitio WAP

...
¡Bloguea Ya!

..
Registro de Profesionales(Abogados, escritores, doctores, licenciados, ingenieros, etc.)
.
Soporte

Síguenos en las redes sociales

Síguenos en Facebook facebook.com/INFOUDO.OFICIAL Síguenos en Twitter @infoudomon Síguenos en Instagram @infoudooficial Síguenos en Telegram t.me/Infoudooficial
Síguenos en Facebook facebook.com/tuinfou Síguenos en Twitter @infoudomonagas
Síguenos en WhatsApp INFO UDO Síguenos en YouTube youtube.com/channel/UCuicPxpqv3C0p1qwaO1XSSQ
Síguenos en Facebook facebook.com/SergioAlemanFans Síguenos en Twitter @SergioAleman1 Síguenos en Instagram @sergioalemanfans
Síguenos en WhatsApp wa.me/qr/Y7Q232VLZPR5O1 Síguenos en Tiktok @sergioalemanoficial Síguenos en Tiktok @sergioalemanfans
Síguenos en Telegram t.me/SergioAlemanOficial Síguenos en YouTube youtube.com/channel/UCqcLSYCKx9pamla68nFMDkw
Síguenos en Facebook facebook.com/boludooficial Síguenos en Twitter @bolUDOoficial Síguenos en Instagram @boludooficial Síguenos en Telegram t.me/Boludooficial
Síguenos en WhatsApp BolUDOoficial Síguenos en YouTube youtube.com/channel/UCJDooTJmROzAkBcbRrryvGA

Mis cuentas sociales

FB
Twitter
Pinterest
Instagram
Otras

Móvil: (0426 683 6955) - E-mail: [email protected] - [email protected] - WhatsApp: +58 (0426) 683.69.55


Copyscape
Volver arriba

Protocolo  |  Mapa del Sitio  |  Report Abuse - DMCA  |  Términos y Condiciones  |  Ayuda  |  Privacidad de Datos  |  Política de Cookies  |  Reportar un bug  |  Licencia: CC BY-NC-ND 3.0

Copyright ©2023 Infoudo. Todos los derechos reservados. Diseñado y Desarrollado por Sergio Alemán Mi perfil en GitHub


SUBIR