class Token_stream { public: void set(string line); Token get(); void put_back(Token t); private: istringstream calculation; bool full = false; Token buffer; };
Eine Klasse beinhaltet Klassenvariablen und Klassen-Funktionen.
Instanzierung
Token_stream current_token_stream;
current_token_stream ist eine Instanz dieser Klasse. Alle Funktionen (die gebraucht werden um die Instanz zu verarbeiten) brauchen zuerst den Instanznamen.
current_token_stream.set(calculation_line);
Klassen-Funktionen
Jede Funktion einer Klasse muss nach der Klassendefinition definiert werden. Die Funktion braucht vor ihrem Namen die Klasse, zu der sie gehört.
void Token_stream::put_back(Token t) { // check if token is already in buffer if (token_buffer_full) { throw std::overflow_error("buffer contains already a Token"); } // set token in buffer token_buffer = t; token_buffer_full = true; }
Funktionen einer Klasse, müssen nicht forward deklariert werden. Sie sind durch die Definition der Klasse bereits bekannt.
Klassen-Variablen
Es gibt meist wenige Klassenvariblen. Denn diese sind „global“ innerhalb der Klasse. Alle Funktionen können auf diese Zugreifen.
class Token_stream { ... private: istringstream calculation; bool full = false; Token token_buffer; };
Typisch ist, dass sie im private-Teil der Klasse stehen.
Lokale Variablen
In jeder Klassen-Funktion werden zur Verarbeitung auch lokale Variablen gebraucht.
Token Token_stream::get() { char c; Token t; calculation >> c; if (isdigit(c)) { t.kind = 'n'; t.value = c; } else if (c == '\0') { t.kind = 'q'; } return t; }