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

    [C++]best practices creazione classi

    Ciao, ho creato 3 classi:

    Monitor.h
    codice:
    #ifndef MONITOR_H_
    #define MONITOR_H_
    using namespace std;
    
    class Monitor
    {
    private:
    	float frequenza;
    	string risoluzione;
    	string marca;
    	
    public:
    	void setFrequenza(float _frequenza);
    	float getFrequenza();
    	void setRisoluzione(string _risoluzione);
    	string getRisoluzione();
    	void setMarca(string _marca);
    	string getMarca();
    }
    
    #endif /*MONITOR_H_*/
    Tastiera.h
    codice:
    #ifndef TASTIERA_H_
    #define TASTIERA_H_
    
    
    class Tastiera
    {	
    private:
    	int tasti;
    	string marca;
    public:
    	void setTasti(int _tasti);
    	int getTasti();
    	void setMarca(string _marca);
    	string getMarca();
    }
    
    #endif /*TASTIERA_H_*/
    Computer.h che contiene un oggetto Tastiera e Monitor
    codice:
    #include "Monitor.h"
    #include "Tastiera.h"
    #ifndef COMPUTER_H_
    #define COMPUTER_H_
    
    
    class Computer
    {
    private:
    	string marca;
    	Monitor monitor;
    	Tastiera tastiera;
    public:
    	void setMarca(string _marca);
    	string getMarca();
    	void setMonitor(Monitor _monitor);
    	Monitor getMonitor();
    	void setTastiera(Tastiera _tastiera);
    	Tastiera getTastiera();
    }
    
    #endif /*COMPUTER_H_*/
    Ora dov'è che devo definire i metodi delle classi dato che qui ho dato solo l'implemenatzione? Lo faccio in un file .cpp tipo main.cpp o all'interno delle classi create? Qual'è il modo migliore?
    Grazie

  2. #2
    In monitor.cpp, tastiera.cpp e computer.cpp. Quindi crea un main.cpp in cui si troverà il main che utilizzerà i vari oggetti.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Giusto, grazie!
    Ancora una cosa...se creo Monitor.cpp, per esempio, e implemento il metodo:

    codice:
    void Monitor::setFrequenza(float _frequenza){
    	
    }
    come faccio ad accedere alla varibile frequenza dichiarata in Monitor.h con private?
    Devo per forza metterla pubblic?

  4. #4
    codice:
    void Monitor::setFrequenza(float _frequenza){
    	frequenza = _frequenza;
    }

    Perché dovresti dichiararla come public? I metodi della classe possono tranquillamente accedere ai membri private... altrimenti a cosa servirebbero i campi privati, se nessuno ci potesse accedere?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    ovvio

    ma se faccio così nel file Monitor.cpp

    codice:
    #include "Monitor.h"
    #include <iostream>
    using namespace std;
    
    Monitor::Monitor(){}
    
    Monitor::~Monitor(){}
    
    void Monitor::setMarca(string _marca){
    	marca = _marca;
    }
    mi dice:
    prototype for "void Monitor::setMarca(std::string)" does not match any in class "Monitor"

    .......come mia?

  6. #6
    Vedo i tre seguenti errori:

    1. Devi mettere il ";" subito dopo la chiusura delle graffe delle dichiarazioni delle classi;
    codice:
    class ClasseErrata{
    } // <- errore perché non c'è il ";"
    
    class ClasseCorretta{
    }; // <- corretto perché c'è il ";"
    2. Definisci i metodi Monitor::Monitor () ed il distruttore della classe Monitor, ma non li dichiari;
    3. Non includi il file "string".
    codice:
    #include <string>

  7. #7
    ok, grazie per le dritte davvero molto utili e soprattutto mi funziona .
    Ora se nella classe Monitor vorrei aggiungere un metodo che mi ritornare l'oggetto Monitor in questione nel file "Monitor.h" dovrei aggiungere il seguente metodo pubblico:
    codice:
    Monitor getMonitor();
    Mentre in "Monitor.cpp" dovrei implementare, io ho provato a farlo in questo modo:
    codice:
    Monitor Monitor::getMonitor(){
    	return this->Monitor;
    }
    Ma mi dice che l'oggetto monitor non è valido...qualche dritta?
    E se volessi ritornare un puntatore alla classe Monitor come dovrei fare?
    Grazie.

  8. #8
    Ho risolto facendo così:
    codice:
    Monitor Monitor::getMonitor(){
    	return *this;
    }
    ma perchè prima non andava bene?
    diciamo che ci sono arrivato per intuito ma non ne sono pienamente coscente
    qualcuno mi illumina?
    Grazie

  9. #9
    Ora se nella classe Monitor vorrei aggiungere un metodo che mi ritornare l'oggetto Monitor in questione nel file "Monitor.h"
    Questo non ha nessun senso. A cosa dovrebbe servire un metodo che restituisce l'oggetto su cui lo stai chiamando?
    Amaro C++, il gusto pieno dell'undefined behavior.

  10. #10
    Originariamente inviato da MItaly
    Questo non ha nessun senso. A cosa dovrebbe servire un metodo che restituisce l'oggetto su cui lo stai chiamando?
    in realtà poi ne restituisce una copia..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.