Was bedeuten die beiden Operatoren & und :: ?
-
Ich habe mir ein Buch: "C++ programmieren" im Klartext geholt und lese es parallel zu "MagnumC++". Mein Problem ist nur, das dort abschnitte sind die ich nicht nachvollziehen kann. Beispielsweise sachen wie:
Rabattkunde(std::string const& Name, ....)Der :: Operator steht hir dafür das Standart hier der namespace ist richtig? Aber was macht das & ?
Und bei
istream& Rabattkunde::lese(istream& in) { Kunde::lese(in); if(in){ in >> Rabatt: } }verstehe ich auch nicht was hier der :: zusuchen hat sowie der >>
-
Hallo
Der :: Operator steht hir dafür das stan**** hier der namespace ist richtig?
Ja
Aber was macht das &
Besagt das der Rückgabewert eine Referenz sein soll
verstehe ich auch nicht was hier der :: zusuchen hat sowie der >>
:: ist hier der Auruf der Funktion lese aber aus der Basisklasse Kunde, von der die Klasse Rabattkunde abgeleitet ist
> liest den nächsten Wert aus dem stream in die variable Rabatt.
Such dir lieber hier noch ein Tutorial, um solche Grundlagen zu verstehen.
bis bald
akari
-
t1m0n schrieb:
und lese es parallel zu
Vielleicht solltest du zu Anfang erst mal nur ein Buch lesen, um die
Grundlagen zu verstehen. Es kann nämlich vorkommen, das die Bücher an
verschiedenen Stellen voneinander verschiedene Wissenstände erwarten.:: dient generell dazu die Methoden/Instanzvariablen den Klassen zuzuordnen
> wird bei Inputstreams benutzt um etwas aus dem Stream in eine Variable zu schieben
-
akari schrieb:
Such dir lieber hier noch ein Tutorial
Noch eins?

-
akari schrieb:
Aber was macht das &
Besagt das der Rückgabewert eine Referenz sein soll
Falsch, & besagt, dass der Parameter Name eine Referenz ist.
verstehe ich auch nicht was hier der :: zusuchen hat sowie der >>
:: ist hier der Auruf der Funktion lese aber aus der Basisklasse Kunde, von der die Klasse Rabattkunde abgeleitet ist
:: ist kein Funktionsaufruf. Kunde::lese sagt, dass die Funktion lese, die in Kunde deklariert ist, aufgerufen wird. :: sagt somit, in welchem Scope nach der Funktion lese gesucht werden soll.
Sorry, wenns en bisschen kleinlich aussieht, aber wie soll t1m0n was lernen, wenn du dich so schlecht ausdrückst?
-
Hallo
Dann eben anstatt noch exakter stattdessen...
zum Beispiel das hier./Edit :
Falsch, & besagt, dass der Parameter Name eine Referenz ist.
In dem zweiten Code war das & auch als Referenz für eine Rückgabe.
bis bald
akari
-
Javaner schrieb:
> wird bei Inputstreams benutzt um etwas aus dem Stream in eine Variable zu schieben
aber nicht verwechseln mit dem echten shift operator....
-
:: Ist der Bereichsauflösungsoperator damit kannst dir einen Bereich "zugänglich" machen.
Das & sagt im ersten Beispiel das der Parameter nicht kopiert werden soll sondern als referenz übernommen werden soll also kann man den parameter ändern.
Beim 2. Beispiel steht das & vor dem funktionsnamen und das sorgt dafür das die funktion auch auf der linken seite eines Ausdrucks stehen darf, sprich als L-Value.
Aber du solltest deine Bücher lieber einzelnt lesen!
-
akari schrieb:
In dem zweiten Code war das & auch als Referenz für eine Rückgabe.
Sorry, hab ich übersehen.
tobZel schrieb:
Beim 2. Beispiel steht das & vor dem funktionsnamen und das sorgt dafür das die funktion auch auf der linken seite eines Ausdrucks stehen darf, sprich als L-Value.
Nur wenn die Referenz auf eine Variable zeigt, die außerhalb der Funktion deklariert wurde.
int &foo() { int bar; // mach irgendwas mit bar return bar; }
undefiniertes Verhalten
-
Michael E. schrieb:
Nur wenn die Referenz auf eine Variable zeigt, die außerhalb der Funktion deklariert wurde.
...oder wenn die lokale Variable statisch ist. Dann geht's auch.
int& foo() { static int i; return i; } foo() = 7;MfG
GPC
-
Ja aber wer gibt schon ne referenz auf ne lokale Variable zurück??
-
Och, das ist ganz schnell passiert, wenn man noch nie drüber nachgedacht hat. Manche Compiler akzeptieren das sogar.
-
Frage, wie sieht eigentlich damit aus:
class A { private: int sth; public: ... int& getSth(){ return sth; } }; class B { private: class A a; public: ... int& getSthModifiedFromA(){ int& i = a.getSth(); i += 1; return i; } };Gibt es sowas in der Art auch, dass ich Referenzen nutze und dann weiterreichen kann? Oder muss ich dass über einen Pointer lösen?
-
Ja, das funktioniert auch. Allerdings würde deine Methode auch das Element von A verändern.
(und nebenbei machst du mit GetSth() die Sicherheit zunichte, die du mit der private-Deklaration erreichen wolltest)
-
Danke ... kann ich die Referenz nicht const machen? Damit darf man doch nicht daran ändern oder?
-
Nachtrag: Natürlich nur unter der Bedingung, dass ich selbst an der Referenz nichts ändern möchte, sondern nur Werte etc. erhalten möchte, um den Zustand der zugreifenden Objektes anzupassen.
-
Klar kann GetSth() eine konstante Referenz zurückgeben (wenn du statt int's größere Objekte verwaltest, ist das sogar günstiger als eine Wert-Übergabe). Allerdings kann B::getSthModifiedFromA() in der obigen Form nichts mit einem const int& anfangen.