PDA

Visualizza la versione completa : [C/C++]: La difficolta' della programmazione ad oggetti


Trader
17-09-2006, 16:09
Ciao a tutti,
da anni programmo in C, poi un bel giorno ho deciso di fare il salto ed aggiornarmi, passando cosi' al C++ prima ed in fine al Visual C++
Devo dire che ho notevoli difficolta' a programmare in Visual C++, a parte la omplessita' del linguaggio, ma la cosa che ogni volta mi ostacola e' l' approccio "ad oggetti".

Giusto per varvi un esempio, mi sono creato una classe per la gestione di una porta seriale, ma potrebbe essere una qualsiasi classe.

Vorrei utilizzarla in un semplicissimo progetto chiamato con molta fantasia "Prova" sviluppato come Dialog based ( niente SDI o MDI per semplificare al massimo l' esempio).

Ebbene MFC di default crea le seguenti classi: CAboutDlg, CProvaDlg e CProvaApp.
A tale lista si aggiunge la mia classe CSerial.
Fino qui tutto bene, ma ora non so piu' che strada percorrere,

Vorrei creare un ogetto ti tipo CSerial, ed utilizzarlo all' interno di varie funzioni di classe CProvaDlg
es: CProvaDlg::OnButtonSerialRead e CProvaDlg::OnButtonSerialWrite

Dove posso creare il mio oggetto ?
In qualsiasi funzione io lo inizializzi, al terminte di quest'ultima l' oggetto verrebbe distrutto.
E' una sciocchezza per voi espertoni, ma per un principiante autodidatta come me i testi consultati non mi hanno aiutato....

HELP !!!
Ciao
Sergio

MItaly
17-09-2006, 20:51
Creala come membro privato di una classe che incapsula un dialog, CProvaDlg, o come membro pubblico della classe-applicazione, CProvaApp, di cui vi sempre un'istanza (l'oggetto "TheApp").

Trader
17-09-2006, 22:51
ciao, grazie per il suggerimento.
Non credo di essere riuscito ad afferrarlo, ( sei troppo avanti per me).

Io ho provato ad creare CSerial come classe derivata da CProvaDlg, ma non riesco comunque a concludere nulla.

class CProvaDlg : public CDialog , private CSerial
ho inclusa anche serial.h ma il compilatore mi da il messaggio d' errore: 'CSerial' : base class undefined

Comunque penso tu volessi intendere qualcos' altro.
Non e' che mi potresti fare un esempio semplice ?

Se per favore puoi autarmi te ne sarei grato.
Mi puoi far vedere anche dove sarebbe piu' opportuno creare l' oggetto affinche' in tutte le funzioni di CProvaDlg sia possibile utilizzarlo ?

Grazie tantissimo.
Ciao
Sergio

MItaly
18-09-2006, 15:25
No, intendevo dire di aggiungere un'istanza della classa CSerial come campo privato di CProvaDlg (se deve essere usata solamente mentre attiva questa finestra) o di CProvaApp.


//In CProvaDlg.h
#include "serial.h"
class CProvaDlg : public CDialog
{
//... qui ci stanno le varie dichiarazioni dei controlli e simili...
private:
CSerial serial("COM1); //Ammettendo che accetti un costruttore stringa.
}



//in una procedura evento di CProvaDlg.cpp
//...
serial.transmit(0x10); //Anche qui mi invento un metodo a caso
//...

In questo caso l'oggetto serial, campo privato di CProvaDlg, viene istanziato quando viene istanziata la classe CProvaDlg, ossia grosso modo quando viene caricata in memoria la finestra, e distrutto quando viene distrutta CProvaDlg.

Trader
18-09-2006, 15:36
P E R F E T T O !!!
Ti ringrazio tantissimo per l` aiuto.
Alla prossima
Ciao
Sergio

MItaly
18-09-2006, 15:38
Non c' di che. :ciauz:

Loading