17.04.2000 Universität Dortmund, Lehrstuhl Informatik 1 dittrich@cs.uni-dortmund.de EINI II...

Preview:

Citation preview

17.04.2000

Universität Dortmund, Lehrstuhl Informatik 1dittrich@cs.uni-dortmund.de

EINI IIEinführung in die Informatik

für Naturwissenschaftler und Ingenieure II

Prof. Dr. Gisbert Dittrich

15-2

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Gliederung

• Ziele von Klassen (Wiederholung)

• Phänomene bei der elementaren Vererbung• Syntax• Überschreiben von Methoden

• Auflösung von Zirkularität

• Einführendes Beispiel: • string_Klasse, Woerter_Gross

• Beispiel: • Person, Mann, Frau

15-3

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Ziele von Klassen

• Schon besprochen:• Kapselung von Attributen+Methoden (wie struct)• Erweiterte Möglichkeiten gegenüber struct

– Überladen von Funktionen– Konstruktoren– Destruktoren

• Neu:• Effiziente Wiederverwendbarkeit

– dazu:---> Vererbung

15-4

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Neudefinition der Klasse?

• Bisherige Mittel zum Modellieren von „ähnlichen“ Klassen: • Neudefinition der Klasse

– z.B.: Code kann kopiert werden.

• Das ist nicht so gut:• langweilig,• fehleranfällig,• nicht änderungsfreundlich.

15-5

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Alternative: Vererbung

Seien A und B Klassen.

• A ist Oberklasse von B (B ist Unterklasse von A)• --> B „erbt“ Attribute und Methoden von A,

d.h. B „kennt“ Attribute und Methoden von A.

(Wie genau, wird im folgenden detailliert angegeben.)

• B fügt neue Attribute und Methoden zu denen von A hinzu, ggf. werden (alte) Methoden neu definiert.

• Jede Instanz von B ist auch Instanz von A.

15-6

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Beispiel: String - Nur Großbuchstaben

• Definiere String als Klasse:• string_Klasse:

– Attribute: Zeichenkette, Länge– Methoden: Konstruktor, Destruktor, Lies, Schreibe

• Betrachte „Unterklasse“ • Woerter_Gross:

Für Zeichenketten, die Buchstaben nur als Großbuchstaben aufweisen.

15-7

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

string_Klasse 1. Versuch

class string_Klasse {private:

char * s; int laenge;

public:string_Klasse(char *);~string_Klasse();bool lies(char *);void schreib();char * dieKette();int DieLaenge();

};Nicht gut: siehe später !

15-8

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

public besagtan dieser Stelle: Übernahme der Zugriffspezifikationenvon string_Klasse in die neue Klasse.

die Klasse Woerter_gross erbt von der Klasse string_Klasse:Attribute und Methoden von String_Klasse sind in Woerter_Gross verfügbar.

Grundansatz Vererbung

class Woerter_Gross:public string_Klasse

15-9

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Grundansatz Vererbung

class Woerter_Gross:public string_Klasse {public:

Woerter_Gross(char *);void schreib();

};

15-10

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Verfeinerung des Grundansatzes

• 2 Arten des Verbergens:• Geheimnis (auch) vor den Kindern:

– A möchte Eigenschaften für sich behalten und nicht beim Vererben weitergeben:

– --> Wahl der Zugriffsspezifikation private• Familiengeheimnisse:

– Attribute und Methoden werden nur Erben bekannt gemacht, nicht aber Außenstehenden:

– --> Wahl der Zugriffsspezifikation protected

15-11

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

„Modifikation“ von string_Klasse

class string_Klasse {protected:

char * s; int laenge;

public:string_Klasse(char *);~string_Klasse();bool lies(char *);void schreib();char * dieKette();int DieLaenge();

};

steht also für dieErben (und nur

für sie) zur Verfügung

15-12

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Zusammenfassung

