Referenz auf String Objekt
-
silent_max schrieb:
Wo besteht eigentlich der Unterschied zwischen
call-by-referenceundcall-by-value??
-
Ich denke, du willst sowas:
#include <iostream> #include <string> using namespace std; // Für kleine Übungsprogramme völlig in Ordnung. Sogar gut, denn es verkürzt den Code und macht ihn leichter lesbar - alles, was man eigentlich braucht void Text(string& Eingabe) // Es wird direkt nach 'Eingabe' extrahiert. Das macht den Code in der main() und in Text() kürzer und hat auch sonst keine Nachteile. // Ich habe mich sowieso schon gefragt: Was sollte das mit dem Parameter Eingabe? Variablen, die die Funktion nur für die interne // Funktionsweise braucht, werden auch intern definiert, nicht als Parameter. { cout << "Geben Sie einen Text ein:\n"; getline(cin, Eingabe); // Die Fehlerprüfung unterlassen wir mal zugunsten der Einfachheit } int main() { string Eingabe; Text(Eingabe); cout << Eingabe << "\n"; } // Das return-Statement kann in der main() weggelassen werden
-
Sone schrieb:
Ich denke, du willst sowas:
oder sowas:
#include <iostream> #include <string> std::string ReadText() { cout << "Geben Sie einen Text ein:\n"; std::string input; getline(cin, input); return input; } int main() { string Eingabe = ReadText(); cout << Eingabe << "\n"; }
-
Skym0sh0 schrieb:
`
call-by-value
Bei CBV werden die an eine Funktion übergebenen Daten kopiert. Es besteht dann keine Verbindung mehr zwischen den Daten beim Aufrufer und den Daten in der Funktion. Werden große Objekte auf diese Weise übergeben, so ist das sehr kostspielig in Bezug auf Rechenzeit (der Kopiervorgang) und Speicherplatz (Daten sind mehrmals vorhanden).
call-by-reference
Anstatt die Daten zu kopieren werden Referenzen auf die Daten übergeben. Man kann sich das als Zeiger vorstellen: Beim Aufrufer zeigt eine Variable auf ein bestimmtes Datum, in der Funktion zeigt eine andere Variable auf dasselbe Datum. Methodenaufrufe an einem so übergebenen Objekt arbeiten also auf demselben Objekt, das auch außerhalb sichtbar ist.`
Habe ich das richtig verstanden, dass bei CBR, also call-by-reference,
-> die Performance besser ist?
-> der Zugriff auf Daten bzw. einfacher ist?
-
silent_max schrieb:
Habe ich das richtig verstanden, dass bei CBR, also call-by-reference,
-> die Performance besser ist?Ja
silent_max schrieb:
-> der Zugriff auf Daten bzw. einfacher ist?
Nein. Der Unterschied besteht darin, dass bei CBR das Objekt *nicht* kopiert wird. Änderungen an dem Objekt haben also Auswirkungen "nach außen". Deswegen sollten Objekte bei CBR möglichst "const" übergeben werden.
-
http://www.cplusplus.com/forum/general/7990/
So wie ich das jetzt verstanden habe, wird bei call-by-reference mit Pointern gearbeitet??
-
silent_max schrieb:
http://www.cplusplus.com/forum/general/7990/
So wie ich das jetzt verstanden habe, wird bei call-by-reference mit Pointern gearbeitet??
Nein.
Eine Referenz ist intern ein konstanter Pointer- daher wird bei CBR nur der Pointer statt dem Pointee kopiert.Mit Pointern hat das aber beim programmieren nichts zu tun.
-
Wie macht ihr es eigentlich, dass ihr so viel Ahnung vom Programmieren in C++ habt??
-
silent_max schrieb:
Wie macht ihr es eigentlich, dass ihr so viel Ahnung vom Programmieren in C++ habt??
* Bücher lesen & verstehen
* Jahrelange Erfahrung
-
daddy_felix schrieb:
silent_max schrieb:
Wie macht ihr es eigentlich, dass ihr so viel Ahnung vom Programmieren in C++ habt??
* Bücher lesen & verstehen
* Jahrelange Erfahrung+ Forum

