6. Strukturen

HW06B :: C++

Go down

6. Strukturen

Post  Admin on Mon May 07, 2007 5:33 pm

Strukturen

Wie C kennt auch C Strukturen, also benutzerdefinierte Datentypen,
die andere Datentypen als Elemente enthalten.

Hier werden zunächst die Strukturen erklärt, weil sie z.T. einfacher
zu verstehen sind. In einem C Programm sollte man aber immer Klassen
verwenden!


Code:
#include
#include
using namespace std;

struct person
{
  string name;
  int alter;
};

int main(void)
{
  person ich, freunde[5];

  ich.name = "Hans";
  ich.alter = 22;

  cout << ich.name << " nenne fünf Freunde " << endl;
  for(int i=0;i<5;i  )
    {
      cout << "Name: ";
      cin >> freunde[i].name;
      cout << "Alter: ";
      cin >> freunde[i].alter;
    }

  cout << endl << "Du hast genannt:" << endl;
  for(int i=0;i<5;i  )
    cout << freunde[i].name << " : " << freunde[i].alter << endl;

}

Wie in C wird eine Struktur z.B. als struct person definiert.
Im Unterschied zu C heißt der dann der Datentyptyp,
wie im obigen Beispiel nicht
struct person
sondern nur person.

Die Strukturen in C dürfen nicht nur Daten als Mitglieder enthalten, sondern
auch Funktionen. Diese Eigenschaft bietet den Vorteil,
daß eine Datenstruktur gleich den
Code zu ihrer Manipulation mitliefern kann. Für den Benutzer wird die
Zuordnung eines Datentypen zu den dazu passenden Funktionen sehr einfach.

Auf Memberfunktionen wird wie auf andere Elemente mit der Punkt-Notation
zugegriffen. In einer Memberfunktion sind die Elemente der Struktur wie
globale Variablen verfügbar. Zudem steht in jeder Memberfunktion der
Zeiger this auf das jeweilige Objekt zur Verfügung.


Code:
#include
#include
using namespace std;

struct person
{
  string name;
  int alter;
  void print(ostream &os=cout);    // stream übergeben, so ist auch 
  void read(istream &is=cin);      // Datei I/O möglich
};

void person::print(ostream &os)
{
  os << "Name: " << name << " Alter : " << alter << endl;
}

void person::read(istream &is)
{
  is >> name >> alter;
}

int main(void)
{
  person ich={"Hans",22}, freunde[5];


  cout << ich.name << " nenne fünf Freunde " << endl;
  for(int i=0;i<5;i  )
    {
      cout << "Name und Alter: ";
      freunde[i].read();
    }

  cout << endl << "Du hast genannt:" << endl;
  for(int i=0;i<5;i  )
    freunde[i].print();

}

Memberfunktionen können wie im Beispiel in der Strukturdefinition deklariert
werden, die Definition erfolgt dann eigenständig. Dabei ist für die Funktion
aber immer der Scope anzugeben (mit ::). Wird eine Memberfunktion
gleich in der Strukturdefinition definiert, so ist sie automatisch
inline.
Code:
struct person
{
  string name;
  int alter;

  // diese Funktionen sind automatisch inline:
  void print(ostream &os=cout)
    { os << "Name: " << name << " Alter : " << alter << endl; };
  void read(istream &is=cin)
    { is >> name >> alter;};
};
avatar
Admin
Rang : Administrator

Number of posts : 141
Age : 27
Registration date : 2007-03-16

View user profile

Back to top Go down

Back to top

- Similar topics

HW06B :: C++

 
Permissions in this forum:
You cannot reply to topics in this forum