• Alle als public oder protected zugreifbaren Komponenten sind für die Erben sichtbar. • Die als private charakterisierten Komponenten sind in ihrer Sichtbarkeit auf die Klasse selbst beschränkt.

15-13

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

privateZugriff nur innerhalb

der Klasse

protectedZugriff nur innerhalb

der Klasseund ihrer Erben

publicKomponente ist

öffentlichzugänglich

Zugriffsspezifikation

Klassifikationshierarchie

15-14

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Neuer Konstruktor: Heißt ja

wie die Klasse

class Woerter_Gross : publicpublic string_Klasse {public:

Woerter_Gross(char *);void schreib();

};

public besagt hier: Die Zugriffs-spezifikationen für die Komponenten bleiben beim Erben erhalten

15-15

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Konstruktor für Woerter

Woerter_Gross::Woerter_Gross(char * t) : string_Klasse(t) {

for (int i=0; i < laenge ; i++)if (islower(s[i]))

s[i] = toupper(s[i]);}

Zugriff auf den Konstruktor der

Oberklasse string

Zugriff auf das Attribut laengeder Oberklasse

15-16

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Anmerkung

• Effekt des Konstruktors (im Beispiel): • Es wird ein Objekt vom Typ Woerter_Gross geschaffen; die Buchstaben der initialisierenden Zeichenkette sind Großbuchstaben.• Der erste Schritt bei der Erzeugung des Objekts besteht im Aufruf des Konstruktors für die Vaterklasse (Syntax!).

15-17

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Redefinition einer Methode

Die Methode schreib wird neu definiert (redefiniert, überschrieben); dabei wird die Methode der Vaterklasse verwendet.

void Woerter_Gross::schreib(){cout << “Ueberschriebene Methode "

<< "(Achtung)\t\t";string_Klasse::schreib();}

15-18

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross,* Vorlage EED, EINI II, * SS 99, überarbeitet GD 8.4.2000* demonstriert Vererbung (einfach)*/

#include <iostream.h>

// verwendete Funktionsprototypen:void strcpy(char * nach, char * von);int strlen(char * r);bool islower(char c);char toupper(char c);

15-19

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 1 */

class string_Klasse {protected:

char * s; int laenge;

public:string_Klasse(char *);~string_Klasse();bool lies(char *);void schreib();char * dieKette();int DieLaenge();

};

15-20

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 2 */

