Una domanda per gli esperti di OOP. - pagina 36

 
Artyom Trishkin:

Nell'esempio

La classe Y contiene variabili con tipi di classi F e Z.

Ma se avete già oggetti delle classi F e Z creati e usati da qualche parte, non potrete accedervi nell'oggetto Y. Ci saranno due nuovi oggetti di classe F e Z nell'oggetto Y.

Per avere accesso agli oggetti delle classi F e Z già creati e in uso, è necessario ottenere riferimenti agli oggetti F e Z nella classe Y - poi la classe Y può operare con quei dati già memorizzati in F e Z, invece di usare i nuovi e incontaminati F e Z.

Ma se si crea immediatamente un tale collegamento di oggetti, allora F e Z in esso daranno accesso alle classi F e Z, e il loro riempimento dovrebbe essere fatto solo attraverso la classe Y - di nuovo, dare accesso agli oggetti F e Z da esso, ottenere un puntatore all'oggetto richiesto e lavorare con esso dal puntatore.

È complicato, però. Penserò...
 
Artyom Trishkin:

Oppure, nella classe in cui volete i dati dell'altra classe, potete fare un metodo per ottenere un puntatore alla classe desiderata.

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:

Beh, sì. Questo è quando sappiamo dove si trova l'oggetto nelle variabili CB a e CB b. Se vengono creati con new, allora i puntatori devono essere salvati e recuperati dalla posizione salvata.

 
Artyom Trishkin:

Beh, sì. È quando sappiamo dove si trova l'oggetto - nelle variabili CB a e CB b. Ma se vengono creati tramite new, i puntatori devono essere salvati e recuperati dalla posizione salvata.

Una volta creato l'oggetto, il puntatore è noto, passatelo ad un altro oggetto.

 
Dmitry Fedoseev:

Non appena l'oggetto viene creato, si conosce un puntatore per passarlo ad un altro oggetto.

Ma se volete ottenere un puntatore ad esso non al momento della creazione (l'utente ha cliccato il pulsante - nuovo oggetto creato), ma nel processo di ulteriore lavoro con il programma.

Mi sembra che sia più utile avere una lista di tutti i puntatori a tutti gli oggetti. In questo caso non dovete spingere i puntatori agli oggetti appena creati a tutti gli altri oggetti di altre classi. Inoltre, quando create nuove classi di nuovi oggetti, non avrete bisogno di riscrivere anche il passaggio del puntatore dell'oggetto a questa nuova classe. E quando avete bisogno di ottenere puntatori a oggetti creati in precedenza in una nuova classe, basta scrivere il metodo per ottenere l'oggetto giusto tramite il suo identificatore.

Tuttavia, ognuno è pazzo a modo suo. Sono così :)

 
Hmm, e in Sharp e MQL, i puntatori sono descrittori. E il codice .NET è ufficialmente aperto da molto tempo. Qualcuno qui ha già provato a portare i delegati in MQL?
 
Alexey Volchanskiy:
Hmm, e in Sharp e MQL, i puntatori sono descrittori. E il codice .NET è ufficialmente aperto da molto tempo. Qualcuno qui ha già provato a portare i delegati in MQL?
15.10 ricordamelo, ci penserò, probabilmente funzionerà.
 
Vladimir Simakov:
15.10 Ricordami, ci penserò, probabilmente funzionerà.

cos'è il 15.10?

 
Alexey Volchanskiy:

cos'è il 15.10?

Il 15 ottobre forse?

 
Artyom Trishkin:

Il 15 ottobre forse?

È vero, ma nel frattempo è una vacanza.