Hola lista<div><br></div><div>Estoy aprendiendo C++, y copio este ejemplo que encontre para ver como funcionan las funciones virtuales.</div><div>El siguiente es el codigo que estoy probando:</div><div><br></div><div><div>
<span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>#include <iostream></b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>using namespace std; </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b><br></b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>class Vehicle   //This denotes the base class of C++ virtual function</b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>{ </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>public: </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        void Make()   //This denotes the C++ virtual function</b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        { </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>                virtual cout << "Member function of Base Class Vehicle Accessed" << endl;</b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        } </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>}; </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b> </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>class FourWheeler : public Vehicle </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>{ </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>public: </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        void Make() </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        { </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>                cout << "Virtual Member function of Derived class FourWheeler Accessed" << endl; </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        } </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>}; </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b> </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>int main() </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>{ </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        Vehicle *a, *b; </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        a = new Vehicle(); </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        a->Make(); </b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        b = new FourWheeler(); </b></font></span></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        b->Make(); </b></font></span></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><b><br></b></font></div><div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>        return(0);</b></font></span></div>
<div><span class="Apple-style-span" style="background-color:rgb(255,255,255)"><font class="Apple-style-span" face="'courier new', monospace"><b>}</b></font></span></div></div><div><br></div><div>Lo que noto es que si en lugar de definir punteros a y b a Vehicle, usara un puntero a Vehicle y otro a FourWheeler, no haria falta que declare el metodo Make como virtual.</div>
<div>El objeto puntero a FourWheeler accederia a su metodo Make correctamente.</div><div>No termino de entender porque usaria un puntero a Vehicle si voy a crear un objeto FourWheeler.</div><div>Alguien puede ilustrarme con algun caso donde tenga sentido tener metodos virtuales ?</div>
<div><br></div><div>Gracias</div><div><br></div>