#include "iostream" using namespace std; class Base{ public: void metodo(){ cout << "metodo della Base" << endl; getchar(); } }; class Derivata:public Base{ public: void metodo(){ cout << "metodo della Derivata" << endl; getchar(); } }; void main(){ Base*miaBase=new Base(); Derivata*miaDerivata=new Derivata(); miaBase->metodo(); miaDerivata->metodo(); }In questo caso il metodo metodo() della classe derivata nasconde il metodo metodo() della classe base.
Si dice nasconde perché quando io chiamo l'esecuzione di metodo() dalla classe derivata, mi esegue il codice specificato nel metodo riscritto nella classe derivata.
metodo della Base
metodo della Derivata
Se invece evito di scrivere un metodo() nella classe derivata, allora non viene nascosto quello ereditato:
#include "iostream" using namespace std; class Base{ public: void metodo(){ cout << "metodo della Base" << endl; getchar(); } }; class Derivata: public Base{ public: }; void main(){ Base*miaBase=new Base(); Derivata*miaDerivata=new Derivata(); miaBase->metodo(); miaDerivata->metodo(); }
metodo della Base
metodo della Base
Facciamo l'identica cosa in VB.NET:
Module Module1 Class Base Public Sub metodo() Console.WriteLine("metodo della Base") Console.ReadLine() End Sub End Class Class Derivata Inherits Base Public Sub metodo() Console.WriteLine("metodo della Derivata") Console.ReadLine() End Sub End Class Sub Main() Dim miaBase As New Base Dim miaDerivata As New Derivata miaBase.metodo() miaDerivata.metodo() End Sub
metodo della Base
metodo della Derivata
Togliamo, allo stesso modo, il metodo della classe derivata:
Module Module1 Class Base Public Sub metodo() Console.WriteLine("metodo della Base") Console.ReadLine() End Sub End Class Class Derivata Inherits Base End Class Sub Main() Dim miaBase As New Base Dim miaDerivata As New Derivata miaBase.metodo() miaDerivata.metodo() End Sub End Module
metodo della Base metodo della BaseBene. Anche qui il metodo metodo() della classe derivata nasconde il metodo metodo() della classe base.
Ma quando io scrivo nella classe derivata un metodo con lo stesso nome del metodo della classe base ottengo un warning che mi dice che è opportuno mettere Overloads.
Perché?
Nessun commento:
Posta un commento