Beispiel 6: person2.h

21.11.2016 01:30 Uhr
#include <iostream>

using namespace std;
#include "person2.h"


int main()
{
struct person person = { 0 } ;
char sprache;

person.askE = askEnglish;
person.frageD = frageDeutsch;
person.greetE = greetEnglish;
person.gruesseD = gruesseDeutsch;

cout << "Wählen Sie Ihre Sprache:" << endl;
cout << "e = English" << endl;
cout << "d = deutsch" << endl;
cout << "   Ihre Wahl:";
cin >> sprache;

cout << "Sie kommen aus:" << endl;
cout << "w = Westeuropa" << endl;
cout << "a = Amerika" << endl;
cout << "r = Rußland" << endl;
cout << "o = Österreich" << endl;
cout << "   Ihre Herkunft:";
cin >> person.herkunft;

switch(sprache)
   {
case 'e':
   (*person.askE)(&person);
   break;
case 'd':
   (*person.frageD)(&person);
   break;
default:
   cout << "I do not know your language / Maybe you know English?";
   (*person.askE)(&person);
   sprache='e';
   break;
   }

switch(sprache)
   {
case 'e':
   (*person.greetE)(&person);
   break;
case 'd':
   (*person.gruesseD)(&person);
   break;
   }
}


#include <iostream>

using namespace std;
#include "person2.h"


int main()
{
struct person person = { 0 } ;
char sprache;

person.askE = askEnglish;
person.frageD = frageDeutsch;
person.greetE = greetEnglish;
person.gruesseD = gruesseDeutsch;
In der hier realisierten Zwischenstufe, weisen wir nun die
zu verwendenden Funktionen sogenannten "Funktionsvariablen" zu, die ebenfalls
in der für die Bearbeitung von Personen eingeführten Struktur enthalten sind.

Zur Verwendung:

Getreu dem allgemeinen Prinzip der IT, daß Programme und Daten innerhalb
eines Speichers liegen, haben auch Funktionen "Adressen". D.h., ihre
Ausführung beginnt an einer bestimmten Speicherstelle.

C++ trifft folgende Regelungen:

1) Wird der Name einer Funktion ohne dahinter stehendes Klammerpaar
angeführt, dann entspricht der Name der Adresse der Funktion, die wie jeder
andere Variablentyp auch verwendet werden kann.
2) Wird der Name einer Funktion mit  einem Klammerpaar notiert, dann
wird der Code des an dieser Adresse gespeicherten Programmes
ausgeführt und das Ergebnis (d.h., der Wert des return Statemenst) wird an die
Stelle des Funktionsnamens gesetzt.

Die Definition der "Funktionsvariablen" person.askE etc. findet sich im
Header.

cout << "Wählen Sie Ihre Sprache:" << endl;
cout << "e = English" << endl;
cout << "d = deutsch" << endl;
cout << "   Ihre Wahl:";
cin >> sprache;

cout << "Sie kommen aus:" << endl;
cout << "w = Westeuropa" << endl;
cout << "a = Amerika" << endl;
cout << "r = Rußland" << endl;
cout << "o = Österreich" << endl;
cout << "   Ihre Herkunft:";
cin >> person.herkunft;

switch(sprache)
   {
case 'e':
   (*person.askE)(&person);

Um eine Funktion, deren Adresse in einer Variable
gespeichert ist, aufzurufen, ist eine spezielle Konstruktion notwendig,
die sich aus den regeln für die Präzedenz der C++ Operatoren ergibt. Wir
verzichten auf ihre Erläuterung und schreiben immer:
  • Den Namen der Funktion,
  • nach einem Sternchen („verwende den Wert auf den dieser Zeiger zeigt“),
  • umgeben von einem Paar umkommentiert bleibender Klammern und
  • einem Klammerpaar mit den Argumenten, mit denen die Funktion aufgerufen werden soll.




   break;
case 'd':
   (*person.frageD)(&person);
   break;
default:
   cout << "I do not know your language / Maybe you know English?";
   (*person.askE)(&person);
   sprache='e';
   break;
   }

switch(sprache)
   {
case 'e':
   (*person.greetE)(&person);
   break;
case 'd':
   (*person.gruesseD)(&person);
   break;
   }
}

Keine Auswirkungen auf die Bibliothek.


Anhang: example6.zip

Schlagwörter: