• 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

 

Atributos estáticos de una clase

Tweet
 

lunes julio 11, 2016

Un atributo estático de una clase se crea independientemente a que se definan objetos de la misma, y en el caso que se creen más de un objeto de dicha clase dicho atributo es compartido por todas las instancias.

Como vemos es muy distinto el funcionamiento a los atributos de la clase que hemos visto hasta ahora. Un atributo estático pertenece a la clase pero su existencia es independiente a que se definan o no objetos de la misma.

Problema 1:

Plantear una clase que defina dos atributos, definir a uno de tipo estático. Crear dos objetos de dicha clase y modificar e imprimir dichos atributos.

Programa:

#include<iostream>

using namespace std;

class Prueba {
    int x1;
    static int x2;
public:
    Prueba(int v1, int v2) { x1 = v1; x2 = v2; };
    void imprimir();
};

int Prueba::x2;

void Prueba::imprimir()
{
    cout << x1 << "-" << x2 << "";
}

void main()
{
    Prueba prueba1(1, 1);
    prueba1.imprimir(); //  1   1
    Prueba prueba2(20, 20);
    prueba1.imprimir(); //  1  20
    cin.get();
}

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

AtributoEstatico1.zip

Para declarar un atributo estático tenemos que agregar la palabra clave static:

class Prueba {
    int x1;
    static int x2;
public:
    Prueba(int v1, int v2) { x1 = v1; x2 = v2; };
    void imprimir();
};

Y luego fuera de la clase crearlo con la siguiente sintaxis:

int Prueba::x2;

Como vemos no alcanza con solo declararlo dentro de la clase debemos definirlo fuera de la clase. Si necesitamos inicializarlo con un

valor podemos hacerlo en este momento:
int Prueba::x2=100;

Se puede inicializar el atributo estático ya que se reserva espacio para esta variable indistintamente se creen o no objetos de la clase que contiene dicho atributo estático.

En la main estamos creando un objeto de la clase Prueba, llamando al constructor y finalmente imprimiendo los dos atributos en el método imprimir():

    Prueba prueba1(1, 1);
    prueba1.imprimir(); //  1   1

No hay dudas porque se muestran los dos unos en pantalla. Tanto el atributo común como el estático reciben el 1.

Ahora creamos otro objeto de la clase Prueba y le pasamos al constructor los valores 20 y 20:

    Prueba prueba2(20, 20);

Si llamamos nuevamente al método imprimir() pero del objeto prueba1 (que había impreso anteriormente un 1-1):

    prueba1.imprimir(); //  1  20

Vemos que cuando se imprime el atributo estático x2 muestra un 20. Esto es debido que cuando creamos el objeto prueba2 le pasamos un 20 al constructor e inicializó el atributo estático con dicho valor.

Es muy importante entender que el atributo estático es compartido por todos los objetos que se definan de dicha clase.

Problema 2:

Plantear una clase Cuenta que defina dos atributos, uno que almacene el importe de la misma y otro atributo estático llamado cantidad que se debe incrementar en uno cada vez que se crea un objeto de dicha clase. Por otro lado crear una clase Banco que defina tres objetos de la clase Cuenta. Imprimir la cantidad de cuentas accediendo al atributo cantidad de la clase Cuenta.

Programa:

#include<iostream>

using namespace std;

class Cuenta {
    float saldo;
    static int cantidad;
public:
    Cuenta(float sal) { saldo = sal; cantidad++; };
    int retornarCantidad() { return cantidad; };
};

int Cuenta::cantidad = 0;

class Banco {
    Cuenta *cuenta1, *cuenta2, *cuenta3;
public:
    Banco();
    ~Banco();
    void cantidadClientes();
};

Banco::Banco()
{
    cuenta1 = new Cuenta(1000);
    cuenta2 = new Cuenta(3000);
    cuenta3 = new Cuenta(5000);
}

Banco::~Banco()
{
    delete cuenta1;
    delete cuenta2;
    delete cuenta3;
}

void Banco::cantidadClientes()
{
    cout << cuenta1->retornarCantidad();
}

void main()
{
    Banco *banco1 = new Banco();
    banco1->cantidadClientes();
    delete banco1;
    cin.get();
}

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

AtributoEstatico2.zip

Declaramos la clase cuenta con sus dos atributos saldo y cantidad. A cantidad la declaramos de tipo static. Tanto al constructor como al método retornanCantidad los hacemos inline (es decir los implementamos en la declaración de la clase):

class Cuenta {
    float saldo;
    static int cantidad;
public:
    Cuenta(float sal) { saldo = sal; cantidad++; };
    int retornarCantidad() { return cantidad; };
};

Como vemos en el constructor inicializamos el atributo saldo con el parámetro sal e incrementamos en 1 el atributo estático cantidad (cada vez que se ejecute este constructor para cada uno de los objetos que creamos de esta clase el atributo cantidad se incrementa en uno).

Fuera de la clase definimos el atributo estático cantidad que pertenece a la clase Cuenta que es de tipo int y lo inicializamos con el valor 0:

int Cuenta::cantidad = 0;

Seguidamente declaramos la clase Banco y definimos tres objetos de la clase Cuenta:

class Banco {
    Cuenta *cuenta1, *cuenta2, *cuenta3;
public:
    Banco();
    ~Banco();
    void cantidadClientes();
};

En el constructor creamos los tres objetos y en el destructor liberamos el espacio de dichos objetos:

Banco::Banco()
{
    cuenta1 = new Cuenta(1000);
    cuenta2 = new Cuenta(3000);
    cuenta3 = new Cuenta(5000);
}

Banco::~Banco()
{
    delete cuenta1;
    delete cuenta2;
    delete cuenta3;
}

Si queremos saber la cantidad de cuentas que tiene el banco tenemos que acceder al atributo cantidad de la clase Cuenta. Llamamos en este caso al método retornarCantidad() de la clase Cuenta que retorna el valor del atributo estático cantidad:

void Banco::cantidadClientes()
{
    cout << cuenta1->retornarCantidad();
}

Si bien la llamada al método retornarCantidad() lo hicimos a través del objeto cuenta1 el resultado hubiera sido el mismo si lo llamamos por medio de alguno de los otros dos objetos: cuenta2 o cuenta3.

En la main Creamos un objeto de la clase Banco:

void main()
{
    Banco *banco1 = new Banco();
    banco1->cantidadClientes();
    delete banco1;
    cin.get();
}
— @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


« Clases amigas (friend)  |  Métodos estáticos de una clase »
 
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