Heim >Backend-Entwicklung >C++ >Wie initialisiere ich statische Datenelemente in C, ohne den Instanzkonstruktor zu verwenden?

Wie initialisiere ich statische Datenelemente in C, ohne den Instanzkonstruktor zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-11-07 20:25:03348Durchsuche

How to Initialize Static Data Members in C   Without Using the Instance Constructor?

Statische Initialisierung: Ein umfassender Leitfaden

Bei der objektorientierten Programmierung werden statische Datenelemente von allen Instanzen einer Klasse gemeinsam genutzt. Normalerweise werden sie im Instanzkonstruktor initialisiert. Was aber, wenn Sie statische Datenelemente einrichten möchten, ohne auf den Instanzkonstruktor angewiesen zu sein?

Um das Verhalten statischer Konstruktoren zu emulieren, erstellen Sie eine separate Klasse, um die statischen Daten zu kapseln. Betrachten Sie beispielsweise die folgende Klasse:

class C {
    // read-only, can also be static const
    // should be filled with all characters from 'a' to 'z'
    static std::vector<char> alphabet;
public:
    C() { /* ... */ }
};

Um dies zu erreichen, definieren Sie die statischen Daten in einer separaten gewöhnlichen Klasse:

class StaticStuff {
    std::vector<char> letters_;
public:
    StaticStuff() {
        for (char c = 'a'; c <= 'z'; c++) {
            letters_.push_back(c);
        }
    }
};

Erstellen Sie nun eine statische Instanz dieser Klasse innerhalb die ursprüngliche Klasse:

class Elsewhere {
    static StaticStuff staticStuff; // constructor runs once, single instance
};

Durch das Erstellen einer statischen Instanz der StaticStuff-Klasse initialisieren Sie im Wesentlichen die statischen Datenelemente, bevor Instanzen der Elsewhere-Klasse erstellt werden, und ahmen so effektiv die Funktionalität eines statischen Konstruktors nach.

Das obige ist der detaillierte Inhalt vonWie initialisiere ich statische Datenelemente in C, ohne den Instanzkonstruktor zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn