Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197

    [c++] classi derivate e output con formattazione

    ho due classi, una derivata dall'altra che devono stampare a schermo semplicemente dei numeri(coordinate x,y)

    intestazione classe base: (elemento_base.h)
    codice:
    //header della classe
    class elemento_base
    {
     public:
            elemento_base();
            ~elemento_base();
            
            float x,y;
            int incl;
            
            void scrivi_coord();
                  
            
     private:
            float _x,_y;
            int _incl; 
                 
    };

    implementazione classe base: (elemento_base.cpp)
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <cstdio>  //aggiunto per la funzione printf, per scrivere formattato
    #include "elemento_base.h"
    
    using namespace std;
    
    
    //---------implementazione metodi-------------
    void elemento_base::scrivi_coord()
    {
         printf("------------------\n");
         printf("ascissa: %f\n",_x);
         printf("ordinata: %f\n",_y);
         printf("inclinazione: %i\n",_incl);
         printf("------------------\n");
    }
    
    //----------implementazione costruttore/distruttore-----
    
    elemento_base::elemento_base()
    {
        cout << "classe base" << endl;
    }
    elemento_base::~elemento_base()
    {
    
    }
    intestazione classe derivata: (subposizione.h)
    codice:
    #include "elemento_base.h"
    
    class subposizione : public elemento_base
    {
        public: 
          subposizione();
         ~subposizione();
         
    };
    implementazione classe derivata: (subposizione.cpp)
    codice:
    #include "subposizione.h"
    #include <iostream>
    
    
    using namespace std;
    
    //implementazione costruttire/distruttore
    subposizione::subposizione()
    {
        std:cout << "classe derivata" << endl;
    }
    subposizione::~subposizione()
    {
    
    }
    intestazione main: [qui c'e' solo la dichiarazione di una struttura che mi serve per passare le coordinate nel main] (main.h)
    codice:
    //struttura per manipolare le coordinate
    struct strutturaposizione
    {
           float x_pos; 
           float y_pos;
           int gradi;    
    };
    implementazione del main: (main.cpp)
    codice:
    #include "subposizione.h"
    #include <cstdlib>
    #include "main.h"
    
    int main(int argc, char *argv[])
    {
        //popolo la struttura che mi servira per passare le coordinate alla classe
        strutturaposizione myPosition;    
        myPosition.x_pos = 100;
        myPosition.y_pos = 100;
        myPosition.gradi = 45;
    
        
        subposizione mySubpos;  
        
        //imposto le proprieta della classe
        mySubpos.x = myPosition.x_pos;
        mySubpos.y = myPosition.y_pos;
        mySubpos.incl = myPosition.gradi;
        
        mySubpos.scrivi_coord();  //chiamo il meodo
        
        system("PAUSE");
        return EXIT_SUCCESS;
        
    }

    ora quello che m aspetto è una cosa del genere:

    classe base
    classe derivata
    ------------------
    ascissa: 100
    ordinata: 100
    inclinazione: 45
    ------------------
    Premere un tasto per continuare . . .




    ma ottengo questo:

    classe base
    classe derivata
    ------------------
    ascissa: 0.000000
    ordinata: 7803114877267773200000000000000000.000000
    inclinazione: 2008948848
    ------------------
    Premere un tasto per continuare . . .



    ho provato a sostiture i codici di formattazione della riga printf("ascissa: %f\n",_x); con %s ma mi scrive

    ascissa: null e poi va in crash l'applicazione

    mi potete dare una mano? perche la formattazione viene in quel modo?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Il problema e' di logica di implementazione della classe.

    Hai dichiarato dei membri privati (che sono quelli che visualizzi) a cui NON ASSEGNI mai dei valori. Inoltre, dichiari dei membri pubblici che non servono e che utilizzi solamente per assegnare i valori passati ...

    O dichiari solamente i membri pubblici e utilizzi quelli nel metodo che visualizza i valori, oppure, dichiari solamente i membri privati e modifichi il loro valore tramite un metodo o tramite il costruttore ...

  3. #3
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    cacchio che dimenticanza stupida hai ragione, manca l'assegnamento alle variabili private

    ho dichiarato anche dei membri pubblici per usarli come "proprieta da valorizzare"
    e quelli privati per lavorarci all'interno della classe, ha senso questo concetto di proprieta in c++ a mo di VisualBasic oppure non esiste?


    se ha senso in che parte di codice dovrei poi fare questo assegnamento _x = x;

    cioe al variare di una propieta'(nel mio caso un membro pubblico) faccio scattare una sorta di evento(magari in c++ sto usando questo termine impropriamente) all'interno del quale vado ad assegnare ai membri privati i valori che ho fornito alla proprieta

    spero di essermi spiegato, non so se si puo' fare questa cosa alla visualbasic, alla java .... insomma per isolare l'interno con l'esterno
    cmq ho colto il tuo suggerimento di usare direttamente il membro pubblico per lavorarci all'interno della classe

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Se hai dichiarato i membri pubblici non puoi assegnare i loro valori (quando cambiano) a quelli privati. E' un modo sbagliato di costruire una classe.

    Dichiara solamente le variabili membro private e permetti il loro utilizzo soltanto a metodi pubblici. Dichiara un metodo della classe simile a questo

    void SetStato(double x, double y, int d)

    e al suo interno valorizza i membri privati. Richiamalo con

    mySubpos.SetStato(100, 100, 45);

  5. #5
    Utente di HTML.it L'avatar di afrappe
    Registrato dal
    Jan 2002
    Messaggi
    1,197
    perfetto thanks

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.