Syntaxe élémentaire C++ - membres de classe statiques

Préface : Cet article présentera les membres de classe statiques dans les classes et les objets – les fonctions membres statiques, comment utiliser les variables membres statiques et les éléments à prendre en compte. Dans certains scénarios, les membres statiques ont du sens.

1. Concept

Les membres de classe déclarés comme statiques sont appelés membres statiques de la classe, les variables membres modifiées par static sont appelées variables membres statiques et les fonctions membres modifiées par static sont appelées fonctions membres statiques.

2. Caractéristiques

1. Les membres statiques sont partagés par tous les objets de classe et n'appartiennent pas à un objet spécifique.stocké dans une zone statique.
2. Les membres statiques de la classe peuvent être utilisés 类名::静态成员ou 对象.静态成员accessibles.
3.Les variables membres statiques doivent être définies en dehors de la classe sans ajouter le mot-clé static lors de leur définition., la classe vient d'être déclarée.
4. Les fonctions membres statiques n'ont pas de pointeur this caché,Impossible d'accéder aux membres non statiques.
5. Les membres statiques sont également limités par des qualificatifs d'accès public, privé et protégé.

le membre statique n'existe pas dans l'objet

Les membres statiques, comme les fonctions membres, n'existent pas dans l'objet.

Prenons le code suivant comme exemple :

class A {
    
    
private:
	static int _a; //静态成员变量
};
int A::_a = 1; // 在类外定义初始化,用类名访问。
int main()
{
    
    
	cout << sizeof(A) << endl;
	return 0;
}

Sortie de la console :
Insérer la description de l'image ici

Nous savons que le calcul de la mémoire d'une classe suit les règles d'alignement de la structure. Si le membre statique est dans l'objet, le résultat de sortie devrait être 4, mais maintenant le résultat de sortie est 1 (1 est un espace réservé),Cela signifie que le membre statique n'existe pas dans l'objet, il existe dans la zone statique.

3. Les variables membres statiques sont initialisées en dehors de la classe

C’est le point clé et il faut le rappeler.

class A {
    
    
private:
	static int _a; //静态成员变量声明
	//static int _a = 1 行不行???
};
int A::_a = 1; // 在类外初始化

Dans le code ci-dessus, le blogueur a posé une question : est-il acceptable de donner une valeur par défaut lors de la déclaration d'une fonction membre statique ? La réponse est non, car la valeur par défaut attribuée lors de la déclaration est en fait attribuée à la liste d'initialisation du constructeur , mais les membres statiques n'appartiennent pas à un objet spécifique, ce qui signifie que la fonction membre statique ne passe pas par la liste d'initialisation. , donc une valeur par défaut est donnée. est inutile.

4. Fonctions membres statiques

Contrairement aux fonctions membres normales, les fonctions membres statiques n'ont pas ce pointeur.
Les fonctions membres statiques ne peuvent pas accéder aux objets membres non statiques(Parce qu'il n'y a pas de pointeur this).
Les objets membres statiques sont utilisés avec les fonctions membres statiques.

class A {
    
    
public:
	/*void print() // _a是静态成员变量,常规成员函数不能访问静态成员对象
	{
		cout << _a << endl;
	}*/
	static void print() //需要写成静态成员函数才行
	{
    
    
		cout << _a << endl;
	}
	
private:
	static int _a; //静态成员变量
};
int A::_a = 1; // 在类外初始化
int main()
{
    
    
	A::print(); //类名::访问函数
	return 0;
}

BB à la fin de l'article : Si vous avez des questions, n'hésitez pas à laisser un message dans la zone de commentaires. S'il y a quelque chose qui ne va pas dans quelque chose d'écrit, vous êtes invités à le signaler dans la zone de commentaires. Le blogueur fera corrections dès que possible après l'avoir vu. Enfin, ce n'est pas facile à faire. Si cela peut être utile à des amis, j'espère donner du like et de l'attention au blogueur.
Insérer la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_73390155/article/details/132363187
conseillé
Classement