Ampersand (& amp; am Ende der Variablen usw.)
Bin ich ein C++ noob und ich habe ein problem, das Verständnis der c++ - syntax im code. Jetzt bin ich ziemlich verwirrt.
class date
{
private:
int day, month, year;
int correct_date( void );
public:
void set_date( int d, int m, int y );
void actual( void );
void print( void );
void inc( void );
friend int date_ok( const date& );
};
Bezug auf das '&' - Zeichen, ich verstehe seine Allgemeine Verwendung als Referenz-Adresse und logischen operator...
z.B. int *Y = &X
Was ist die Bedeutung des ein & - operator am Ende der parameter?
friend int date_ok( const date& );
Dank
edit:
Danke für die Antworten.
Wenn ich das richtig verstanden habe, wird die variable name wurde einfach weggelassen, weil es nur ein Prototyp ist. Für den Prototyp brauche ich nicht den Namen der Variablen, es ist optional. Ist das richtig?
Jedoch für die definition der Funktion brauche ich bestimmt den Namen der variable, richtig?
InformationsquelleAutor der Frage snipor | 2014-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
const date&
Akzeptanz der Methodedate_ok
bedeutet, dassdate_ok
nimmt eine Referenz vom Typconst date
. Es funktioniert ähnlich wie ein Zeiger, außer dass die syntax ist etwas mehr .. zuckerhaltigein deinem Beispiel
int* Y = &x
machtY
ein Zeiger vom Typint
. und dann ordnet Sie die Adresse vonx
. Und wenn ich möchte, um den Wert zu ändern von "was auch immer es ist unter der Adresse zeigteY
", sage ich*Y = 200;
so,
Statt jetzt benutze ich eine Referenz
InformationsquelleAutor der Antwort Aniket Inge
In diesem Zusammenhang
&
ist kein Betreiber. Es ist Teil der Art.Für einen bestimmten Typ
T
der TypT&
ist ein "Verweis aufT
".Symbol
&
in der Tat hat drei Bedeutungen in C++und es ist wichtig zu erkennen, dass diese verschiedene Bedeutungen.Ebenso
*
hat mindestens drei Bedeutungen, und wenn Sie einmal verstanden haben, dann werden Zeiger und Referenzen unten. 🙂Ja.
Nicht. Zwar werden Sie in der Regel wollen (sonst was ist der Punkt?!) es gibt einige Situationen, in denen Sie sich nicht, wenn Sie in der Regel haben nur eingeführt, die parameter zu engagieren, überlast-bedingten Schwindels.
Spreche aber rein technisch können Sie weglassen der Parameternamen aus der Erklärung und/oder definition, wie Sie wollen.
InformationsquelleAutor der Antwort Lightness Races in Orbit
So, für den Anfang, ich glaube, Sie könnten mehr verwirrt, daß der Autor des Codes weggelassen, was ganz wichtig ist (obwohl optional): name der Variablen.
Let ' s umschreiben:
Den Typ der variable 'check' ist
const date&
. Wir übergeben Sie der Funktion als "Konstante Referenz". In anderen Worten, es ist ein alias auf das, was wir übergeben (via Zeiger Magie), aber wir können es ändern.Dem Grund, dass wir dies tun ist, so dass wir passieren können große Objekte (wie ein
std::vector
) in Funktionen, ohne dass eine Kopie davon. Pass-by-value wird ein Kopiervorgang. Für ein int, das spielt keine Rolle (es dauert weiter, keine Zeit), für eine Klasse, es könnte sein, mehr signifikante. Die Faustregel ist, immer Objekte durch Verweis übergeben, und Sie zu übergeben, die von const-Referenz, wenn Sie nicht Vorhaben, Sie zu ändern. (Diese Faustregel ignoriert move-Semantik, aber ich gehe davon aus Sie weiß nicht, über das noch).InformationsquelleAutor der Antwort Mark
& am Ende von einem Typ in einer Funktion Prototyp erlaubt die übergabe von Referenzen anstelle von " passing by value (Kopie).
Auf diese Weise können Sie ändern Sie die date-Objekt in die friend-Funktion.
Freund:
In Ihrer Klasse definition bedeutet dies, dass Sie sagen, dass eine Funktion
date_ok
Zugriff auf alle Parameter Ihrer Klasse. In der Tat bedeutet es, dass es fast an ein Mitglied der Klasse, so sollten Sie erwägen, diese friend-Funktion eher als eine member-Funktion. (es sei denn, Sie haben andere gute Gründen, wie nicht verschmutzen Ihre Klasse mit ausländischen Definitionen)Wenn ja, auch in Betracht ziehen, die eine statische Funktion, es hätten alle den gleichen Zugang zu den Eingeweiden Ihrer Datum object-Klasse. Aber das wäre mehr natürlich.
vgl. das Buch "101 C++ coding standard". Lieber die Definition statischer member-Funktionen, die es bevorzugt zu einer losen Kopplung.
InformationsquelleAutor der Antwort Stephane Rolland
Danke für die answesers.
Wenn ich das richtig verstanden habe, den Namen der variable einfach weggelassen wurde, denn Sie ist nur der Prototyp. Und für den Prototyp brauche ich nicht den Namen der Variablen, es ist optional. Ist das richtig?
Jedoch für die definition der Funktion, die ich brauche definitiv der name der variable, richtig?
InformationsquelleAutor der Antwort snipor