Zeiger 3


Der Adressoperator &

int ivar = 29;

int * zeigervar;

zeigervar = &ivar; //Die Adresse der Variablen ivar wird der Zeigervariable zeigervar

                         // zugewiesen.

 


1. Programm mit Adressoperator und einer Einführung einer rein virtuellen Funktion:

//virtu.cpp

#include <iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

class Base

{

public:

virtual void dubistdran() =0;

 

};

class erste : public Base

{

public:

void dubistdran()

{ cout << endl << "Ich bin dran, die erste Funktion.";

}

};

class zweite : public Base

{

public:

void dubistdran()

{ cout << endl << "Ich bin dran, die zweite Funktion.";

}

};

class dritte : public Base

{

public:

void dubistdran()

{ cout << endl << "Ich bin die dritte Funktion.";

}

};

int main()

{

srand(time(NULL));

Base* list[3];

erste b1;

zweite b2;

dritte b3;

 

list[0] = &b1;

list[1] = &b2;

list[2] = &b3;

for (int i=0; i<6; i++)

{

for (int w=0; w<32000; w++) {}

list[rand()%3]->dubistdran();

}

return 0;

}


2. Programm mit Zeigern und mit Adressoperator

Das nun folgende Programm hat zwei rein virtuelle Funktionen.

//assozi2.cpp

#include <iostream> //cout, cin
#include <stdlib.h> //rand
#include <time.h> //srand
#include <conio.h> //getch(), getche()

using namespace std;

const int MAX=22;
const int START = 8;
int rmerk[MAX];//int oder bool
bool gut;

struct bezeich
{
  string wort;
  char posneg;
};
bezeich b[MAX];

class Base
{ public:
  virtual void dubistdran() = 0; //rein virtuelle Funktion
  virtual void ergebnis() = 0; //ebenfalls
};

class Gesetzm1 : public Base
{ public:
  void dubistdran();
  void ergebnis();
};

class Gesetzm2 : public Base
{ public:
  void dubistdran();
  void ergebnis();
};

class Gesetzm3 : public Base
{ public:
void dubistdran();
void ergebnis();
};

class Gesetzm4 : public Base
{ public:
void dubistdran();
void ergebnis();
};

class Gesetzm5 : public Base
{ public:
void dubistdran();
void ergebnis();
};

void Gesetzm1::dubistdran()
{
b[0].wort = "Kochherd";
b[0].posneg = '+';
b[1].wort = "Wohnzimmersessel";
b[1].posneg = '-';
b[2].wort ="Geschirrspuelmaschine";
b[2].posneg = '+';
b[3].wort = "Klopapier";
b[3].posneg = '-';
b[4].wort="Kochtopf";
b[4].posneg = '+';
b[5].wort = "Wohnzimmergarnitur";
b[5].posneg = '-';
b[6].wort="Geschirr";
b[6].posneg = '+';
b[7].wort = "Wohnzimmerschrank";
b[7].posneg = '-';
b[8].wort="Geschirrschrank";
b[8].posneg = '+';
b[9].wort = "Wohnteppich";
b[9].posneg = '-';
b[10].wort="Besteck";
b[10].posneg = '+';
b[11].wort = "CD-Player";
b[11].posneg = '-';
b[12].wort="Kuechenmesser";
b[12].posneg = '+';
b[13].wort = "Waschbecken";
b[13].posneg = '-';
b[14].wort="Topflappen";
b[14].posneg = '+';
b[15].wort = "DVD-Player";
b[15].posneg = '-';
b[16].wort = "Badewanne";
b[16].posneg = '-';
b[17].wort="Topfschrank";
b[17].posneg = '+';
b[18].wort = "Polen";
b[18].posneg = '-';
b[19].wort = "Kuehlschrank";
b[19].posneg = '+';
b[20].wort = "Eisfach";
b[20].posneg = '+';
b[21].wort = "Dusche";
b[21].posneg ='-';
}
void Gesetzm1::ergebnis()
{
cout <<endl<< "Gesucht wurden Dinge in der Kueche. - Taste druecken ...";
}

