Merfachvererbung
-
@DocShoe sagte in Merfachvererbung:
Ist das zufällig ein C++ "Buch" von Jürgen Wolf?
Da könnte man auch fragen "Hast du dir einen Wolf programmiert?"
SCNR
-
Ne zum Glück nicht. Moment...ich poste mal die komplette Aufgabenstellung dazu
-
Die Software einer Telekommunikationsgesellschaft soll Telefonverbindungen erfassen. Es sind die Telefonnummern von Anrufern und Empfängern sowie der Auf- und Abbau von Verbindungen zu simulieren.
Definieren Sie zu dem Zweck eine Basisklasse PhoneNr zur Darstellung einer Telefonnummer, die nur ein Datenelement vom Typ string besitzt. Es gibt nur einen Dafault-Konstruktor, der die Telefonnummer auf "0" setzt, sowie Zugriffsmethoden, die die Telefonnummer setzen bzw. lesen.
Die Klassen InCall und OutCall entstehen aus PhoneNr durch public Vererbung. OutCall besitzt ein zusätzliches boolsches Flag flag, das anzeigt, dass eine Telefonverbindung aufgebaut wird. InCall besitzt ein zusätzliches Flag flag, das anzeigt, dass ein Telefonanruf angenommen wurde, dass heißt dass eine Verbindung besteht. Beide Klassen besitzt einen Default-Konstruktor, der das jeweilige Flag false setzt und Zugriffsmethoden getflag() und setflag() zum Lesen bzw. Schreiben des jeweiligen Flags.
Die Klasse PhoneCall entsteht aus InCall und OutCall durch public-Vererbung. Sie besitzt kein zusätzliches Datenelement und folgende Methoden:
1.InitCall() setzt die als Argument übergebene Telefonnummer eines Anrufers, falls seine gespeicherte Nummer "0" ist, und initialisiert so eine Sitzung.
2. dial().....so wie bereits beschriebenDie Lösung dazu unterscheidet sich nicht zu meinen Code, den ich gestern gepostet habe. Nur die Funktion dial() muss wiegesagt neugeschrieben werden.
-
Uff
Haste nen Link zur Aufgabe? Oder den Namen des Buches?
-
wozu noch der Link...das ist doch schon die komplette Aufgabe
-
Nen Link habe ich leider nicht
-
@C-Sepp sagte in Merfachvererbung:
wozu noch der Link...das ist doch schon die komplette Aufgabe
Würde ganz gerne sehen, welche Aufgaben da sonst noch so gestellt werden.
Wie heisst denn das Buch oder wasauchimmer?
-
Krasses Versagen des Buches, ich würde das nämlich einen solch groben Modellierungsfehler nicht so entspannt sehen wie manch andere hier. Das ist schon ein Wegwerfgrund. Ganz ernst, ohne Überteibung, denn wer solchen Müll an einer Stelle schreibt, der macht das auch an anderen Stellen. @C-Sepp: Du merkst ja vielleicht auch selber, dass du hier eher "dumme" Fragen stellen musst. Das ist nicht normal für Anfänger auf deinem Niveau. Das liegt an dem schlechten Lehrmaterial. Daraus wirst du nur schlechtes C++ lernen, und das wieder zu verlernen ist hinterher viel schwieriger, als es gleich richtig zu lernen. Und neu lernen musst du später sowieso.
-
@C-Sepp
Vererbung ohnevirtual
sieht im Speicher so aus als ob jede Basisklasse als ein Member vorliegt, ganz am Anfang des Objekts:struct PhoneNr { string phonenr; }; struct InCall { PhoneNr base; // Basisklassen-Subobjekt bool phcrecorded; }; struct OutCall { PhoneNr base; // Basisklassen-Subobjekt bool cncestablished; }; struct PhoneCall { InCall base1; // 1. Basisklassen-Subobjekt OutCall base2; // 2. Basisklassen-Subobjekt }; PhoneCall phc;
phc.base1.base
undphc.base2.base
sind also zwei völlig unabhängige Sub-Objekte vonphc
, jeweils vom TypPhoneNr
- und die haben natürlich auch jeweils ein eigenes, unabhängiges Memberphonenr
.
-
Alles klar....die Aufgabe stammt aus den Buch "C++ Das Übungsbuch " von Ulla Kirch und Peter Prinz.
Nur die Frage zu den 2 "Versionen" von getphonenr() in InCall und OutCall aufgrund der Vererbungshierarchie ist
geblieben. Dazu habe ich eine Funktion geschrieben in der phonenr mit InCall::setphonenr("Test1") und OutCall::setphonenr("Test2") beschrieben und anschließend mit InCall::getphonenr() usw. ausgelesen wird. Dabei war zu erkennen, dass nur "Test2 in den Speicher geschrieben wurde. Inwiefern macht eine Abfrage der Werte so wie dial():bool PhoneCall::dial(const string& n) { if (InCall::getphonenr()=="0" && OutCall::getphonenr() !="0") { ... } else return false; }
dann eigentlich Sinn, geschweige denn eine Vererbung solcher Funktionen von einer Basisklasse zu mehreren abgeleiteten Klassen? Danke!