Problema puntatore this

di il
7 risposte

Problema puntatore this

Buongiorno a tutti, vi chiedo aiuto perchè ho un problema con l'utilizzo del puntatore this. Vi posto la riga di codice interessata:
 virtual double calcola_y(double x) {return (this->h*this->calcola_y_adimensionale);}; 
Mi auguro possiate dirmi direttamente se c'è un problema formale in questa riga altrimenti sarei costretto a spiegarvi tutto il programma, e sarebbe una cosa mooolto lunga, crdetemi...Comunque tutti gli errori derivano da questa riga di codice, ne sono sicuro...Dove ho sbagliato ??...

grazie a tutti

7 Risposte

  • Re: Problema puntatore this

    
    virtual double calcola_y(double x) 
    {
       return ((this->h)*(this->calcola_y_adimensionale));
    }; 
    
    se questa riga è nel file .h puoi fare a meno del this.
    Può darsi che senza le parentesi il compilatore conosca *this che viene usato per passare la classe x riferimento.
  • Re: Problema puntatore this

    Ma questo
    
    calcola_y_adimensionale
    
    è una funzione che ritorna double oppure una variabile. Se una funzione ti mancano le tonde.
    
    virtual double calcola_y(double x)
    {
       return ((this->h)*(this->calcola_y_adimensionale()));
    }; 
    
  • Re: Problema puntatore this

    Altra domanda: Si tratta di una classe base da dove derivi delle altre classi? Com'è definito questa funzione nelle altre classi?
  • Re: Problema puntatore this

    Il termine calcola_y equivale esattamente alla y di un'equazione (come ad esempio y = x+2)...Si la riga è inserita all'interno di un file .h la cui classe è derivata da una classe base...per altre informazioni chiedete pure
  • Re: Problema puntatore this

    Il compilatore mi dice "è possibile utilizzare un puntatore a una funzione associata solo per chiamare la funzione"...se vi può essere utile
  • Re: Problema puntatore this

    Ti ho chiesto: calcola_y_adimensionale è UNA FUNZIONE? Se si ti mancano le parentesi tonde
    calcola_y_adimensionale(); Togli il this e se questa è una classe derivata togli anche il virtual se da questa classe non derivi altro.
  • Re: Problema puntatore this

    Ecco un esempio:
    classe.h
    
    #ifndef _myClass_
    #define _myClass_
    
    class Base
    {
    public:
    	Base();
    	virtual ~Base();
    	
    private:
    	double h;
    	virtual double calcola_y_adimensionale(double x);
    	virtual double calcola_y(double x);
    };
    
    Base::Base()
    : h(0.3)
    {
    }
    
    Base::~Base()
    {
    }
    
    double Base::calcola_y(double x)
    {
    	return h * calcola_y_adimensionale(x);
    }
    
    double Base::calcola_y_adimensionale(double x)
    {
    	return x;
    }
    
    class Derived : public Base
    {
    public:
    	Derived();
    	virtual ~Derived();
    	double h;
    	double calcola_y_adimensionale(double x);
    	double calcola_y(double x);
    };
    
    Derived::Derived()
    : h(0.1)
    {
    }
    
    Derived::~Derived()
    {
    
    }
    double Derived::calcola_y(double x)
    {
    	return h * calcola_y_adimensionale(x);
    }
    
    double Derived::calcola_y_adimensionale(double x)
    {
    	return x;
    }
    
    #endif
    
    main
    
    #include <iostream>
    #include "classe.h"
    
    
    int main()
    {
    	Derived d;
    
    	std::cout << d.calcola_y(0.5) << std::endl;
        return 0;
    }
    
    h su Base è 0.3 che moltiplicato per 0.5 dovrebbe dare 0.15.
    h su Derived è 0.1 che moltiplicato per 0.5 dovrebbe dare 0.05.

    L'output di questo programma è 0.05 quindi come vedi viene chiamata la funzione in Derived è non quella in Base.
    Come vedi non c'è nessun bisogno di specificare this. Il compilatore è abbastanza sveglio da ricavare da solo la classe da cui prendere la funzione da chiamare.
Devi accedere o registrarti per scrivere nel forum
7 risposte