String einlesen lassen (Klassen)
-
@Wade1234 sagte in String einlesen lassen (Klassen):
wie wäre es mit cin >> a.getName(); ?
Schlecht? Der ist ja gleich wieder weg.
-
@mmm_1482_ dann erstell dir doch eine methode, die
cin >> name
aufruft.
-
@mmm_1482_
Wenn du diese unsäglichen getter/setter verwenden willst, musst du den Namen in einen String einlesen und dann damit set aufrufen.
-
@Wade1234
habe ja bereits die getter und setter dazu gemacht. und wenn ich selbst einen Namen initialisiere, dann funktioniert es auch. Aber ich möchte, dass der Benutzer den Namen eingibt
-
-
@Wade1234 perfekt das hat funktioniert! Vielen dank
-
@mmm_1482_ im hinblick auf oop ist das natürlich vorbildlich, geschwindigkeitsmäßig wird da aber wieder kopiert und alles ist langsam.
-
@Wade1234 ja ich weiß.. nur müssen wir das für die Prüfung leider drauf haben
-
@mmm_1482_ achso. ja also generell kannst du dir merken, dass du für jede popelige variable eine solche set-methode erstellen darfst, die dann den übergebenen wert kopiert. dadurch ist das dann alles schön abgesichert, aber gängige computerspiele laufen dann entsprechend langsam.
-
@Wade1234 sagte in String einlesen lassen (Klassen):
@mmm_1482_ achso. ja also generell kannst du dir merken, dass du für jede popelige variable eine solche set-methode erstellen darfst, die dann den übergebenen wert kopiert. dadurch ist das dann alles schön abgesichert, aber gängige computerspiele laufen dann entsprechend langsam.
Ordentlich implementiert sind Getter/Setter unter Optimierungen nicht lansamer als direkter Zugriff auf die Variablen (
const&
-Getter und Setter, die unnötige Kopien vermeiden, z.B. by value-Parameter + Move).Was aber definitiv stimmt, ist dass sie ein ziemlicher Schlepp zu implementieren sind und den Code mit jeder Menge Boilerplate aufblähen. Daher bin ich auch kein Fan davon.
Sie haben aber nicht von der Hand zu weisende Vorteile: Ein einziges Interface um von außen auf Instanzattribute zuzugreifen, an das man bei Bedarf noch ein Stück zusätzlichen Code hängen kann.
Manchmal wünsche ich mir sowas wie C#-Properties auch für C++. Es wäre schon manchmal nützlich Member-Zugriffe mit zusätzlichem Code versehen zu können, ohne das Interface so verändern zu müssen, dass man sämtlichen Code anpassen muss. Andererseits kann man aber auch Klassen so bauen, dass den Anwender nicht zu interessieren braucht, was für Attribute die alle haben - nur was für eine Funktionalität sie exponieren.
-
@Wade1234 sagte in String einlesen lassen (Klassen):
geschwindigkeitsmäßig wird da aber wieder kopiert und alles ist langsam.
So ein Quatsch.
-
@Swordfish sagte in String einlesen lassen (Klassen):
@Wade1234 sagte in String einlesen lassen (Klassen):
geschwindigkeitsmäßig wird da aber wieder kopiert und alles ist langsam.
So ein Quatsch.
du wiederholst dich......
-
Wenn du Blödsinn schreibst, dass "gängige Computerspiele [...] dann entsprechend langsam [laufen]", dann spendiere ich @Swordfish sogar noch die Soße zum Quatsch
Tipp: schau dir auf godbolt an, was wirklich passiert. Und wenn es Unterschiede gibt, beweise mit einem Profiler, dass das wirklich die Ursache ist.
-
ja da wird dann operator= aufgerufen, welches dann den inhalt kopiert.
-
@Wade1234 tu was @wob gesagt hat.
-
@Swordfish habe ich. operator= wird aufgerufen und laut http://www.cplusplus.com/reference/string/string/operator=/ wird der inhalt kopiert.
-
@Wade1234 sagte in String einlesen lassen (Klassen):
@Swordfish habe ich. operator= wird aufgerufen und laut http://www.cplusplus.com/reference/string/string/operator=/ wird der inhalt kopiert.
Ich verstehe nicht, was das mit dem Thema "getter und setter", die deiner Meinung nach alles langsam machen, zu tun haben sollte.
-
@wob sagte in String einlesen lassen (Klassen):
@Wade1234 sagte in String einlesen lassen (Klassen):
@Swordfish habe ich. operator= wird aufgerufen und laut http://www.cplusplus.com/reference/string/string/operator=/ wird der inhalt kopiert.
Ich verstehe nicht, was das mit dem Thema "getter und setter", die deiner Meinung nach alles langsam machen, zu tun haben sollte.
naja dass da im gegensatz zum direkten schreiben ein weiterer kopiervorgang stattfindet.
-
@Wade1234 Code? Link zu godbolt?
-
@Wade1234 sagte in String einlesen lassen (Klassen):
naja dass da im gegensatz zum direkten schreiben ein weiterer kopiervorgang stattfindet.
Aber nicht, so wie @Finnegan schon geschrieben hat, wenn man
const &
Getter und Setter benutzt.