Es ist nicht klar, wofür das "*"-Zeichen verwendet wird.
In der Hilfe heißt es: "Es ist möglich, Objekte eines komplexen Typs dynamisch zu erzeugen. Dies geschieht mit Hilfe des new-Operators" Der new-Operator wird hier nicht verwendet. Bitte erklären Sie genauer, wie und in welchen Fällen das "*"-Zeichen verwendet werden kann.
Es gibt keinen Unterschied, es geht nur um den Stil des Designs und einen kleinen ideologischen Ansatz.
D.h..
CListItem *next(){return(next);}
dies ist eine Deklaration eines Zeigers auf das Objekt (oder die Methode?) next()? Und dann, in geschweiften Klammern, wird das Objekt next selbst zurückgegeben? Verstehe ich das richtig?
Ich verstehe, dass alles sehr einfach sein sollte, aber da ich noch nie mit OOP in Berührung gekommen bin, tappe ich im Dunkeln. Bitte helfen Sie mir zu verstehen.
kogriv: Und dann, in geschweiften Klammern, wird das nächste Objekt selbst zurückgegeben, verstehe ich das richtig?
Der Körper der Funktion wird in geschweifte Klammern gesetzt,
{return(next);}
bedeutet das, dass die Funktion die Variable next zurückgibt, die den Typ eines Zeigers auf ein Objekt der Klasse CListItem hat. Dies stimmt im Allgemeinen mit dem Typ der Funktion überein.
Gleich nach dem ersten Beispiel enthält der Artikel den Satz "Die Variable pstatus ist ein Zeiger auf ein Objekt, aber wir haben absichtlich "vergessen", das Objekt selbst mit dem new-Operator zu erstellen und es als Parameter an die Funktion PrintStatus() zu übergeben ".
1. Es ist unklar, was Sie "genau" übergeben haben - einen Zeiger oder ein Objekt?
2. In dem Beispiel gibt es keine PrintStatus()-Funktion.
//+------------------------------------------------------------------+//| Hinzufügen eines Eintrags zur Liste|//+------------------------------------------------------------------+
CList::addItem(CListItem *item)
{
//--- zuerst die Korrektheit des übergebenen Zeigers prüfenif(CheckPointer(item)==POINTER_INVALID) return;
//--- Erhöhung der Anzahl der Einträge in der Liste
m_counter++;
//--- wenn noch keine Einträge in der Liste vorhanden sindif(CheckPointer(first)!=POINTER_DYNAMIC)
{
first=item;
}
else
{
//--- Element auf den Zeiger des vorherigen Objekts setzen----------------------- Beginn des Fehlers-----------------------
item.prev(first);
//--- Merken des Zeigers des aktuellen ersten Elements
CListItem *p=first;
//--- das eingehende Element an die Stelle des ersten Elements setzen
first=item;
//--- den Zeiger des nächsten Objekts für das erste Element der Liste setzen
first.next(p);
}
}
Es scheint, dass das neue Listenelement prev und first hat, die auf das zweite Element verweisen, und das zweite Element erhält keinen Verweis auf das erste Element.
Gleich nach dem ersten Beispiel enthält der Artikel den Satz "Die Variable pstatus ist ein Objektzeiger, aber wir haben absichtlich "vergessen", das Objekt selbst mit dem new-Operator zu erstellen und es als Parameter an die Funktion PrintStatus() übergeben ".
1. Es ist unklar, was genau übergeben wurde - ein Zeiger oder ein Objekt?
2. Es gibt keine PrintStatus()-Funktion in dem Beispiel.
Besser spät als nie. Danke, im Artikel korrigiert. Das Ende des Satzes wurde entfernt
Direkt nach dem ersten Beispiel enthält der Artikel den Satz "Die Variable pstatus ist ein Zeiger auf ein Objekt, aber wir haben absichtlich "vergessen", das Objekt selbst mit dem new-Operator zu erzeugen und es als Parameter an die Funktion PrintStatus() zu übergeben ".
Es scheint, dass das neue Listenelement prev und first hat, die auf das zweite Element verweisen, und das zweite Element erhält keinen Verweis auf das erste Element.
Ja, das ist ein Tippfehler. Anstelle von
else
{
//--- Posten einstellen указатель предыдущего объекта item.prev(first);
sollte
else
{
//--- für die erste eingestellt указатель предыдущего объектаfirst.prev(item);
Ich verstehe immer noch nicht, über Zeiger und Referenzen in MQL5 und jetzt in MQL4. Was ist der Unterschied zwischen der Übergabe von Referenzen und Zeigern, außer dem zusätzlichen Code? In C++ gibt es einen Unterschied, aber was ist er hier? Wenn es nicht schwierig ist, schreiben Sie bitte ausführlichere Informationen.
Guten Tag! Ich bin ein Anfänger. Ich habe eine Frage bezüglich der Verwendung des "*"-Symbols (Sternchen).
In der Beispieldatei:
"*" wird verwendet, um einen Zeiger auf ein Objekt zu deklarieren - das ist irgendwie klar.
Weiter:
Es ist nicht klar, wofür das "*"-Zeichen verwendet wird.
In der Hilfe heißt es: "Es ist möglich, Objekte eines komplexen Typs dynamisch zu erzeugen. Dies geschieht mit Hilfe des new-Operators" Der new-Operator wird hier nicht verwendet. Bitte erklären Sie genauer, wie und in welchen Fällen das "*"-Zeichen verwendet werden kann.
Aber weiter:
Es ist nicht klar, was das dort angebrachte "*"-Zeichen bedeutet.
Man kann es so schreiben
Es wird keinen Unterschied geben, es geht nur um den Stil der Gestaltung und einen kleinen ideologischen Ansatz.
Sie können es so schreiben
Es gibt keinen Unterschied, es geht nur um den Stil des Designs und einen kleinen ideologischen Ansatz.
D.h..
CListItem *next(){return(next);}dies ist eine Deklaration eines Zeigers auf das Objekt (oder die Methode?) next()? Und dann, in geschweiften Klammern, wird das Objekt next selbst zurückgegeben? Verstehe ich das richtig?
Ich verstehe, dass alles sehr einfach sein sollte, aber da ich noch nie mit OOP in Berührung gekommen bin, tappe ich im Dunkeln. Bitte helfen Sie mir zu verstehen.
D.h..
ist eine Deklaration eines Zeigers auf das Objekt (oder die Methode?) next()?
Und dann, in geschweiften Klammern, wird das nächste Objekt selbst zurückgegeben, verstehe ich das richtig?
Der Körper der Funktion wird in geschweifte Klammern gesetzt,
{return(next);}bedeutet das, dass die Funktion die Variable next zurückgibt, die den Typ eines Zeigers auf ein Objekt der Klasse CListItem hat. Dies stimmt im Allgemeinen mit dem Typ der Funktion überein.
Gleich nach dem ersten Beispiel enthält der Artikel den Satz "Die Variable pstatus ist ein Zeiger auf ein Objekt, aber wir haben absichtlich "vergessen", das Objekt selbst mit dem new-Operator zu erstellen und es als Parameter an die Funktion PrintStatus() zu übergeben ".
1. Es ist unklar, was Sie "genau" übergeben haben - einen Zeiger oder ein Objekt?
2. In dem Beispiel gibt es keine PrintStatus()-Funktion.
Ich glaube, es liegt ein Fehler vor:
Es scheint, dass das neue Listenelement prev und first hat, die auf das zweite Element verweisen, und das zweite Element erhält keinen Verweis auf das erste Element.Gleich nach dem ersten Beispiel enthält der Artikel den Satz "Die Variable pstatus ist ein Objektzeiger, aber wir haben absichtlich "vergessen", das Objekt selbst mit dem new-Operator zu erstellen und es als Parameter an die Funktion PrintStatus() übergeben ".
1. Es ist unklar, was genau übergeben wurde - ein Zeiger oder ein Objekt?
2. Es gibt keine PrintStatus()-Funktion in dem Beispiel.
Besser spät als nie. Danke, im Artikel korrigiert. Das Ende des Satzes wurde entfernt
Direkt nach dem ersten Beispiel enthält der Artikel den Satz "Die Variable pstatus ist ein Zeiger auf ein Objekt, aber wir haben absichtlich "vergessen", das Objekt selbst mit dem new-Operator zu erzeugen und es als Parameter an die Funktion PrintStatus() zu übergeben ".
Ich glaube, es liegt ein Fehler vor:
Es scheint, dass das neue Listenelement prev und first hat, die auf das zweite Element verweisen, und das zweite Element erhält keinen Verweis auf das erste Element.Ja, das ist ein Tippfehler. Anstelle von
sollte
korrigiert werden.Ich verstehe immer noch nicht, über Zeiger und Referenzen in MQL5 und jetzt in MQL4. Was ist der Unterschied zwischen der Übergabe von Referenzen und Zeigern, außer dem zusätzlichen Code? In C++ gibt es einen Unterschied, aber was ist er hier? Wenn es nicht schwierig ist, schreiben Sie bitte ausführlichere Informationen.