c++ - variables membres statiques, fonctions membres statiques et variables membres statiques modifiées par const

1. Variables membres statiques C++

En C++, une variable membre statique (Static Member Variable) est un type spécial de variable membre d'une classe qui est partagée par toutes les instances de la classe, plutôt que chaque instance ayant sa propre copie. Les variables membres statiques conservent un état unique parmi tous les objets de la classe et ont des utilisations et une syntaxe spéciales.

1.Concept :

Les variables membres statiques sont des variables membres de la classe, mais leur existence ne dépend pas de l'instance de la classe. Il partage le même emplacement mémoire entre toutes les instances de la classe , conservant ainsi un état unique parmi tous les objets de la classe. Les variables membres statiques sont définies à l'aide du mot-clé static
dans la déclaration de la classe et initialisées dans le fichier d'implémentation de la classe ( en d'autres termes, elles ne peuvent pas être initialisées dans la classe ).

2. Comment utiliser :

①.Déclarez les variables membres statiques :
dans la déclaration de la classe, utilisez le mot-clé static pour déclarer les variables membres statiques. La déclaration se fait généralement dans la section publique, privée ou protégée de la classe.

② Initialiser les variables membres statiques : (ne peut pas être initialisée dans la classe)
Les variables membres statiques doivent être initialisées dans le fichier d'implémentation de la classe. En dehors de la classe , utilisez le nom de la classe et l'opérateur de résolution de portée :: pour initialiser les variables membres statiques.

③.Accéder aux variables membres statiques :
les variables membres statiques n'appartiennent pas aux instances de la classe, elles sont donc accessibles à l'aide des opérateurs de résolution de nom de classe et de portée, ou via le pointeur this dans les fonctions membres de la classe.

Cas:

#include <iostream>
using namespace std;
class MyClass {
    
    
   public:
    /*
     *声明静态成员变量
     *静态成员变量在编译阶段就已经分配了内存,存在全局静态区
     */
    static int staticVar;

    MyClass() {
    
    
        // 在构造函数中修改静态成员变量
        staticVar++;
    }

    // 静态成员函数,用于访问静态成员变量
    static void printStaticVar() {
    
    
        cout << "Static variable value: " << staticVar << endl;
    }
};

// 初始化静态成员变量
int MyClass::staticVar = 0;//在类外初始化

int main() {
    
    
    MyClass obj1;
    MyClass::printStaticVar();  // 访问静态成员变量

    MyClass obj2;
    MyClass::printStaticVar();  // 访问静态成员变量

    return 0;
}

3. Résumé

Insérer la description de l'image ici
① Il n'y a qu'une seule copie des variables membres statiques en mémoire et plusieurs objets partagent une variable statique
② Les variables membres statiques doivent être déclarées dans la classe et définies en dehors de la classe
③ Les variables membres statiques sont accessibles via la portée de la classe
④ Statique les variables membres sont accessibles via la portée de l'accès aux objets de classe

2. Fonctions membres statiques

1.Concept :

Fonction membre statique :
une fonction membre statique est une fonction membre qui ne dépend pas d'une instance d'une classe. Ils sont accessibles directement via le nom de la classe et l'opérateur de résolution de portée ::. Les fonctions membres statiques ne peuvent pas accéder aux variables membres non statiques et ne peuvent pas non plus utiliser le pointeur this.

2. Caractéristiques :

① Les fonctions membres statiques peuvent accéder aux variables membres statiques mais ne peuvent pas accéder aux variables membres ordinaires
② Les fonctions membres statiques sont accessibles via la portée de la classe
③ Les fonctions membres statiques sont accessibles via des objets

Code du cas

#include <iostream>
using namespace std;
class MyClass {
    
    
   private:
    int regularVar;        // 普通成员变量
    static int staticVar;  // 静态成员变量

   public:
    MyClass(int regValue, int statValue) : regularVar(regValue) {
    
    
        staticVar = statValue;
    }

    static void staticFunction() {
    
    
        // 静态成员函数可以访问静态成员变量,但不能访问普通成员变量
        cout << "Static member function accessing staticVar: " << staticVar
             << endl;
        // 下面一行会引发编译错误,因为静态函数不能访问普通成员变量
        // cout << "Static member function accessing regularVar: " <<
        // regularVar << endl;
    }

    void regularFunction() {
    
    
        cout << "Regular member function accessing regularVar: " << regularVar
             << endl;
    }
};

// 初始化静态成员变量
int MyClass::staticVar = 0;

int main() {
    
    
    // 使用类的作用域访问静态成员函数
    MyClass::staticFunction();

    MyClass obj(42, 100);
    obj.regularFunction();

    // 通过对象访问静态成员函数
    obj.staticFunction();  // 也可以通过对象访问,但是不推荐,最好使用类名访问

    return 0;
}

3. Variables membres statiques modifiées par Const

① Les variables membres statiques modifiées par const sont stockées dans la zone constante, en lecture seule, et n'ont qu'une seule copie en mémoire ②
Les variables membres statiques modifiées par const peuvent être définies et initialisées au sein de la classe
③ Les variables membres statiques modifiées par const const est accessible via la portée de la classe
④ Les variables membres statiques modifiées par const Les variables membres statiques sont accessibles via des objets
⑤ Les fonctions membres statiques peuvent accéder aux variables membres statiques modifiées par const

Exemple de code :

#include <iostream>
using namespace std;

class MyClass {
    
    
   public:
    // 在类内部定义且初始化带有const修饰的静态成员变量
    static const int staticConstVar = 42;

    static void printStaticConstVar() {
    
    
        // 静态成员函数可以访问const修饰的静态成员变量
        cout << "Static const variable value: " << staticConstVar << endl;
    }
};

int main() {
    
    
    // 通过类的作用域访问const修饰的静态成员变量
    cout << "Accessing via class scope: " << MyClass::staticConstVar << endl;

    // 通过对象访问const修饰的静态成员变量
    MyClass obj;
    cout << "Accessing via object: " << obj.staticConstVar << endl;

    // 调用静态成员函数,访问const修饰的静态成员变量
    MyClass::printStaticConstVar();

    return 0;
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_57737603/article/details/132372277
conseillé
Classement