void Gesetzm2::dubistdran()
{
b[0].wort="Gardine";
b[0].posneg = '+';
b[1].wort = "Trockner";
b[1].posneg = '-';
b[2].wort="Sessel";
b[2].posneg = '+';
b[3].wort = "Badewanne";
b[3].posneg = '-';
b[4].wort="TV-Schrank";
b[4].posneg = '+';
b[5].wort = "Waschbecken";
b[5].posneg = '-';
b[6].wort="Wohnzimmerlampe";
b[6].posneg = '+';
b[7].wort = "Waeschespinne";
b[7].posneg = '-';
b[8].wort="Sofa";
b[8].posneg = '+';
b[9].wort = "Schlafbett";
b[9].posneg = '-';
b[10].wort="CD-Player";
b[10].posneg = '+';
b[11].wort = "Waschmaschine";
b[11].posneg = '-';
b[12].wort="Computer";
b[12].posneg = '+';
b[13].wort = "Geschirrspuelmaschine";
b[13].posneg = '-';
b[14].wort="Radio";
b[14].posneg = '+';
b[15].wort = "Kochherd";
b[15].posneg = '-';
b[16].wort = "Gartentisch";
b[16].posneg = '-';
b[17].wort="Fernseher";
b[17].posneg = '+';
b[18].wort = "Blumenbeet";
b[18].posneg = '-';
b[19].wort = "Wohnteppich";
b[19].posneg = '+';
b[20].wort = "Wohnzimmerschrank";
b[20].posneg = '+';
b[21].wort = "Kochtopf";
b[21].posneg = '-';
}
void Gesetzm2::ergebnis()
{
  cout <<endl<< "Gesucht wurde alles im Wohnzimmer. - Taste druecken ...";
}

void Gesetzm3::dubistdran()
{
b[0].wort="Gartenzwerg";
b[0].posneg = '+';
b[1].wort = "Fernseher";
b[1].posneg = '-';
b[2].wort="Gartenstuhl";
b[2].posneg = '+';
b[3].wort = "Toilette";
b[3].posneg = '-';
b[4].wort="Gartentisch";
b[4].posneg = '+';
b[5].wort = "CD-Player";
b[5].posneg = '-';
b[6].wort="Apfelbaum";
b[6].posneg = '+';
b[7].wort = "Waschmaschine";
b[7].posneg = '-';
b[8].wort="Gartenlampe";
b[8].posneg = '+';
b[9].wort = "Kuechenschrank";
b[9].posneg = '-';
b[10].wort="Sonnenschirm";
b[10].posneg = '+';
b[11].wort = "Wohnzimmersofa";
b[11].posneg = '-';
b[12].wort="Birnbaum";
b[12].posneg = '+';
b[13].wort = "Topflappen";
b[13].posneg = '-';
b[14].wort="Busch";
b[14].posneg = '+';
b[15].wort = "Herd";
b[15].posneg = '-';
b[16].wort = "Kochtopf";
b[16].posneg = '-';
b[17].wort="Beeteinfassung";
b[17].posneg = '+';
b[18].wort = "Wohnzimmerschrank";
b[18].posneg = '-';
b[19].wort = "Rasen";
b[19].posneg = '+';
b[20].wort = "Blumenbeet";
b[20].posneg = '+';
b[21].wort = "Wohnzimmerteppich";
b[21].posneg = '-';
}
void Gesetzm3::ergebnis()
{
cout <<endl<< "Gesucht wurde alles im Garten. Taste...";
}

void Gesetzm4::dubistdran()
{
b[0].wort="Zimmer";
b[0].posneg = '+';
b[1].wort = "Blumenbeet";
b[1].posneg = '-';
b[2].wort="Toilette";
b[2].posneg = '+';
b[3].wort = "Rasen";
b[3].posneg = '-';
b[4].wort="Arbeitszimmer";
b[4].posneg = '+';
b[5].wort = "Gartenlampe";
b[5].posneg = '-';
b[6].wort="Fernseher";
b[6].posneg = '+';
b[7].wort = "Gartenzwerg";
b[7].posneg = '-';
b[8].wort="Wohnzimmerschrank";
b[8].posneg = '+';
b[9].wort = "Teich";
b[9].posneg = '-';
b[10].wort="Herd";
b[10].posneg = '+';
b[11].wort = "Gartenstuhl";
b[11].posneg = '-';
b[12].wort="Teppich";
b[12].posneg = '+';
b[13].wort = "Gartentisch";
b[13].posneg = '-';
b[14].wort="Gardine";
b[14].posneg = '+';
b[15].wort = "Terrasse";
b[15].posneg = '-';
b[16].wort = "Autobahn";
b[16].posneg = '-';
b[17].wort="Bett";
b[17].posneg = '+';
b[18].wort = "Busch";
b[18].posneg = '-';
b[19].wort = "Kleiderschrank";
b[19].posneg = '+';
b[20].wort = "Kochtopf";
b[20].posneg = '+';
b[21].wort = "Nadelbaum";
b[21].posneg = '-';
}
void Gesetzm4::ergebnis()
{
cout <<endl<< "Gesucht wurde alles im Haus. Taste...";
}

