Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C++] Teoria

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [C++] Teoria

    Sto ripassando/studiando C++ ed ho notato che, nonostante tutto, sono riuscito per molto tempo a sviluppare software senza creare classi mie ma sfruttando sempre quelle presenti nell'ambiente di sviluppo che uso ed in quanto, arrivando dal C, ho sempre creato programmi misti C/C++.
    Ora è giunto il momento di usare C++ e mi sono arenato sul significato ad esempio della dichiarazione delle classe qui sotto.
    Da quello che ho capito:

    class TMyThread : public TThread
    questa dichiarazione serve per derivare la classe TThread cioè, TMyThread eredita i metodi e le proprietà di TThread

    System::String FMsg;
    Rispetto agli esempi che trovo in rete anche su HTML.IT in merito alla dichiarazione di classi, dovrebbe esistere, nel mio ambiente di sviluppo, almeno così ho capito, un oggetto/classe System che fa qualcosa ma per le mie conoscenze, Scrivere System::String mi confonde in quanto, String per me è un tipo di dato e notoriamente, quella scrittura coi :: non dovrebbe dichiarare un metodo?
    Oppure quella scrittura aggiunge semplicemente una proprietà String alla classe System definita nell'ambiente di sviluppo?

    Per ora mi fermo qua ed attendo che mi rispondiate, prima di scrivere altre castronate.


    codice:
    class TMyThread : public TThread
    {
    private:
        System::String FMsg;
        TServerSocket *FServer;
        void __fastcall SendMyMessage();
    protected:
        void __fastcall Execute();
    public:
            __fastcall TMyThread(TServerSocket *AServer, const System::String &AMsg);
    };

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Il :: può essere usato anche per indicare un namespace oltre che per le classi.
    Nel tuo caso (C++ Builder se non erro) esiste un namespace System con al suo interno una classe String.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie shodan,
    dopo che hai detto namespace ho iniziato lo studio ed altro dubbio è il seguente: un conto è definirne uno proprio e risulta chiaro, ma un altro è usarne uno implementato dove la sua implementazione non è visibile almeno, io ho solo l'help in linea a disposizione.
    A quanto ho capito, di l'oggetto String molto probabilmente è usato in diversi namespace ed a scopi differenti, altrimenti non si giustifica l'uso di appartenenza a System.
    Ultima modifica di misterx; 26-07-2018 a 07:13

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    A quanto ho capito, di l'oggetto String molto probabilmente è usato in diversi namespace ed a scopi differenti, altrimenti non si giustifica l'uso di appartenenza a System.
    Il namespace di per se evita ambiguità. Nessuno ti vieta di creare una tua implementazione di String e usare un namespace diverso, una persona terza magari fornisce la sua implementazione e la mette in un namespace diverso. Per farla breve puoi pensare al namespace come una "specie" di cognome che evita omonimie (e se non basta se ne aggiunge un altro e così via).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie shodan, molto chiaro.

    Secondo voi, perchè la seguente dichiarazione

    codice:
    class TMyThread : public TThread
    {
    protected:
        void __fastcall Execute();
    public:
        __fastcall TMyThread();
        void __fastcall TMyThread::MySincrSock1();
        void __fastcall TMyThread::MySincrSock2();
    };
    produce le seguenti segnalazioni:

    '_fastcall TMyThread::MySincrSock1()' is not a member of 'TMyThread'
    '_fastcall TMyThread::MySincrSock2()' is not a member of 'TMyThread'

    a me sembra tutto regolare

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Togli il TMyThread:: davanti alle funzioni della classe.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie 1000

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    in questo pseudo codice in formato Borland Builder non mi spiego alcune cose.
    Dichiaro due thread e li istanzio. Poi uso il metodo Syncronize() per evitare collisioni con la UI per inviare messaggi su socket. Effettivamente funziona, ma quale dei due thread invia i messaggi?
    Questo non mi è chiaro.
    Visto così, ho creato due thread gemelli che fanno la medesima cosa: sbaglio?

    codice:
    class TMyThread : public TThread
    {
    protected:
       void __fastcall Execute();
    public:
       __fastcall TMyThread();
       void __fastcall MySincrSock1();
       void __fastcall MySincrSock2();
    };
    
    TMyThread *Thread1 = NULL;
    TMyThread *Thread2 = NULL;
    
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       Thread1 = new TMyThread();
       Thread2 = new TMyThread();
    }
    
    
    void __fastcall TMyThread::Execute()
    {
       while (!Terminated)
       {
          Synchronize(&MySincrSock1);
          Sleep(200);
          Synchronize(&MySincrSock2);
          Sleep(200);
       }
    }
    
    void __fastcall TMyThread::MySincrSock1()
    {
            if(Form1->ServerSocket1->Socket->ActiveConnections>0)
                    Form1->ServerSocket1->Socket->Connections[0]->SendText("aabbccdd");
    }
    
    
    void __fastcall TMyThread::MySincrSock2()
    {
            if(Form1->ServerSocket2->Socket->ActiveConnections>0)
                    Form1->ServerSocket2->Socket->Connections[0]->SendText("eeffgghh");
    }
    //---------------------------------------------------------------------------
    Ultima modifica di misterx; 01-08-2018 a 18:31

  9. #9
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Teoricamente nessuno dei due. Anzi dovrebbe darti errore dato che MySyncrSock1 e 2 sono dichiarate ma non definite (hai riportato male il codice?).
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    si, errore mio: ho sistemato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.