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;
}