Las variables miembro de C ++ y las funciones miembro se almacenan por separado

En C ++, las variables miembro y las funciones miembro de una clase se almacenan por separado.
Solo las variables miembro no estáticas pertenecen a los objetos de la clase.

Primero, observe cuánto espacio ocupan los objetos vacíos:

#include <iostream>
using namespace std;
//成员变量和成员函数是分开存储的

class Person {
    
    



};


void test01() {
    
    
	Person p;

	cout << "size of p = " << sizeof(p) << endl;
}

int main() {
    
    

	test01();
	system("pause");
	return 0;
}

El resultado es un tamaño de p = 1;

El espacio de memoria ocupado por los objetos vacíos es: 1

¿Por qué es 1?
Porque el compilador de C ++ también asigna un espacio de bytes para cada objeto vacío, con el fin de distinguir la ubicación de memoria del objeto vacío.
Cada objeto vacío también debe tener una dirección de memoria única, por lo que el compilador asignará un byte a cada objeto vacío como una distinción.

Ahora le damos int m_A al objeto vacío y vemos cuál es el resultado.

el código se muestra a continuación:

#include <iostream>
using namespace std;
//成员变量和成员函数是分开存储的

class Person {
    
    
		int m_A;//非静态变量  属于类对象上的数据


};

void test01() {
    
    
	Person p;
	cout << "size of p = " << sizeof(p) << endl;

}


int main() {
    
    

	test01();
	system("pause");
	return 0;
}

El resultado es un tamaño de p = 4
Descripción: La
variable no estática m_A pertenece al objeto de la clase

Ahora vamos a static int m_B en la clase y vemos cuál es el resultado.
void func () // Función no estática, ¿cuál es el resultado?
¿Qué pasa con static void func2 ()?

el código se muestra a continuación:

#include <iostream>
using namespace std;
//成员变量和成员函数是分开存储的

class Person {
    
    
		int m_A;
		static int m_B;//静态成员变量
		
		void func()
		{
    
    
		
		}
		static void func2()
		{
    
    
		
		}
};

int Person::m_B = 0;//静态成员变量特点,类内声明,类外初始化。不属于类对象上

void test01() {
    
    
	Person p;
	cout << "size of p = " << sizeof(p) << endl;

}


int main() {
    
    

	test01();
	system("pause");
	return 0;
}

El resultado sigue siendo: 4
1. Explique que la variable miembro estática no pertenece al objeto de clase.
2. Explique que las funciones miembro (incluidas las estáticas y no estáticas) se almacenan por separado de las variables miembro.

Cada función miembro no estática solo producirá una instancia de función, es decir, varios objetos del mismo tipo compartirán un fragmento de código, entonces la pregunta es:
¿cómo distingue este fragmento de código qué objeto se llama a sí mismo?

C ++ resuelve los problemas anteriores proporcionando un puntero de objeto especial, este puntero.

Supongo que te gusta

Origin blog.csdn.net/m0_51955470/article/details/113100043
Recomendado
Clasificación