[C++] problema su costruttore e pattern composite

di zio_mangrovia il
8 risposte

Sto guardando una soluzione di un esercizio sviluppata in C++ sull'utilizzo del pattern Composite secondo lo schema sotto riportato:

Questo è un codice di esempio ma a mio avviso c'e' un punto sbagliato,

#include <iostream>
#include "widget.h" 

using namespace std;

class MyButton :  public Button {
   TextField* tf;
public:
   MyButton(TextField* t) : tf(t) {}; // costruttore
   void action(void *data);
};

void MyButton::action((void *data) {
   cout << tf->getTex() << endl;
}

int main() {
   Window* w = new Window;
   TextField* t = new TextField;
   Mybutton* b = new Mybutton;
   
   w->setTitle("Finestra");
   w->add(t);
   w->add(b);
};

non dovrebbe essere indicato il puntatore 't' quando viene istanziato Mybutton ? cioè così:

Mybutton* b = new Mybutton(t);

8 Risposte

  • Ma la classe è 

    MyButton

    o

    Mybutton

    ?

    E qui 

    ((void *data)

    quante parentesi ci sono?

    Sicuro di avere fatto copia-incolla del codice corretto?

    Sicuro che non ci sia un costruttore di default come

    MyButton() { };

    ?

  • 22/03/2025 - oregon ha scritto:

    Ma la classe è 

    MyButton

    o

    Mybutton

    ?

    Non potevo fare copia e incolla, ho scritto da zero il codice. La classe è MyButton, dove riportato Mybutton è un errore di digitazione.

    22/03/2025 - oregon ha scritto:

    ((void *data)

    c'e' solo una parentesi cioè:

    (void *data)

    22/03/2025 - oregon ha scritto:

    Sicuro che non ci sia un costruttore di default come

    MyButton() { };

    sicuro al 100% ho ricontrollato.

    E' giusta la mia osservazione ?

  • O hai dimenticato a copiare qualcosa, o non è possibile compilare quel codice.

    Hai provato a compilare?

    Perché non puoi fare copia-incolla?

  • 22/03/2025 - oregon ha scritto:

    O hai dimenticato a copiare qualcosa, o non è possibile compilare quel codice.

    Sono certo al 100% che ho copiato tutto bene

    Hai provato a compilare?

    Si, ma purtroppo non ho la libreria widget e mi fallisce la compilazione. Non riesco a trovarla.

    Secondo me sono esempi didattici e  di fatto non esistono librerie con quel nome ma sono puramente simboliche.

    Perché non puoi fare copia-incolla?

    E' un pdf dove non permette la selezione del testo

  • Perché hai postato nella sezione Assembly?

  • 22/03/2025 - oregon ha scritto:

    Perché hai postato nella sezione Assembly?

    ho sbagliato ma quando mi sono accorto non potevo spostare il messaggio e non sapevo come fare

  • 22/03/2025 - oregon ha scritto:

    Sicuro che non ci sia un costruttore di default come

    La mia osservazione iniziale su come è istanziata la classe MyButton è corretta? Nella riga seguente manca il parametro passato alla classe cioè il puntatore ?

    Mybutton* b = new Mybutton;
  • Se  non esiste un costruttore di default ovviamente è una osservazione corretta. Ma vorrei vedere il pdf da cui nasce tutta la discussione.

    P.S. per problemi segnala al moderatore che provvede a spostare la discussione, lobfaccuo io

Devi accedere o registrarti per scrivere nel forum
8 risposte