Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [c++] OOP

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152

    [c++] OOP

    Salve a tutti!!
    Ho realizzato un file cpp con una classe BASECLASS i cui metodi dovrebbero essere utilizzati da altre classi in altri file.
    sto quindi realizzando il file Header.


    Il problema è questo:
    Ho 2 metodi public:

    1) void Get(){......}
    2) void Get(int i){.....}

    e dichiaro un puntatore private
    float *puntmem;

    Nel file BASECLASS.h come li richiamo???
    Così va bene:

    private:
    float *puntmem;

    public:
    void Get();
    void Get(int i);
    ??


    Grazie
    andry80

  2. #2
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    io nono lo so però, a scuola ho studiato l'implementazione della classe, quindi se hai un nuovo file dovresti usare:

    #include " nome_classe.h " // file precedente

    e istanziare un dato membro della classe (private o public in base a come ti serve) di tipo (nome della classe usata in precedenza) per poi chiamarlo con una funzione membro della classe nuova se l'hai istanziato nello scope private, nome_oggetto.dato_membro se public per esempio...

    p.s. il corpo delle funzioni che stanno fuori della classe e di conseguenze nell'altro file .cpp (almeno cosi dovrebbe essere) ill corpo deve essere indicato con tutto il percorso esempio:

    BASECLASS::void Get()
    {
    }

    Non so se è giusto, spero di si, fammi sapere cosi imparo meglio anche io!!!

  3. #3
    Se vuoi richiamare le funzioni da altri file devi inserire
    #include BASECLASS.h

  4. #4
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    #include " BASECLASS.h " // file precedente

    Questo serve per includere una libreria

    è come se facessi

    #include <iostream.h>


    Solo che la seconda è predefinita, e anche obbligatorio per far patire il programma perchè include le funzioni principali del programmi.

    #include " BASECLASS.h "
    Include la classe BASECLASS, quindi puoi usare le sue funzioni!!!

    (la prima è una classe definita (creata da noi)!

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152
    BASECLASS::void Get???
    oppure void BASECLASS::Get??


    Ti ringrazio per l'aiuto
    andry80

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152
    Bene!

    Ho terminato il file BASECLASS.h che contiene :
    Protected:
    int a;
    int b;

    Public:
    static BASECLASS *prod(BASECLASS *p, float c);


    nel file cpp,(HO FATTO #include "BASECLASS") ho un costruttore parametrico i cui parametri sono proprio a e b , ma sorge un problema con il metodo prod:

    static BASECLASS BASECLASS::*prod(BASECLASS *p, float c)
    {
    BASECLASS *risultato = new BASECLASS(p->a,p->b);
    .....
    ......

    ......
    ......}
    Già qui il compilatore mi da una serie di errori:
    error
    line : 400 int BASECLASS::a' is protected
    line : 402 int BASECLASS::b' is protected

    Da cosa può dipendere??
    andry80

  7. #7
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    cosi penso:
    BASECLASS::void Get()

    Gli errori:
    line : 400 int BASECLASS::a' is protected
    line : 402 int BASECLASS::b' is protected

    sono dati, dal semplice fatto che hai dichiarato a e b come variabli di tipo protected, lo scope protected va usato per l'ereditarietà delle classi il quale sono un pò dolente ancora, dovresti dichiararle nello scope private, variabili dichiarate come protected si usa quando devono essere chiamate da funzioni membro di altre classi e non della medesima!! adesso a e b se non erro, sono state chiamate dalle funzione della stessa classe,
    quindi a e b sono dati membro della classe BASECLASS
    mentre la funzione con la quale le hai prese fa sempre parte di BASECLASS!!!!!!!!
    Secondo me dovresti provare dichiare quelle variabili come private

    spero di non averti detto cose sbagliate,se è sbagliato fammi sapere.. prova...


  8. #8
    Le variabili protected e private possono essere accedute solo dall'interno della classe.
    In piu', la variabili protected possono essere accudute _ANCHE_ dalle classi derivate.

    Per leggere o modificare i valori di variabili membro, e' buona pratica scrivere dei metodi appositi:

    codice:
    public blabla geta () {
       return a
    }
    
    public blabla seta (int valore) {
       a = valore
    }
    Mi sembra che pero' in C++ vi fosse una convenzione specifica per i costruttori che permetteva di settare tutti membri in maniera rapida ed indolore. Ma non ricordo bene...
    Pero' ricordo che, in generale, una funzione che deve accedere i membri privati di una classe puo' essere resa "amica" con la parola chiave "friend" preposta al suo prototipo.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  9. #9
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    line : 400 int BASECLASS::a' is protected
    line : 402 int BASECLASS::b' is protected

    Allora da che cosa è dovuto questo errore?

    Vorrei saperlo anche io a fine didattico!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152
    Ho capito. L'errore dipende dal fatto che il metodo è esterno alla classe BASECLASS, quindi non può accedere ne a variabili private ne a protected.

    Il fatto è che a me servono protected, perchè avrò, dopo,in altri file, anche delle classi derivate che ereditano BASECLASS.

    Io non lo so perchè sono alle prime armi con il c++, ma se ad esempio, potessi avere accesso al codice del file iostream.h (cosa penso impossibile), cosa vedrei????

    i metodi vengono implementati all'interno dello stesso header, o esiste anche un filo iostream.cpp???Chiedo questo perchè non ho capito bene come avvengono i collegamenti tra files e perchè poi, + avanti nel mio progetto, avrò bisogno dei metodi di BASECLASS come il "prod"(vedi post precedente) nell'implementazione di altre classi, quindi dovrò includere semplicemente il file BASECLASS.h
    andry80

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.