El estudio de c ++ señala el alcance y la vida útil de trece datos.

El alcance de datos es un área válida de
datos. El alcance de datos incluye los siguientes
alcances de función: los
más simples son los parámetros formales de la función . El alcance de la función en la declaración se limita al alcance de los paréntesis, como Have the siguiente código

void show(int x);

El alcance de x en la declaración está limitado a los corchetes. Dado que el compilador solo verifica el tipo de parámetro, no el nombre del parámetro, no puede definir el nombre en la declaración, pero es mejor definir el nombre por conveniencia de leer.
Alcance local: el alcance de la
lista de parámetros de la función, desde el parámetro de la función hasta el final del cuerpo de la función. El alcance de la variable declarada en el cuerpo de la función comienza desde la declaración y termina en la llave al final del bloque donde La declaración se encuentra El llamado bloque A es una sección del programa encerrada entre llaves. El diagrama esquemático específico se muestra en la siguiente figura:

podemos ver el alcance de cada función en la figura.
Alcance de la clase: una
clase se puede considerar como un conjunto de miembros con nombre. Si los miembros de la clase son atributos públicos, puede usar el
nombre del objeto y el nombre del miembro para acceder a los miembros de datos de la clase, o puede acceder a ellos a través de ptr -> nombre del miembro, donde ptr es un puntero a la clase. O puede acceder a él a través del nombre de la clase :: objeto. En resumen, puede acceder a él de dos formas, Xy o X :: y.
Alcance
del espacio de nombres : la función del espacio de nombres es evitar la ambigüedad del mismo nombre, porque el programa está compuesto por muchos módulos, y es probable que el nombre de cada módulo sea el mismo nombre, lo que puede causar ambigüedad, por lo que usamos el espacio de nombres Método para evitar la ambigüedad del nombre provocada por el mismo. A menudo vemos una oración que
usa el espacio de nombres std en C ++ j ; esta oración significa que se usa el espacio de nombres std. Si esta oración no se agrega, necesitamos agregar std ::
above cuando usamos la función. Introdujo el alcance de tres datos, a saber, ámbito de función, ámbito local y ámbito de clase, ámbito de espacio de nombres, lo siguiente describe la visibilidad del identificador, ** primero observe la visibilidad del identificador como se muestra en la figura siguiente
Alcance del identificador
La regla es que si el espacio interior y el el espacio exterior no tiene el mismo nombre de variable, se puede acceder a la variable en el espacio exterior en el espacio interior, pero si el espacio interior y el espacio exterior tienen el mismo nombre de variable, la variable del espacio exterior está protegidaEstas reglas pueden ser un poco complicadas, así que permítanme dar un ejemplo para ilustrar la relación del alcance espacial.
El código de ejemplo específico es el siguiente

# include <iostream>
namespace global {
    
    
	int i; //在命名空间global 中定义全局变量 i
}
int j;   //定义全局变量j
int main()
{
    
    
global::i = 2;//将全局变量=2
j = 3;

//块作用域
{
    
      

	//定义与全局作用域相同名字的变量测试是否会屏蔽
	int i = 4;
	std::cout << "i =" << i << std::endl;
	//输出j变量
	std::cout << "j =" << j << std::endl;


}
}

Los resultados de la operación son los siguientes;
Visibilidad del alcance
(tenga en cuenta que las variables con espacios de nombres tienen un alcance global)

A continuación, se describe la duración de los datos. La duración de la
duración estática del
objeto es la misma que la del programa. Se dice que tiene una duración estática. Si desea declarar un objeto con una duración estática dentro de la función, necesitamos usar la palabra clave static. Después de la vida estática del objeto, el objeto no se copiará y no se invalidará con el retorno de la función, es decir, cuando la función devuelva el objeto, el valor será aún se guardará cuando se llame al siguiente valor.
Vida dinámica :
El objeto nace en el punto de declaración y finaliza cuando se completa el bloque en el que se ejecuta.
A continuación se muestra un ejemplo de un miembro de función estática.
Cree una clase y cuente cada vez que se invoquen las funciones de construcción y copia.

# include<iostream>
using namespace std;
class point
{
    
    
private:
	int x;
	int y;//非静态成员
	static int count;//静态数据成员的声明在类内,定义以及初始化要放在类外
public:
	point(int x, int y) :x(x), y(y) {
    
     cout << "calling construction " << endl; count++; }
	int getx() {
    
     return x; }
	int gety() {
    
     return y; }
	void show() {
    
     cout << "count is  " << count << endl; }
	//static  void show() { cout << "count is  " << count << endl; }
	point(point &s) {
    
    
		x = s.x;
		y = s.y;
		count++;
	}
	~point() {
    
     count--; }
};
int point::count = 0;//类外初始化定义
int main()
{
    
    
	point a(1, 2);
	a.show();
	point b(a);
	b.show();//count =2,因为前面已经构造了a,所以count=2



}

El resultado de ejecución es el siguiente.
Inserte la descripción de la imagen aquí
Esto se puede ver porque la vida útil del miembro de datos estáticos es la misma que el tiempo de ejecución del programa, por lo que la salida del segundo recuento será 2. Entonces hay un problema. Cuando no hay una clase, verifique el valor de recuento actual, debe ser 0, pero el recuento es un miembro privado, por lo que solo se puede acceder a través del nombre del objeto y el nombre del miembro. Una vez definido el objeto, count ++, por lo que no se puede ver directamente. Puede utilizar la función estática para resolver.
Función estática Para funciones no estáticas, usted sabe qué objeto lo llamó, pero las funciones miembro estáticas no saben qué objeto se llama, por lo que puede manejar miembros de función estática.

Los lectores interesados ​​pueden probarlo. Llame a funciones no estáticas para manejar problemas relacionados.

Supongo que te gusta

Origin blog.csdn.net/qq_41803340/article/details/112724468
Recomendado
Clasificación