string_Klasse::string_Klasse (char *t) {int lgth = strlen(t);s = new char[lgth+1];strcpy(s, t);laenge = --lgth;// sonst letztes Zeichen '\0'// mitgezählt}

string_Klasse::~string_Klasse() {laenge = -1;delete &s;}

15-21

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 3 */

bool string_Klasse::lies(char * r) {int strlen(char *);if (strlen(r) <= laenge+1) {

laenge = strlen(r);strcpy(s, r);return true; }

elsereturn false;

}

void string_Klasse::schreib() {cout << s << endl;}

15-22

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 4 */

char * string_Klasse::dieKette() {return s;}

int string_Klasse::DieLaenge() {return laenge;}

class Woerter_Gross:public string_Klasse {

public:Woerter_Gross(char *);void schreib();

};

15-23

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 5 */

Woerter_Gross::Woerter_Gross(char * t):

string_Klasse(t) {for (int i=0; i < laenge ; i++)

if (islower(s[i])) s[i] = toupper(s[i]);

}

void Woerter_Gross::schreib(){cout << "Ueberschriebene Methode "

<< "(Achtung)\t\t";string_Klasse::schreib();}

15-24

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 6 */

int main() {string_Klasse *s =

new string_Klasse ("aBra");s->schreib();s->~string_Klasse();Woerter_Gross * grS =

new Woerter_Gross("abra");grS->schreib();cout << "Laenge: "

<<grS->DieLaenge();return 0;

} Woerter_Gross

15-25

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 7 */

void strcpy(char * nach, char * von) {while (*nach++ = *von++);

}

int strlen(char * r) {int f = 0;while (r[f++]);return f;}

15-26

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

/* Woerter_Gross, Fortsetzung 8 */

bool islower(char c) {if (('a' <= c) && (c <= 'z'))

return true;else

return false;}

char toupper(char c) {if (islower(c))

return (c - 'a' + 'A');else

return c;}

15-27

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Woerter_Gross Ausgabe

aBra

Ueberschriebene Methode (Achtung) ABRA

Laenge: 4

15-28

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Zusammenfassung

• Klasse Woerter_Gross ist Spezialfall der Klasse string_Klasse • (Wörter enthalten nur Großbuchstaben).

• Erbende Klasse kann auf alle nicht als private gekennzeichneten Komponenten zugreifen.• Die Zugriffsspezifikation protected wurde eingeführt, um den Zugriff angemessen zu regeln

15-29

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Zusammenfassung

• Ein neuer Konstruktor mußtemußte definiert werden (anderer Name):• Der Konstruktor der Oberklasse kann verwendet werden.

• Eine Methode wurde redefiniert • Hierbei wurde auch die gleichnamige Methode des Vaters verwendet.

• Die Syntax hierfür wurde eingeführt.

15-30

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

FrauFrau MannMann

PersonPerson

Beispiel: Männer und Frauen

Gemeinsame Eigenschaften: • Name (Beschränkung auf Vornamen), • Vater, • Mutter. • --> Oberklasse: Person

– Obige Eigenschaften dort formulieren

15-31

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

class Person {private:

string * Vorname;Frau * Mutter;Mann * Vater;

public:Person(char *);Person(string *);~Person();string * DerVorname();void SetzeMutter(Frau *);void SetzeVater(Mann *);void Druck(char *);

};

gemeinsame Eigenschaften

gemein-same

Methoden

15-32

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Anmerkung

• Gemeinsame Eigenschaften private• --> von außen nicht zugreifbar. • Auch von Erben nicht:

– sonst als protected vereinbart.

15-33

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Modellierung der Klasse Frau

• Konstruktor (aus Namen und aus Person),• hat Ehemann, • heiratet,• ist Ehefrau von.

class Frau: public Person {private:

Mann * Ehemann;public:

Frau(char *);Frau(Person *);void NimmZumManne(Mann *);Mann * EhefrauVon();

};

15-34

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Analog: Modellierung Klasse Mann

• Konstruktor (aus Namen und aus Person),• hat Ehefrau, • heiratet,• ist Ehemann von.

class Mann: public Person {private:

Frau * Ehefrau;public:

Mann(char *);Mann (Person *);void NimmZurFrau(Frau *);Frau * EhemannVon();

};

15-35

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Problem: Zirkularität

Person • erfordert die Kenntnis von Frau, Mann,

Mann • erfordert die Kenntnis von Person, Frau,

Frau • erfordert die Kenntnis von Person, Mann.

(Erinnert an forward in Pascal.)

15-36

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Lösung

Deklaration sieht im Programm so aus:

class Mann;class Frau;class Person { ... }; class Frau: public Person { ... };class Mann: public Person { ... };

Dann erst folgen die Definitionen der Methoden.

hier werdendie Namen

bekanntgemacht

15-37

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Konstruktoren für Klasse Person

Konstruktoren für die Klasse sind überladen, einmal Zeichenkette, dann string als Parameter.

Person::Person(char * v) {Vorname = new string(v);Vater = NULL;Mutter = NULL;}

Person::Person(string * s) {Vorname = s;Vater = NULL;Mutter = NULL;}

15-38

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Weitere Methoden

Destruktor: • Ruft nur den Destruktor für die Zeichenkette auf

Person::~Person() {Vorname->~string();}

Die anderen Methoden (bis evtl. auf Druck) sollten klar sein. Die Methode Druck druckt den Vornamen aus und ruft ggf. die Druck-Methode für Vater und für Mutter auf.

15-39

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

void Person::Druck(char * s) {cout << s

<< "(Vorname) " << Vorname->dieKette() << endl;

if(Mutter != NULL) {cout << "\nDaten der Mutter:\n";Mutter->Druck("");}

if(Vater != NULL) {cout << "\nDaten des Vaters:\n ";Vater->Druck("");}

};

15-40

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Bemerkenswert

• Aufrufe • Vater->Druck() und Mutter->Druck()benutzen die Tatsache, daß Vater und Mutter auch vom Typ Person sind.• In den Klassen Mann oder Frau sind keine neuen Methoden Druck vereinbart!

• Dies deutet an: • Vererbung erlaubt flexible Modellierung und Programmierung.

15-41

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Konstruktoren und Methoden für die Klasse Mann

Mann::Mann(char * v) :Person(v) {Ehefrau = NULL;}

Mann::Mann(Person *p) : Person(p->DerVorname()){

Ehefrau = NULL;}

void Mann::NimmtZurFrau(Frau * thisLady) {Ehefrau = thisLady;}

Frau * Mann::EhemannVon(){return Ehefrau;}

15-42

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Heiratsroutine

void Verheirate(Mann * m, Frau * f){m->NimmZurFrau(f);f->NimmZumManne(m);}

Bemerkenswert: steht außerhalb der Klassendefinitionen.

15-43

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

int main() {Mann * Adam = new Mann("Adam");Frau * Eva = new Frau("Eva");Mann * Kain = new Mann("Kain");Kain->SetzeMutter(Eva); Kain->SetzeVater(Adam);Mann * Abel = new Mann("Abel");Abel->SetzeMutter(Eva); Abel->SetzeVater(Adam);Adam->Druck("Zu Adam: ");

Eva->Druck("\nZu Eva:");Kain->Druck("\n\nAngaben zu Kain:");Abel->Druck("\n\nAngaben zu Abel:");Verheirate(Adam, Eva);cout << "\nverheiratet?\n";Eva->EhefrauVon()->

Druck("\tEva ist verheiratet mit:\n");Adam->EhemannVon()->

Druck("\tAdam ist verheiratet mit :\n ");return 0;}

Mann-Frau

15-44

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

Mann-Frau: AusgabeZu Adam: (Vorname) Adam

Zu Eva: (Vorname) Eva

Angaben zu Kain: (Vorname) Kain

Daten der Mutter: (Vorname) Eva

Daten des Vaters: (Vorname) Adam

Angaben zu Abel: (Vorname) Abel

Daten der Mutter: (Vorname) Eva

Daten des Vaters: (Vorname) Adam

verheiratet?

Eva ist verheiratet mit:

(Vorname) Adam

Adam ist verheiratet mit:

(Vorname) Eva (umformatiert: GD)

15-45

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen// Vorlage EED EINI II, SS 99, prog-27a; // Überarbeitet: GD 14.4.00// demonstriert Vererbung//

#include <iostream.h>#include <stdio.h>#include "clstring.h"

class Mann;class Frau;void Verheirate(Mann *, Frau *);

15-46

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 1

class Person {private:

stringcl * Vorname;Frau * Mutter;Mann * Vater;

public:Person(char *);Person(stringcl *);~Person();stringcl * DerVorname();void SetzeMutter(Frau *);void SetzeVater(Mann *);void Druck(char *);

};

15-47

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 2

class Frau: public Person {private:

Mann * Ehemann; public:

Frau(char *);Frau (Person *);void NimmZumManne(Mann *);Mann * EhefrauVon();};

class Mann: public Person {private:

Frau * Ehefrau; public:

Mann(char *);Mann (Person *);void NimmZurFrau(Frau *);Frau * EhemannVon();};

15-48

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 3

Person::Person(char * v) {Vorname = new stringcl(v);Vater = NULL; Mutter = NULL;}

Person::Person(stringcl * s) {Vorname = s;Vater = NULL; Mutter = NULL;}

Person::~Person() {Vorname->~stringcl();}

stringcl * Person::DerVorname() {return Vorname;}

void Person::SetzeMutter(Frau * Mom) {Mutter = Mom;}

void Person::SetzeVater(Mann * Dad) {Vater = Dad;}

15-49

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 4

void Person::Druck(char * s) {cout << s << "\t(Vorname) " << Vorname->dieKette() << endl;if(Mutter != NULL) { cout << "\nDaten der Mutter: " << endl;

Mutter->Druck("");}if(Vater != NULL) { cout << "\nDaten des Vaters: " << endl;

Vater->Druck("");}};

Frau::Frau(char * v) :Person(v) {Ehemann = NULL;}

Frau::Frau(Person *p) :Person(p->DerVorname()){Ehemann = NULL;}

15-50

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 5

void Frau::NimmZumManne(Mann * erDa) {Ehemann = erDa;}

Mann * Frau::EhefrauVon(){return Ehemann;}

Mann::Mann(char * v) :Person(v) {Ehefrau = NULL;}

Mann::Mann(Person *p) :Person(p->DerVorname()){Ehefrau = NULL;}

void Mann::NimmZurFrau(Frau * thisLady) {Ehefrau = thisLady;}

15-51

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 6

Frau * Mann::EhemannVon(){return Ehefrau;}

void Verheirate(Mann * m, Frau * f){m->NimmZurFrau(f);f->NimmZumManne(m);}

int main() {Mann * Adam = new Mann("Adam");Frau * Eva = new Frau("Eva");Mann * Kain = new Mann("Kain");Kain->SetzeMutter(Eva);Kain->SetzeVater(Adam);

15-52

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Personen mit Unterklassen, Fortsetzung 7//int main() {Fortsetzung !!!!

Mann * Abel = new Mann("Abel");Abel->SetzeMutter(Eva);Abel->SetzeVater(Adam);Adam->Druck("Zu Adam: ");Eva->Druck("\nZu Eva:");Kain->Druck("\n\nAngaben zu Kain:");Abel->Druck("\n\nAngaben zu Abel:");Verheirate(Adam, Eva);cout << "\nverheiratet?\n";Eva->EhefrauVon()->Druck("\tEva ist

verheiratet mit: \n");Adam->EhemannVon()->Druck("\tAdam ist

verheiratet mit: \n");return 0;}

15-53

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Hilfsklasse stringcl in Datei "clstring.h"// Vorlage EED EINI II SS99, // überarbeitet GD 9.4.00

void strcpy(char * nach, char * von);int strlen(char * r);bool islower(char c);char toupper(char c);

void strcpy(char * nach, char * von) {while (*nach++ = *von++);}

int strlen(char * r) {int f = 0;while (r[f++]);return f;}

15-54

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Hilfsklasse stringcl, Fortsetzung 1

bool islower(char c) {if (('a' <= c) && (c <= 'z'))

return true;else

return false;}

char toupper(char c) {if (islower(c))

return (c - 'a' + 'A');else

return c;}

15-55

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Hilfsklasse stringcl, Fortsetzung 2

class stringcl {protected:

char * s; int laenge;

public:stringcl(char *);~stringcl();bool lies(char *);void schreib();char * dieKette();int DieLaenge();

};

15-56

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Hilfsklasse stringcl, Fortsetzung 3

stringcl::stringcl (char *t) {int lgth = strlen(t);s = new char[lgth+1];strcpy(s, t);laenge = --lgth;}

stringcl::~stringcl() {laenge = -1; delete &s;}

bool stringcl::lies(char * r) {int strlen(char *);if (strlen(r) <= laenge) {

laenge = strlen(r);strcpy(s, r);return true;}

else return false;}

15-57

Prof. Dr. G. Dittrich17.04.2000

EINI II Kap. 15: Einführung in die Vererbung

// Hilfsklasse stringcl, Fortsetzung 4

void stringcl::schreib() {cout << s << endl;}

char * stringcl::dieKette() {return s;}

int stringcl::DieLaenge() {return laenge;}

Recommended