Moin liebe C++ Liebhaber.
(Eventuell auch: Hallo Zerm!)
Ich erweitere gerade meinen Horizont um C++ mit einer Literatur aus 1994 und hätte da mal ein spezifisches Problem.
Die Anforderung sei eine Mitgliederverwaltung eines Vereins, welcher sowohl natürliche als auch juristische Personen aufnimmt.
Gegeben sei folgende Klassenhierachie der zu verwaltenden Daten.
Alles anzeigen
Nun möchte ich die Dinger so verwalten, dass meine Liste über die Mitgliedsnummer nach Eintritt indiziert (der Einfachheit halber ein Stack) und idealerweise für jeden Kontakt eine Adresse für die Aufkleber der Mitgliederzeitung generiert.
Dazu meine zwei brennenden Fragen zur Gestaltung dieses Stacks, der vermutlich wegen der unterschiedlichen Datentypen als Template definiert werden muss:
1) (Wie) Kann ich in dem Template sicherstellen, dass zwar NaturalPerson und JuristicPerson in den Stack gepackt werden können, aber keine 'abstrakte' Person?
('Abstrakt' in Anführungszeichen. Diese Person soll schon relativ konkret sein und auch im internen Telefonverzeichnis aufgeführt werden, wobei die Adressen irrelevant werden. Das Schlüsselwort abstract scheidet also aus.)
2a) (Wie) Kann ich besagte Adressaufkleber generieren, wo doch die notwendigen Adressen über unterschiedliche Nachrichten angesteuert werden?
(Wenn ich zerm richtig verstanden habe, ist die Klassenprüfung in objektorientiertem C++ ja verpönt.)
2b) Natürlich könnte ich eine Methode
Nur kann ich die ja nicht in Person hinterlegen, weil die den Typen
Ganz genau genommen ist diese bevorzugte Kontaktadresse auch keine Eigenschaft einer Person als solche sondern kann von Verein zu Verein variieren und gehört somit auch gar nicht in die konkreten Subklassen.
3a) Liege ich eventuell mit meiner Vermutung falsch und ein Template ist der falsche Weg?
3b) Wie sähe in diesem Fall der richtige Weg aus?
Disclaimer:
Nein, das ist kein konkretes Projekt. Ich habe mir zur Veranschaulichung nur etwas Realistisches ausgesucht. Ich will ja nicht, dass Andere Programme für mich entwickeln. Ich will mich nur weiterbilden.
In Objective-C stellt sich mir diese Frage nicht.
3) entfällt, da Templates nicht unterstützt werden.
1) würde ich als Personenprotokoll realisieren und den Stack auf dieses Protokoll typisieren
2) finge ich stumpf mit
Falls Freunde von Swift bis hierher gelesen haben:
1) und 3) wäre ja identisch zu Objective-C
Wie könnte ich aber 2) in Plain Swift (also ohne Objective-C Overhead) realisieren?
Eventuell lässt sich daraus eine C++ Lösung ableiten.
Selbstnotiz: Fragestellung + Korrekturen ~1h
(Eventuell auch: Hallo Zerm!)
Ich erweitere gerade meinen Horizont um C++ mit einer Literatur aus 1994 und hätte da mal ein spezifisches Problem.
Die Anforderung sei eine Mitgliederverwaltung eines Vereins, welcher sowohl natürliche als auch juristische Personen aufnimmt.
Gegeben sei folgende Klassenhierachie der zu verwaltenden Daten.
C-Quellcode
- class Person {
- protected:
- String name;
- PhoneNumber telefon;
- MailAddress email;
- public:
- /* Getter, Setter, Konstruktoren, Destruktoren... */
- }
- class NaturalPerson : public Person {
- private:
- Salutation anrede;
- String vorname;
- Address wohnadresse;
- Address jobadresse;
- Date geburtstag;
- public:
- /* Getter, Setter, Konstruktoren, Destruktoren... */
- }
- class JuristicPerson : public Person {
- private:
- Address firmensitz;
- String handelsregisterNummer;
- String umsatzsteuerID
- Date gruendungsdatum
- public:
- /* Getter, Setter, Konstruktoren, Destruktoren... */
- }
Nun möchte ich die Dinger so verwalten, dass meine Liste über die Mitgliedsnummer nach Eintritt indiziert (der Einfachheit halber ein Stack) und idealerweise für jeden Kontakt eine Adresse für die Aufkleber der Mitgliederzeitung generiert.
Dazu meine zwei brennenden Fragen zur Gestaltung dieses Stacks, der vermutlich wegen der unterschiedlichen Datentypen als Template definiert werden muss:
1) (Wie) Kann ich in dem Template sicherstellen, dass zwar NaturalPerson und JuristicPerson in den Stack gepackt werden können, aber keine 'abstrakte' Person?
('Abstrakt' in Anführungszeichen. Diese Person soll schon relativ konkret sein und auch im internen Telefonverzeichnis aufgeführt werden, wobei die Adressen irrelevant werden. Das Schlüsselwort abstract scheidet also aus.)
2a) (Wie) Kann ich besagte Adressaufkleber generieren, wo doch die notwendigen Adressen über unterschiedliche Nachrichten angesteuert werden?
(Wenn ich zerm richtig verstanden habe, ist die Klassenprüfung in objektorientiertem C++ ja verpönt.)
2b) Natürlich könnte ich eine Methode
bevorzugteKontaktadresse()
definieren, die dann je nach hinterlegter Präferenz eine valide (natürliche Person) oder die einzige (natürliche und juristische Person) Adresse ausspuckt.Nur kann ich die ja nicht in Person hinterlegen, weil die den Typen
Address
nicht einmal kennt. Und sofern 1) nicht gelöst werden kann ist somit der Compiler folgerichtig der Meinung, dass eine Person nicht auf bevorzugteKontaktaddresse() reagieren wird, obwohl die konkrete Subklasse im Stack das kann. Ein Dilemma, das ich lösen möchte.Ganz genau genommen ist diese bevorzugte Kontaktadresse auch keine Eigenschaft einer Person als solche sondern kann von Verein zu Verein variieren und gehört somit auch gar nicht in die konkreten Subklassen.
3a) Liege ich eventuell mit meiner Vermutung falsch und ein Template ist der falsche Weg?
3b) Wie sähe in diesem Fall der richtige Weg aus?
Disclaimer:
Nein, das ist kein konkretes Projekt. Ich habe mir zur Veranschaulichung nur etwas Realistisches ausgesucht. Ich will ja nicht, dass Andere Programme für mich entwickeln. Ich will mich nur weiterbilden.
In Objective-C stellt sich mir diese Frage nicht.
3) entfällt, da Templates nicht unterstützt werden.
1) würde ich als Personenprotokoll realisieren und den Stack auf dieses Protokoll typisieren
2) finge ich stumpf mit
-respondsToSelector:
abFalls Freunde von Swift bis hierher gelesen haben:
1) und 3) wäre ja identisch zu Objective-C
Wie könnte ich aber 2) in Plain Swift (also ohne Objective-C Overhead) realisieren?
Eventuell lässt sich daraus eine C++ Lösung ableiten.
Selbstnotiz: Fragestellung + Korrekturen ~1h
«Applejack» "Don't you use your fancy mathematics to muddle the issue!"
Iä-86! Iä-64! Awavauatsh fthagn!
Iä-86! Iä-64! Awavauatsh fthagn!
kmr schrieb:
Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P