void Gesetzm5::dubistdran()
{
b[0].wort = "Gartenstuhl";
b[0].posneg = '-';
b[1].wort = "Birke";
b[1].posneg = '+';
b[2].wort = "Gartentisch";
b[2].posneg = '-';
b[3].wort = "Blaetter";
b[3].posneg = '+';
b[4].wort = "Einfassung";
b[4].posneg = '-';
b[5].wort = "Buche";
b[5].posneg = '+';
b[6].wort = "Wohnzimmer";
b[6].posneg = '-';
b[7].wort = "Rinde";
b[7].posneg = '+';
b[8].wort ="Telefon";
b[8].posneg = '-';
b[9].wort = "Laub";
b[9].posneg = '+';
b[10].wort = "Gartenzaun";
b[10].posneg = '-';
b[11].wort = "Moos";
b[11].posneg = '+';
b[12].wort="Lampe";
b[12].posneg= '-';
b[13].wort= "Bach";
b[13].posneg= '+';
b[14].wort= "CD-Player";
b[14].posneg = '-';
b[15].wort= "Eiche";
b[15].posneg= '+';
b[16].wort = "Gartenzwerg";
b[16].posneg = '-';
b[17].wort="Ast";
b[17].posneg = '+';
b[18].wort= "Zimmer";
b[18].posneg= '-';
b[19].wort = "Busch";
b[19].posneg = '+';
b[20].wort = "Toilette";
b[20].posneg = '-';
b[21].wort = "Pilze";
b[21].posneg = '+';
}
void Gesetzm5::ergebnis()
{
    cout << endl << "Es waren Dinge im Wald.";
}


int main()
{
cout << "Suche die Assoziation!";
cout <<endl<< "-----------------------";
cout <<endl<< "Es gibt hier ein Assoziationswort, das du herausfinden sollst.";
cout <<endl<< "Z. B.: Wenn der Computer sagt: \"Staubsauger\", dann";
cout <<endl<< "   ist die Assoziation: Abstellkammer.";
cout <<endl<< "Bitte gib nun - um beim Beispiel zu bleiben - bei ja-Abstellkammer";
cout <<endl<< "ein PLUS (+) ein, bei nicht-Abstellkammer ein MINUS (-).";
cout << endl << "------------------------------------------------------------------------";
cout <<endl<< "Jetzt:   + (PLUS) oder - (MINUS) tippen, bitte  " <<endl;
Base* list[5];
Gesetzm1 g1;
Gesetzm2 g2;
Gesetzm3 g3;
Gesetzm4 g4;
Gesetzm5 g5;
list[0] = &g1; //Die Adresse der Variablen g1 wird der Zeigervariable
               // list[0] zugewiesen. 
list[1] = &g2;
list[2] = &g3;
list[3] = &g4;
list[4] = &g5;

//Den Zufall spielen lassen:
srand(time(NULL));
int zufall = rand()%5;
//Erste Funktion aufrufen:
list[zufall]->dubistdran();

//Hauptprogramm:
char janein = 'j';
//do-while:
do {
//Mischen:
for (int j=0; j<MAX; j++)
{
int k=rand() % MAX;
bezeich temp = b[j]; //Struktur b[j] speichern
b[j] = b[k]; //Tausch
b[k] = temp;
}//for j zum Mischen
//Entscheidung abfragen:
for (int i=0; i<MAX; i++)
{
char ein;
do
{
    cout <<endl<< "_ Wie wuerdest du entscheiden? +-> " << b[i].wort << " ";
    ein = getche();
} while(ein != '+' && ein != '-');
if (ein==b[i].posneg)
{
cout << " Richtig!";
rmerk[i] = true;
}//if richtig
else
{
cout << " Falsch, leider";
rmerk[i] = false;
}//else
}//for i
//Zaehl die richtigen:
int zus=0;
for (int r=0; r<MAX; r++)
zus += rmerk[r];
if (zus >18) cout <<endl<< "Exzellent!!!!!";
else if (zus > 14) cout <<endl<< zus << " Richtige - das ist schon befriedigend!";
else cout <<endl<< "Bitte nicht traurig sein! Wertung nicht so gut.";
cout <<endl<< "---------------------------------------------------------------";
//Bessere Auswertung:
for (int k=START; k<MAX; k++)
{
if (rmerk[k]==1) gut=true;
else { gut=false; break; }
}//for k
if (gut==true) cout <<endl<< "......................-> JA, du HAST es!";
else
 {
   do
  {
   cout <<endl<< "Es war nur halb gut. Moechtest du nochmal?(j/n und ENTER) ";
   cin >> janein;
  } while(janein != 'j' && janein != 'n');
if ( janein == 'n' ) break; }
} while (gut == false);

//Die zweite Funktion aufrufen:
list[zufall]->ergebnis();
cout << endl << endl << "Programm-Ende. Taste bitte ...";
getch();
return 0;
} //main()