DTO Klassen in C++ (QT)
-
Hi Forum,
ich bin C# Entwickler und steige nun auf C++ um. Ich habe C++ schon einmal im Studium gelernt und habe ich bereits wieder etwas eingearbeitet jedoch bin ich mir nicht so sicher wie man eine DTO Klasse (POJO, DAO, simple Klasse) sauber implementiert. Hier ein Beispiel. Die Klasse Person hat Name Vorname und eine Adresse Objekt.
public class Person { private Adresse adresse; public Adresse Adresse { get { return adresse; } set { if(value != adresse) adresse = value; //more } } public string Name { get; set; } public string Vorname { get; set; } }
Wenn ich das in C++ in der QT Umgebung nach baue würde ich für Name und Vorname getter/setter schreiben und als Datentyp QString nutzen. Soweit kein Problem.
Jedoch was genau ist Adresse innerhalb Person?
Ein Pointer? Also:
private: Adresse* adresse;
oder eine Referenz?
Adresse& adresse;Wie werden die setter/getter geschrieben? Ich möchte das man das Objekt von außen verändern darf deswegen mal kein const usw. Aber ist die Rückgabe eines Zeigers richtig?
Adresse* Person::getAdresse() { return adresse; }
Wie setter?
void Person::setAdresse(const Adresse* adr) { delete adresse; adresse = 0L; adresse = adr; }
Viele Grüße
-
Wiso nicht einfach ganz banal
Adresse adresse;
?
Oder anders: warum muss es unbedingt ein Pointer oder eine Referenz sein?
-
Eine Instanzvariable?
Die Adresse kommt von außerhalb...
-
Ich glaube ich verstehe jetzt nicht ganz, was du willst. Name oder Vorname kommen doch bestimmt auch von Außerhalb und bei ihnen sind normale Variablen offenbar kein Problem. Inwieweit ist das bei der Adresse anders?
-
Ja ich weiß es ja nicht so genau...
In QT zum Beispiel sind alle Memberobjekte Zeiger* (Heap)...
-
Du meinst die Komponenten, die vom Designer automatisch angelegt werden? Ich kann dir gar nicht sagen, warum genau das so ist, dass ist aber für dich auch weniger relevant, weil du dich da um die Freigabe nicht kümmern musst.
Würdest du allerdings deine Adresse als Pointer verwalten, müsstest du dich um Anfordern und Freigeben selbst kümmern. Außerdem kannst du nicht so einfach z.B. den Adressen-Pointer zwischen verschiedenen Personen austauschen, weil sonst Änderungen bei einer Person sich auch auf andere auswirken würden. Bei einer normalen Variable werden aber Kopien erstellt (ich weiß nicht, inwieweit du schon C++ beherrschst, in C++ sind anders als in C# Klassen nicht automatisch Referenztypen).Ich glaube zumindest, dass eine einfache Klasseninstanz in deinem Fall das Günstigste wäre, ich kenne aber auch nicht genau dein Anforderungssprektrum.
-
Naja prof. Softwareentwicklung...
Hab mich nun entschieden Pointer + Copyctor + op= überschreiben
Das passt...