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

    [C++] Problema con classi Derivate

    Il compilatore di Netbeans mostra degli errori, vorrei creare una classe base Quadrilatero, e la classe derivata Quadrato. Non so bene come fare il distruttore...comunque questo sono le classi (riporto la riga degli errori con commenti)

    Classe base .hpp:

    codice:
    #ifndef QUADRILATERO_HPP
    #define	QUADRILATERO_HPP
    
    //namespace Classi_Derivate{
    
            class Quadrilatero{
            public:
                       //Quadrilatero();
                       Quadrilatero(int l1, int l2, int l3, int l3, int l4);
                      //~Quadrilatero();
        
            public:
                     void setArea();
                     int getArea();
                     void setPerimetro();
                     int getPerimetro();
        
            };
    
    #endif	/* QUADRILATERO_HPP */
    La sua implementazione .cpp:

    codice:
    #include <stdio.h>
    #include <iostream>
    #include "Quadrilatero.hpp"
    
    using namespace std;
    
      //  namespace Classi_Derivate{     
    
          
        int l1; //primo lato;
        int l2;
        int l3;
        int l4;
        
        int area;
        int perimetro;
        
         Quadrilatero(int primo, int secondo, int terzo, int quarto){
            l1=primo;
            l2=secondo;
            l3=terzo;
            l4=quarto;
            
            setArea();
          Quadrato::  setPerimetro();     //perchč se non metto Quadrato:: dą errore?
        }
        
       /* ~Quadrilatero(){
        }*/
        
        void Quadrilatero:: setArea(){}
        
        int Quadrilatero:: getArea(){return area;}
        
        void Quadrilatero:: setPerimetro(){perimetro=l1+l2+l3+l4;}
        
        int Quadrilatero:: getPerimetro(){return perimetro;}
    La derivata .hpp:

    codice:
    #ifndef QUADRATO_HPP
    #define	QUADRATO_HPP
    #include <Quadrilatero.hpp>          /*errore  fatal error: Quadrilatero.hpp: No such file or directory*/
    
     class Quadrato : public Quadrilatero{
            public:
                       //Quadrilatero();
                       Quadrato(int lato);
                     // ~Quadrato();
        
            public:
                     void setArea();
                     int getArea();
                     void setPerimetro();
                     int getPerimetro();
            };
            
    #endif	/* QUADRATO_HPP */
    La sua implementazione .cpp:

    codice:
    #include <stdio.h>
    #include <iostream>
    #include "Quadrato.hpp"        //errore "In file included from"
    
    
    using namespace std;
    
        int l; 
        int area;
        int perimetro;
        
       Quadrato:: Quadrato(int lato){
            l=lato;
            
            setArea();
           Quadrato:: setPerimetro();
        }
        
       /* ~Quadrilatero(){
        }*/
        
        void setArea(){
            area=l^2;
        }
        
        int Quadrato:: getArea(){return area;}
        
        void Quadrato:: setPerimetro(){perimetro=l*4;}
        
        int Quadrato:: getPerimetro(){return perimetro;}
    E main finale:

    codice:
    #include <cstdlib>
    #include <cstdlib>
    #include <stdio.h>
    #include "Quadrilatero.hpp"
    #include <iostream>
    
    using namespace std;
    
    /*
     * 
     */
    int main(int argc, char** argv) {
        
        int number=5;
        Quadrilatero q=new Quadrato(number);
        
        int Area=q.getArea();
        int Perimetro=q.getPerimetro();
        
        printf("Il lato del quadrato č %d\n", number);
        printf("L' area č %d\n",Area);
        printf("Il perimetro č %d\n", Perimetro);
        //return 0;
    }
    Sapreste dirmi come mai quegli errori?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Hai fatto un bel po' di confusione ... č poco utile riprendere errore per errore in ogni linea ... (uno per tutti ... per calcolare il quadrato hai usato l'operatore ^ del BASIC ... che in C vuol dire altro ...).

    Ti riporto il codice corretto delle varie parti ...

    codice:
    #ifndef QUADRILATERO_HPP
    #define	QUADRILATERO_HPP
    
    class Quadrilatero
    {
    	protected:
    		int l1; 
    		int l2;
    		int l3;
    		int l4;
        
    		int area;
    		int perimetro;
        
    	public:
    		Quadrilatero(int l1, int l2, int l3, int l4);
        
    		void setArea();
    		int getArea();
    		void setPerimetro();
    		int getPerimetro();
    };
    
    #endif	/* QUADRILATERO_HPP */

    codice:
    #ifndef QUADRATO_HPP
    #define	QUADRATO_HPP
    #include "Quadrilatero.h"          
    
     class Quadrato : public Quadrilatero
     {
    	public:
    		Quadrato(int lato);
    		
    		void setArea();
    		int getArea();
    		void setPerimetro();
    		int getPerimetro();
    };
            
    #endif	/* QUADRATO_HPP */

    codice:
    #include "Quadrilatero.h"
    
    Quadrilatero::Quadrilatero(int primo, int secondo, int terzo, int quarto)
    {
    	l1=primo;
    	l2=secondo;
    	l3=terzo;
    	l4=quarto;
            
    	setArea();
    	setPerimetro();     
    }
        
    void Quadrilatero::setArea() {}
        
    int Quadrilatero::getArea() {return area;}
        
    void Quadrilatero::setPerimetro() {perimetro=l1+l2+l3+l4;}
        
    int Quadrilatero::getPerimetro() {return perimetro;}

    codice:
    #include "Quadrato.h"        
    
    Quadrato::Quadrato(int lato):Quadrilatero(lato, lato, lato, lato)
    {
    	setArea();
    	setPerimetro();
    }
        
    void Quadrato::setArea() {area=l1*l1;}
        
    int Quadrato::getArea() {return area;}
        
    void Quadrato::setPerimetro() {perimetro=l1*4;}
        
    int Quadrato::getPerimetro() {return perimetro;}

    codice:
    #include <cstdio>
    #include "Quadrato.h"
    
    int main(int argc, char** argv) 
    {
        int number=5;
        Quadrilatero *q=new Quadrato(number);
        
        int Area=q->getArea();
        int Perimetro=q->getPerimetro();
        
        printf("Il lato del quadrato č %d\n", number);
        printf("L' area č %d\n",Area);
        printf("Il perimetro č %d\n", Perimetro);
        
    	return 0;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Scusa ma a me non funziona......
    In Quadrato.cpp mi dą problemi con #include "Quadrato.hpp" . In Quadrato.hpp mi dą problemi con #include <Quadrilatero.hpp> .

    Sono molto confuso...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    I file include li ho chiamato

    .h

    ma va bene anche .hpp se cambi il codice che ti ho inviato
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    No no...non č quello il problema, l' ho corretto ma anche rinominando quei files resta l' errore..

    Anche mettendo .hpp non gli vanno bene...

  6. #6
    Non avresti altro da suggerire?

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da Darčios89
    Non avresti altro da suggerire?
    Posta il codice nuovamente ... comunque quello che avevo mandato funziona ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ok, ecco i codici, ho cambiato nell' inclusione al posto del #include e virgolette ho usato le parentesi angolare e adesso al posto di due errori ne trova uno solo, che ti indico nel codice stesso.

    codice:
    #ifndef QUADRILATERO_HPP
    #define	QUADRILATERO_HPP
    
    class Quadrilatero
    {
    	protected:
    		int l1; 
    		int l2;
    		int l3;
    		int l4;
        
    		int area;
    		int perimetro;
        
    	public:
    		Quadrilatero(int l1, int l2, int l3, int l4);
        
    		void setArea();
    		int getArea();
    		void setPerimetro();
    		int getPerimetro();
    };
    
    #endif	/* QUADRILATERO_HPP */
    codice:
    #ifndef QUADRATO_HPP
    #define	QUADRATO_HPP
    #include <Quadrilatero.hpp>          
    
     class Quadrato : public Quadrilatero
     {
    	public:
    		Quadrato(int lato);
                    
    		void setArea();
    		int getArea();
    		void setPerimetro();
    		int getPerimetro();
    };
            
    #endif	/* QUADRATO_HPP */
    codice:
    #include <Quadrato.hpp>       //mi dą errore di directory...
    
    Quadrato::Quadrato(int lato):Quadrilatero(lato, lato, lato, lato)
    {
    	setArea();
    	setPerimetro();
    }
        
    void Quadrato::setArea() {area=l1*l1;}
        
    int Quadrato::getArea() {return area;}
        
    void Quadrato::setPerimetro() {perimetro=l1*4;}
        
    int Quadrato::getPerimetro() {return perimetro;}
    codice:
    #include <Quadrilatero.hpp>
    
    Quadrilatero::Quadrilatero(int primo, int secondo, int terzo, int quarto)
    {
    	l1=primo;
    	l2=secondo;
    	l3=terzo;
    	l4=quarto;
            
    	setArea();
    	setPerimetro();     
    }
        
    void Quadrilatero::setArea() {}
        
    int Quadrilatero::getArea() {return area;}
        
    void Quadrilatero::setPerimetro() {perimetro=l1+l2+l3+l4;}
        
    int Quadrilatero::getPerimetro() {return perimetro;}
    codice:
    #include <cstdio>
    #include <Quadrato.hpp>
    
    int main(int argc, char** argv) 
    {
        int number=5;
        Quadrilatero *q=new Quadrato(number);
        
        int Area=q->getArea();
        int Perimetro=q->getPerimetro();
        
        printf("Il lato del quadrato č %d\n", number);
        printf("L' area č %d\n",Area);
        printf("Il perimetro č %d\n", Perimetro);
    Uso Netbeans....non so se č un problema di directory ma tutti i file sono nel progetto quindi non capisco come possa essere...

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    L'include dovrebbe essere con le virgolette e non con <>

    Questo indica che i file include sono locali al progetto e non in una cartella "include" dell'ambiente o del compilatore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Siii! Adesso va, ti ringrazio, allora devo ricontrollare nel fisso se mi dą problemi qui sul portatile adesso va. Grazie della pazienza. Una cosa...sapresti dirmi come fare a scrivere delle informazioni diversamente da come ho fatto io? Mi spiego, per esempio io scrivo:

    codice:
    printf("Il perimetro e'\n",number)
    Mi stampa letteralmente "Il perimetro č 20". Se volessi aggiungere centimetri dopo il 20 come potrei scrivere la printf? Oppure potrei farlo con le librerie standard del C++?

    Grazie mille

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.