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.