Función estática en C++

Jinku Hu 12 octubre 2023
Función estática en C++

Este artículo demostrará cómo utilizar funciones miembro estáticas de la clase en C++.

Utilice las funciones de miembro estáticas para acceder a las variables de miembro private estáticas

La palabra clave static se puede utilizar en C++ para declarar miembros de la clase asociados con la clase misma en lugar de cualquier instancia en particular.

Las variables miembro estáticas se declaran dentro del cuerpo de la clase, pero no se pueden inicializar al mismo tiempo a menos que sean tipos integrales calificados por constexpr, tipos integrales calificados por const o enum calificados por const. Entonces, necesitamos inicializar miembros estáticos no constantes fuera de la definición de clase como lo haríamos con cualquier otra variable global.

Tenga en cuenta que, incluso si el miembro estático dado tiene un especificador private, se puede acceder a él en el ámbito global utilizando el operador de resolución de ámbito de clase, ya que BankAccount::rate se inicializa en el siguiente fragmento de código. Una vez que el miembro rate se inicializa al inicio del programa, permanece activo hasta que el programa termina. Si el usuario no inicializa explícitamente miembros estáticos, el compilador utilizará el inicializador predeterminado.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class BankAccount {
 private:
  //    static double rate = 2.2; / Error
  static double rate;
  double amount;

 public:
  explicit BankAccount(double n) : amount(n) {}
  static double getRate() { return rate; }
  static void setNewRate(double n) { rate = n; }
};

double BankAccount::rate = 2.2;

int main() {
  BankAccount m1(2390.32);
  BankAccount m2(1210.51);

  return EXIT_SUCCESS;
}

BankAccount::rate no se almacena en todos los objetos BankAccount. Solo hay un valor de rate asociado con la clase BankAccount, y en consecuencia, todas las instancias accederán al mismo valor en el momento dado. Este comportamiento es muy útil en el diseño de clases, pero en este caso, nos centraremos en las funciones miembro estáticas.

Los últimos se utilizan generalmente para acceder a variables de miembros estáticos, ya que los especificadores de control de acceso de miembros se aplican cuando los usuarios de la clase desean interactuar con ellos.

Es decir, si queremos recuperar el valor de la rate que tiene un especificador private, necesitamos tener una función miembro public correspondiente. Además, no queremos acceder a estos miembros con objetos de llamadas individuales, ya que solo hay un valor para la clase en sí.

Entonces, implementamos una función llamada getRate, una función miembro estática y devuelve el valor de rate. Entonces podemos acceder al valor de rate directamente desde la función main sin construir un objeto de tipo BankAccount. Tenga en cuenta que las funciones miembro estáticas no tienen this puntero implícito disponible y no pueden acceder / modificar miembros no estáticos de la clase.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

class BankAccount {
 private:
  static double rate;
  double amount;

 public:
  explicit BankAccount(double n) : amount(n) {}
  static double getRate() { return rate; }
  static void setNewRate(double n) { rate = n; }
};

double BankAccount::rate = 2.2;

int main() {
  cout << BankAccount::getRate() << endl;
  BankAccount::setNewRate(2.4);
  cout << BankAccount::getRate() << endl;

  return EXIT_SUCCESS;
}

Producción :

2.2
2.4
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artículo relacionado - C++ Static