C ++: los campos de datos de clases y objetos encapsulan la diferencia entre variables globales, variables locales, variables globales estáticas y variables locales estáticas

Encapsulación de campo de datos

Primero ponga una sección del código de definición de clase anterior.

#ifndef CIRCLE_H
 #define CIRCLE_H class Circle {
 public :
     // El radio del círculo doble radio; // Sin constructor de parámetros     Circle (); // Constructor de parámetros 
    Circle ( double ); // Obtenga el área del círculo double getArea () ; 
}; #endif


    
    
    

    
    
    
    
    

Antes de poner todos los campos de datos y funciones en el público. Público significa público, es decir, cualquiera puede acceder a estos datos y funciones.

Por ejemplo, si desea modificar el radio de un objeto circular c1, puede modificarlo accediendo directamente al radio

c1.radius = 2 ;

Pero este estilo no es bueno. El rendimiento específico es:

  • Los datos pueden estar en mal estado. Supongamos que una función quiere usar un atributo de una clase. Pero esta propiedad no encapsulada se puede modificar. Esto puede hacer que la función realice resultados diferentes.
  • No es fácil de mantener. El radio del círculo debe ser mayor que 0, pero si los datos no están encapsulados y pueden modificarse directamente, no podemos cumplir esta condición.

Deberíamos encapsular nuestros datos, y las funciones generalmente no están encapsuladas.

La palabra clave que representa la encapsulación es privada, que es similar a pública. Solo se puede acceder a las funciones o datos privados dentro de la clase. Si accede a ellos directamente en este momento, el compilador informará un error. Vea el código a continuación:

#ifndef CIRCLE_H
 #define CIRCLE_H class Circle {
 privado :
     // el radio del círculo doble radio; público :
     // el constructor sin parámetros     Circle (); // el constructor parametrizado 
    Circle ( double ); // el área del círculo double getArea (); // Obtener el radio del círculo double getRadius (); // Establecer el radio del círculo y juzgar si es mayor que 0 void setRadius ( double newRadius); 
}; #endif


    



    
    
    
    
    

    
    

    
    

En el código anterior, encapsulamos el radio de datos y proporcionamos métodos getter y setter, es decir, getRadius () y setRadius (double newRadius). Estos dos métodos son responsables respectivamente de obtener y modificar datos, y los métodos de denominación son generalmente getXxx () y setXxx (), que usan la primera letra para distinguir dos palabras.

El método getter es como un descriptor de acceso, y el setter es como un cambiador.

No todos los datos requieren métodos getter y setter, depende de la situación.

Alcance variable

Las variables de un programa se pueden dividir aproximadamente en dos tipos: variables globales y variables locales.

Las variables locales se definen en la función y su alcance se limita a la función. El compilador informará un error después de abandonar la función y luego usará esta variable.
Las variables globales son variables definidas fuera de la función. No pertenece a qué función, pertenece a un archivo de programa fuente y su alcance es el programa fuente completo.

Sobre el alcance variable, puede consultar este blog:

La diferencia entre variables globales, variables locales, variables globales estáticas, variables locales estáticas

Las variables en la clase también cumplen con estas reglas.

En particular, si un campo o función de datos se declara como estático (es decir, función o datos estáticos), los datos o la función no pertenecen a una instancia de objeto específica, sino que pertenecen a esta clase. Por lo tanto, los datos estáticos de todos los objetos son los mismos.

 

Supongo que te gusta

Origin www.cnblogs.com/bwjblogs/p/12686831.html
Recomendado
Clasificación