Eine Frage an die OOP-Experten. - Seite 36

 
Artyom Trishkin:

In diesem Beispiel

Die Klasse Y enthält Variablen mit Typen der Klassen F und Z.

Wenn Sie jedoch bereits Objekte der Klassen F und Z erstellt und irgendwo verwendet haben, können Sie in Objekt Y nicht auf sie zugreifen. Es werden zwei neue Objekte der Klassen F und Z im Objekt Y entstehen.

Um Zugriff auf die bereits erstellten und verwendeten Objekte der Klassen F und Z zu erhalten, müssen Sie Referenzen auf die Objekte F und Z in der Klasse Y erhalten - dann kann die Klasse Y mit den bereits in F und Z gespeicherten Daten arbeiten, anstatt die neuen und ursprünglichen F und Z zu verwenden.

Aber wenn Sie sofort eine solche Objektverbindung erstellen, dann werden F und Z in ihr Zugang zu den Klassen F und Z geben, und ihre Füllung sollte nur durch die Klasse Y erfolgen - wiederum geben Sie Zugang zu den Objekten F und Z von ihr, erhalten einen Zeiger auf das gewünschte Objekt und arbeiten mit ihm durch den Zeiger.

Aber es ist kompliziert. Ich werde nachdenken...
 
Artyom Trishkin:

Oder Sie können in der Klasse, in der Sie die Daten der anderen Klasse benötigen, eine Methode erstellen, um einen Zeiger auf die gewünschte Klasse zu erhalten.

class CA{
   protected:
   public:
   void f(){
      Print("A");
   }
};

class CB{
   protected:
   CA * a;
   public:
   void f(CA * arg){
      a=arg;
   }
   void f(){
      Print("B");
   }   
   void f2(){
      a.f();
   }    
};

CA a;
CB b;

void OnStart(){
   b.f(GetPointer(a));
   
   b.f();
   b.f2();
   
}
 
Dmitry Fedoseev:

Nun, ja. Das ist der Fall, wenn wir wissen, wo sich das Objekt in den Variablen CB a und CB b befindet. Wenn sie mit new erstellt werden, müssen die Zeiger gespeichert und von dem gespeicherten Ort abgerufen werden.

 
Artyom Trishkin:

Ja, wenn wir wissen, wo sich das Objekt befindet - in den Variablen CB a und CB b. Wenn sie jedoch über new erstellt werden, müssen die Zeiger gespeichert und von dem gespeicherten Ort abgerufen werden.

Sobald das Objekt erstellt ist, ist der Zeiger bekannt und kann an ein anderes Objekt übergeben werden.

 
Dmitry Fedoseev:

Sobald das Objekt erstellt ist, wird ein Zeiger bekannt sein, um es an ein anderes Objekt zu übergeben.

Aber wenn Sie wollen, um einen Zeiger auf sie nicht im Moment der Erstellung (Benutzer klickte auf die Schaltfläche - neues Objekt erstellt), sondern in den Prozess der weiteren Arbeit mit dem Programm.

Es scheint mir sinnvoller zu sein, eine Liste aller Zeiger auf alle Objekte zu haben. In diesem Fall müssen Sie die Zeiger auf neu erstellte Objekte nicht an alle anderen Objekte aus anderen Klassen weitergeben. Wenn Sie neue Klassen mit neuen Objekten erstellen, müssen Sie auch die Übergabe des Objektzeigers an diese neue Klasse nicht mehr umschreiben. Und wenn Sie in einer neuen Klasse Zeiger auf zuvor erstellte Objekte benötigen, schreiben Sie einfach die Methode auf, mit der Sie das richtige Objekt über seinen Bezeichner erhalten.

Aber jeder ist auf seine eigene Weise verrückt. Ich bin so :)

 
Hmm, und in Sharp und MQL sind Zeiger Deskriptoren. Und der .NET-Code ist schon seit langem offiziell offen. Hat hier schon jemand versucht, Delegierte nach MQL zu portieren?
 
Alexey Volchanskiy:
Hmm, und in Sharp und MQL sind Zeiger Deskriptoren. Und der .NET-Code ist schon seit langem offiziell offen. Hat hier schon jemand versucht, Delegierte nach MQL zu portieren?
15.10 Uhr Erinnern Sie mich daran, ich werde darüber nachdenken, es wird wahrscheinlich funktionieren.
 
Vladimir Simakov:
15.10 Erinnere mich daran, ich werde darüber nachdenken, es wird schon klappen.

Was ist der 15.10?

 
Alexey Volchanskiy:

Was ist der 15.10?

Vielleicht am 15. Oktober?

 
Artyom Trishkin:

Vielleicht am 15. Oktober?

Das ist richtig, aber in der Zwischenzeit ist Feiertag.