Análisis detallado de la clase c ++ (activado)

Aprendimos la estructura en lenguaje C e introdujimos un nuevo concepto llamado clase en C++. Una clase puede entenderse como una versión mejorada de una estructura en lenguaje C. ¿Por qué dices eso? En la estructura, solo podemos declarar las variables miembro de la estructura, y las funciones para operar las variables miembro de la estructura deben crearse fuera de la estructura. Las clases en C++ compensan muy bien este defecto, no solo puede haber variables miembro en una clase, sino también métodos miembro (funciones miembro), déjame contarte los siguientes.

Definición de clase:

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

clase es la palabra clave y nombre de clase es el nombre de la clase.

Hay dos formas de implementar funciones miembro en una clase: la primera es que tanto la declaración como la definición de la función están en la clase:

¡Las funciones miembro creadas por este método son funciones en línea de forma predeterminada! !

class Stack
{
public:
	void Init()
	{
		//
	}
	void push()
	{
		//
	}

private:
	int* _a;
	int _top;
	int _capacity;
};

 El segundo es que la declaración de clase se coloca en el archivo .h y la definición de la función miembro se coloca en el archivo .cpp . Nota: el nombre de la clase debe agregarse antes del nombre de la función miembro ::

 

 Hablando de esto, algunas personas sienten curiosidad, ¿por qué hay público, privado, etc. en el código?

Aquí interviene un nuevo concepto: calificadores de acceso

Aquí hay tres calificadores de acceso: público, protegido, privado.

Público significa público, se pueden utilizar variables miembro o funciones miembro fuera de la clase.

Protegido y privado significa protección y privado, como si un muro protegiera las cosas de la clase y solo pudiera usarse en la clase. ! !

Entonces, ¿por qué está diseñado así?

Esto muestra una característica importante de las clases: la encapsulación.

Encapsulación: combine orgánicamente los datos y el método de manipulación de los datos, oculte las propiedades y los detalles de implementación del objeto y solo exponga la interfaz al mundo exterior.
interactuar con los objetos.

Entonces ahora te hago una pregunta:

 Dado que creamos una clase, tiene su propio campo de clase, entonces, ¿por qué no puedo acceder a ella a través del campo de clase?

Motivo: Cuando declaramos una clase con clase, es equivalente a un dibujo y las variables que contiene no ocupan memoria. Y cuando queramos acceder a los datos del dominio, deben ser reales (necesita ocupar memoria). Entonces, la solución es la siguiente: primero cree un objeto de clase (construya el dibujo en una casa) y luego acceda a los miembros a través del objeto (trabaje en la casa construida).

int main()
{
	Stack s1;
	s1._top = 10;
	return 0;
}

Cálculo del tamaño de la clase:

Por favor calcule el tamaño de la clase:

class A {
public:
void PrintA()
{
   cout<<_a<<endl; }
private:
char _a;
};

Revelemos la respuesta:

 La respuesta es 1. No hay duda de que las funciones de la clase no ocupan espacio y el tamaño de la memoria ocupada por las variables miembro se calcula mediante la alineación de la memoria como las estructuras que hemos aprendido antes. Las funciones de la clase se colocan en el segmento de código público y cuando se llama a la función, se encontrará en el área de código público ¡Este diseño ahorra espacio! !

Cuando encontramos una clase vacía, su tamaño no es 0, sino 1, ¡ recuerda! ! !

este puntero:

Ahora sabemos que las funciones se almacenan en el área de código común. Cuando usamos una clase para crear dos objetos diferentes, sus variables miembro son diferentes, pero la función que llaman es la misma, entonces, ¿cómo distingue esta función pública los datos en diferentes clases? ? Aquí queremos mencionar un nuevo concepto llamado este puntero.

 Este puntero es un parámetro oculto. Cuando llamamos a una función con un objeto, en realidad pasamos la dirección del objeto a este puntero, y el puntero delgado encuentra los datos en el objeto a través de la dirección.

d1.Print();  //Print(&d1)
d2.Print();  //Print(&d2)

Dado que este puntero es un parámetro formal, se almacena en el área de la pila . Recuerde que este puntero puede estar vacío . ! !

Este es el final del primer artículo sobre la clase, espero que todos lo apoyen y Kangkang se apresurará a encontrar tiempo para actualizar el próximo artículo de la clase. !

Supongo que te gusta

Origin blog.csdn.net/m0_69005269/article/details/127137086
Recomendado
Clasificación