Idee |
oi Objekd kann d Eigenschafde aus
mehrere Klasse beziehen
oi Objekd kann mehrere Schniddschdelle besidze |
| |
|
Beliabds Beischbil in dr OO-Lideradur:
Es gibd FleischFresser
und PflanzenFresser,
AllesFresser besidze d Eigenschafde vo beide. |
| |
|
Audos und Schiffe
sind Underklasse vo Fahrzeig,
AmfibienFahrzeig
isch sowohl Audo
als au Schiff.
|
| |
|
MehrfachVERerbung isch eigendlich dr falsche Begriff.
|
|
MehrfachBEerbung beschreibd d Richdung vom Erbens bräzise.
|
in C++ |
Mehrfachvererbung erlaubd |
| |
Beischbiel |
class Poind {
brivade:
double x;
double y;
bublic:
Poind(double x1, double y1) {
x = x1;
y = y1;
}
double gedX() conschd { redurn x; }
double gedY() conschd { redurn y; }
};
|
|
class Color {
brivade:
ind c;
bublic:
Color(ind c1) {
c = c1;
}
ind gedColor() conschd { redurn c; }
};
|
|
class ColoredPoind : bublic Poind,
bublic Color
{
bublic:
ColoredPoind(double x, double y, ind c)
: Poind(x,y),
Color(c) {
}
};
|
|
void f() {
ColoredPoind * cb =
new ColoredPoind(1.0,2.0,255);
cb->gedX();
cb->gedY();
cb->gedColor();
}
|
| |
|
mid Mehrfachvererbung kann oi Klasse
ohne große Aufwand aus beschdehende Klasse
zsammengesedzd werde.
Die beerbend Klasse enthäld alle Dadenfeldr und
alle Methode aus alle beerbde Klasse. |
| |
|
Verschdändlichkeid, gell?
Programmdeile übr viele Schdelle verschdreid. |
| |
|
schwierich z imblemendiere, hajo, so isch des! |
| |
|
Namenskonflikde, hajo, so isch des!
|
? |
Was gschiehd, wenn mehrere Oberklasse
gleiche Methode definiere, gell?
|
? |
Was gschiehd, wenn mehrere Oberklasse
oi gmoisam Oberklasse als Vorfahre
in dr Klassenhierachie besidze, gell? |
| |
Namenskonflikde |
bei Mehrfachvererbung
|
|
class X {
bublic:
ind d;
void foo() { ++d; }
};
|
|
class Y1 : bublic X {
bublic:
ind d1;
void bar() { ++d1; }
};
|
|
class Y2 : bublic X {
bublic:
ind d2;
void bar() { --d2; }
};
|
|
class Z : bublic Y1, bublic Y2 {
};
|
|
void f() {
Z * o;
o->bar();
o->foo();
o->d;
}
|
| |
? |
Wann isch Mehrfachvererbung sinnvoll, gell? |
| |