-
daddy_felix schrieb:
* Bücher lesen & verstehen
* Jahrelange Erfahrungdas mit der erfahrung glaube ich nicht. sone ist doch noch en junger spund, der kA vielleicht grad die oberstufe besucht...
aber ich kann dem zustimmen. und wenn man hier im forum einfach nur lauscht kriegt man viel mit.
und mit programmiersprachen ists wie mit normalen sprachen: mit der zeit nutzt man sie anders, es werden dialekte entwickelt und best practices und so weiter
das kommt alles mit der zeit. ich hätte früher auch fast für jedes bisschen gefragt wie du. aber man kann das fast alles auch mit probieren rauskriegen (oder google)
-
Seid ihr hauptberuflich C++ Programmierer??
Trotzdem hätte ich noch eine Frage.
Ich wollte einen konstanten Text per Referenz ausgeben.
Dazu folgender Code:
#include<iostream> #include<string> using namespace std; string Text(string const Eingabe)//Definition der Funktion Text mit konstanem String { Eingabe == "Dies ist ein konstanter Text!\n"; //Den Text per Eingabe definieren return Eingabe; //Rückgabe von Eingabe } int main() { string Eingabe; //Definition der Stringvariablen Eingabe string &Text_1=Text(Eingabe); //Initialisierung der Referenzvariablen Text_1 mit Text(Eingabe) cout << Text_1 << "\n"; //Ausgabe des konstanten Textes return 0; }In der Ausgabe erscheint aber gar nichts.
Was habe ich falsch gemacht?
-
silent_max schrieb:
Seid ihr hauptberuflich C++ Programmierer??
Ich bin Softwareentwickler und arbeite derzeit hauptsächlich mit C++ und ein wenig mit Erlang
silent_max schrieb:
Was habe ich falsch gemacht?
Du hast den Debugger nicht verwendet. Dann hättest du gesehen, dass die Zuweisung "Eingabe == "Dies ist ein konstanter Text!\n";" offensichtlich nciht das macht, was du erwartest...
Wenn du den Fehler korrigiert hast, wird der Compiler meckern, dass er einem konstanten Objekt ncihts zuweisen kann.
Warum übrgibst du überhaupt den String als Referenz und gibst ihn als Rückgabewert dann wieder zurück?
-
So... Jetzt funktioniert es, habe gerade auch den Debugger benutzt:
#include<iostream> #include<string> using namespace std; string Text(string )//Definition der Funktion Text mit konstanem String { string const Eingabe = "Dies ist ein konstanter Text!\n"; //Den Text per Eingabe definieren return Eingabe; //Rückgabe von Eingabe } int main() { string Eingabe; //Definition der Stringvariablen Eingabe string &Text_1=Text(Eingabe); //Initialisierung der Referenzvariablen Text_1 mit Text(Eingabe) cout << Text_1 << "\n"; //Ausgabe des konstanten Textes return 0; }Kommen eigentlich in der Praxis Referenzen auf Strings häufig vor??
-
So... Jetzt funktioniert es, habe gerade auch den Debugger benutzt:
Aber wohl nicht dein Hirn.
Kommen eigentlich in der Praxis Referenzen auf Strings häufig vor??
Du stellst Fragen...
Es kommt einfach da vor, wo es vorkommt.#include<iostream> #include<string> using namespace std; string Text(string )//Definition der Funktion Text mit konstanem String { string const Eingabe = "Dies ist ein konstanter Text!\n"; //Den Text per Eingabe definieren return Eingabe; //Rückgabe von Eingabe } int main() { string Eingabe; //Definition der Stringvariablen Eingabe string &Text_1=Text(Eingabe); //Initialisierung der Referenzvariablen Text_1 mit Text(Eingabe) cout << Text_1 << "\n"; //Ausgabe des konstanten Textes }???
- Wieso hat Text() einen Parameter, den du gar nicht verwendest?
- Wieso hast du schon wieder eine Referenz auf den Rückgabewert der Funktion Text?
wtf?
-
Sone schrieb:
- Wieso hat Text() einen Parameter, den du gar nicht verwendest?
- Wieso hast du schon wieder eine Referenz auf den Rückgabewert der Funktion Text?
wtf?
Wie würdest es denn Du programmieren? Zeige mir bitte ein Beispiel, wie Du eine Referenz auf ein String Objekt anlegst?
-
@silent_max: Bitte, bitte mach erstmal nicht mit C++ weiter. Mach C! Lerne von unten nach oben. Diese "high level" concepte liegen dir (noch) nicht.
Ich kann absolut nicht nachvollziehen was dir durch den Kopf geht wenn du deinen Code schreibst (was nich schlimm ist), außer dass du wirklich keine Vorstellung davon hast was da passiert wenn ne Funktion aufgerufen wird usw. Lerne diese Sachen, das wird dir helfen. Meinetwegen fang auch mit Assembler an ... halt irgendwas damit du und dein Computer sich besser verstehen

-
silent_max schrieb:
Wie würdest es denn Du programmieren? Zeige mir bitte ein Beispiel, wie Du eine Referenz auf ein String Objekt anlegst?
Sone hat bereits ein Beispiel gepostet, ich ebenfalls.
-
ScottZhang schrieb:
@silent_max: Bitte, bitte mach erstmal nicht mit C++ weiter. Mach C! Lerne von unten nach oben. Diese "high level" concepte liegen dir (noch) nicht.
Sorry, aber ich kann das Fach Datenverarbeitungstechnik, in dem ich bald am 23.01.2013 eine Schulaufgabe schreibe und im Mai/Juni Abschlussprüfung schreibe, nicht einfach abwählen...
Zwar würde ich gern das Fach abwählen und einen Cut machen, damit ich mit Assembler anfangen kann da mich die µC - Technik mehr interessiert, aber ich kann wie geschrieben das Fach Datenverarbeitungstechnik, in dem C++ einen großen Bestandteil hat, nicht einfach abwählen.
-
Na dann lern das weiter, aber guck dir trotzdem die low level Funktionalität eines Computers an.